package plugin import ( "testing" kapi "k8s.io/kubernetes/pkg/api" osapi "github.com/openshift/origin/pkg/sdn/api" ) func TestMasterVNIDMap(t *testing.T) { vmap := newMasterVNIDMap() // empty vmap checkCurrentVNIDs(t, vmap, 0, 0) // assign vnids _, _, err := vmap.allocateNetID(kapi.NamespaceDefault) checkNoErr(t, err) _, exists, err := vmap.allocateNetID("alpha") checkNoErr(t, err) if exists { t.Fatalf("expected netid not to exists") } _, exists, err = vmap.allocateNetID("alpha") checkNoErr(t, err) if !exists { t.Fatalf("expected allocated netid to exists") } _, _, err = vmap.allocateNetID("bravo") checkNoErr(t, err) _, _, err = vmap.allocateNetID("charlie") checkNoErr(t, err) checkCurrentVNIDs(t, vmap, 4, 3) // update vnids _, err = vmap.updateNetID("alpha", osapi.JoinPodNetwork, "bravo") checkNoErr(t, err) _, err = vmap.updateNetID("alpha", osapi.JoinPodNetwork, "bogus") checkErr(t, err) _, err = vmap.updateNetID("bogus", osapi.JoinPodNetwork, "alpha") checkErr(t, err) checkCurrentVNIDs(t, vmap, 4, 2) _, err = vmap.updateNetID("alpha", osapi.GlobalPodNetwork, "") checkNoErr(t, err) _, err = vmap.updateNetID("charlie", osapi.GlobalPodNetwork, "") checkNoErr(t, err) _, err = vmap.updateNetID("bogus", osapi.GlobalPodNetwork, "") checkErr(t, err) checkCurrentVNIDs(t, vmap, 4, 1) _, err = vmap.updateNetID("alpha", osapi.IsolatePodNetwork, "") checkNoErr(t, err) _, err = vmap.updateNetID("bravo", osapi.IsolatePodNetwork, "") checkNoErr(t, err) _, err = vmap.updateNetID("bogus", osapi.IsolatePodNetwork, "") checkErr(t, err) checkCurrentVNIDs(t, vmap, 4, 2) // release vnids checkNoErr(t, vmap.releaseNetID("alpha")) checkNoErr(t, vmap.releaseNetID("bravo")) checkNoErr(t, vmap.releaseNetID("charlie")) checkNoErr(t, vmap.releaseNetID(kapi.NamespaceDefault)) checkErr(t, vmap.releaseNetID("bogus")) checkCurrentVNIDs(t, vmap, 0, 0) } func checkNoErr(t *testing.T, err error) { if err != nil { t.Fatal(err) } } func checkErr(t *testing.T, err error) { if err == nil { t.Fatalf("Expected error is missing!") } } func checkCurrentVNIDs(t *testing.T, vmap *masterVNIDMap, expectedMapCount, expectedAllocatorCount int) { if len(vmap.ids) != expectedMapCount { t.Fatalf("Wrong number of VNIDs: %d vs %d", len(vmap.ids), expectedMapCount) } // Check bitmap allocator expected_free := int(osapi.MaxVNID-osapi.MinVNID) + 1 - expectedAllocatorCount if vmap.netIDManager.Free() != expected_free { t.Fatalf("Allocator mismatch: %d vs %d", vmap.netIDManager.Free(), expected_free) } for _, id := range vmap.ids { if id == osapi.GlobalVNID { continue } if !vmap.netIDManager.Has(id) { t.Fatalf("Missing VNID: %d", id) } } }