Refactor port allocation logic a little, deflake tests.
This commit is contained in:
@@ -31,15 +31,26 @@ func TestRangeAllocatorEmpty(t *testing.T) {
|
||||
t.Fatalf("expected panic because of empty port range: %#v", r)
|
||||
}
|
||||
}()
|
||||
_ = newPortRangeAllocator(*r)
|
||||
_ = newPortRangeAllocator(*r, true)
|
||||
}
|
||||
|
||||
func TestRangeAllocatorFullyAllocated(t *testing.T) {
|
||||
r := &net.PortRange{}
|
||||
r.Set("1-1")
|
||||
pra := newPortRangeAllocator(*r)
|
||||
// Don't auto-fill ports, we'll manually turn the crank
|
||||
pra := newPortRangeAllocator(*r, false)
|
||||
a := pra.(*rangeAllocator)
|
||||
|
||||
// Fill in the one available port
|
||||
if !a.fillPortsOnce() {
|
||||
t.Fatalf("Expected to be able to fill ports")
|
||||
}
|
||||
|
||||
// There should be no ports available
|
||||
if a.fillPortsOnce() {
|
||||
t.Fatalf("Expected to be unable to fill ports")
|
||||
}
|
||||
|
||||
p, err := a.AllocateNext()
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
@@ -68,6 +79,11 @@ func TestRangeAllocatorFullyAllocated(t *testing.T) {
|
||||
}
|
||||
a.lock.Unlock()
|
||||
|
||||
// Fill in the one available port
|
||||
if !a.fillPortsOnce() {
|
||||
t.Fatalf("Expected to be able to fill ports")
|
||||
}
|
||||
|
||||
p, err = a.AllocateNext()
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
@@ -91,13 +107,16 @@ func TestRangeAllocatorFullyAllocated(t *testing.T) {
|
||||
func TestRangeAllocator_RandomishAllocation(t *testing.T) {
|
||||
r := &net.PortRange{}
|
||||
r.Set("1-100")
|
||||
pra := newPortRangeAllocator(*r)
|
||||
pra := newPortRangeAllocator(*r, false)
|
||||
a := pra.(*rangeAllocator)
|
||||
|
||||
// allocate all the ports
|
||||
var err error
|
||||
ports := make([]int, 100, 100)
|
||||
for i := 0; i < 100; i++ {
|
||||
if !a.fillPortsOnce() {
|
||||
t.Fatalf("Expected to be able to fill ports")
|
||||
}
|
||||
ports[i], err = a.AllocateNext()
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
@@ -113,6 +132,10 @@ func TestRangeAllocator_RandomishAllocation(t *testing.T) {
|
||||
a.lock.Unlock()
|
||||
}
|
||||
|
||||
if a.fillPortsOnce() {
|
||||
t.Fatalf("Expected to be unable to fill ports")
|
||||
}
|
||||
|
||||
// release them all
|
||||
for i := 0; i < 100; i++ {
|
||||
a.Release(ports[i])
|
||||
@@ -127,6 +150,9 @@ func TestRangeAllocator_RandomishAllocation(t *testing.T) {
|
||||
// allocate the ports again
|
||||
rports := make([]int, 100, 100)
|
||||
for i := 0; i < 100; i++ {
|
||||
if !a.fillPortsOnce() {
|
||||
t.Fatalf("Expected to be able to fill ports")
|
||||
}
|
||||
rports[i], err = a.AllocateNext()
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
@@ -142,6 +168,10 @@ func TestRangeAllocator_RandomishAllocation(t *testing.T) {
|
||||
a.lock.Unlock()
|
||||
}
|
||||
|
||||
if a.fillPortsOnce() {
|
||||
t.Fatalf("Expected to be unable to fill ports")
|
||||
}
|
||||
|
||||
if reflect.DeepEqual(ports, rports) {
|
||||
t.Fatalf("expected re-allocated ports to be in a somewhat random order")
|
||||
}
|
||||
|
Reference in New Issue
Block a user