package netid import ( "strconv" "testing" "k8s.io/kubernetes/pkg/util/sets" ) func TestAllocate(t *testing.T) { nr, err := NewNetIDRange(201, 300) if err != nil { t.Fatal(err) } r := NewInMemory(nr) if f := r.Free(); f != 100 { t.Errorf("unexpected free %d", f) } // Test AllocateNext() found := sets.NewString() count := 0 for r.Free() > 0 { netid, err := r.AllocateNext() if err != nil { t.Fatalf("error @ %d: %v", count, err) } count++ if ok, _ := nr.Contains(netid); !ok { t.Fatalf("allocated %d which is outside of %v", netid, nr) } netidString := strconv.Itoa(int(netid)) if found.Has(netidString) { t.Fatalf("allocated %d twice @ %d", netid, count) } found.Insert(netidString) } if count != 100 { t.Fatal("failed to allocate all netids in the given range") } if _, err := r.AllocateNext(); err != ErrFull { t.Fatal(err) } // Test Release() released := uint32(210) if err := r.Release(released); err != nil { t.Fatal(err) } if f := r.Free(); f != 1 { t.Errorf("unexpected free %d", f) } netid, err := r.AllocateNext() if err != nil { t.Fatal(err) } if released != netid { t.Errorf("unexpected %d : %d", netid, released) } // Test Allocate() if err := r.Release(released); err != nil { t.Fatal(err) } if err := r.Allocate(1); err != ErrNotInRange { t.Fatal(err) } if err := r.Allocate(201); err != ErrAllocated { t.Fatal(err) } if err := r.Allocate(301); err != ErrNotInRange { t.Fatal(err) } if err := r.Allocate(500); err != ErrNotInRange { t.Fatal(err) } if f := r.Free(); f != 1 { t.Errorf("unexpected free %d", f) } if err := r.Allocate(released); err != nil { t.Fatal(err) } if f := r.Free(); f != 0 { t.Errorf("unexpected free %d", f) } }