فهرست منبع

Merge pull request #2152 from euanh/ipam-pool-double-alloc-test

ipam/allocator_test: Test pool double-release behavior
Flavio Crisciani 7 سال پیش
والد
کامیت
5f0e69d002
1فایلهای تغییر یافته به همراه36 افزوده شده و 0 حذف شده
  1. 36 0
      libnetwork/ipam/allocator_test.go

+ 36 - 0
libnetwork/ipam/allocator_test.go

@@ -288,6 +288,42 @@ func TestAddSubnets(t *testing.T) {
 	}
 	}
 }
 }
 
 
+// TestDoublePoolRelease tests that releasing a pool which has already
+// been released raises an error.
+func TestDoublePoolRelease(t *testing.T) {
+	for _, store := range []bool{false, true} {
+		for _, repeats := range []int{0, 1, 10} {
+			a, err := getAllocator(store)
+			assert.NoError(t, err)
+
+			// Request initial pool allocation
+			pid0, _, _, err := a.RequestPool(localAddressSpace, "10.0.0.0/8", "", nil, false)
+			assert.NoError(t, err)
+
+			// Re-request the same pool
+			for i := 0; i < repeats; i++ {
+				pidN, _, _, err := a.RequestPool(localAddressSpace, "10.0.0.0/8", "", nil, false)
+				assert.NoError(t, err)
+				assert.Equal(t, pid0, pidN)
+			}
+
+			// Release the repeats
+			for i := 0; i < repeats; i++ {
+				err = a.ReleasePool(pid0)
+				assert.NoError(t, err)
+			}
+
+			// Release the initial request
+			err = a.ReleasePool(pid0)
+			assert.NoError(t, err)
+
+			// Releasing again fails
+			err = a.ReleasePool(pid0)
+			assert.Error(t, err)
+		}
+	}
+}
+
 func TestAddReleasePoolID(t *testing.T) {
 func TestAddReleasePoolID(t *testing.T) {
 	for _, store := range []bool{false, true} {
 	for _, store := range []bool{false, true} {
 		a, err := getAllocator(store)
 		a, err := getAllocator(store)