github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/libnetwork/idm/idm_test.go (about) 1 package idm 2 3 import ( 4 "testing" 5 6 _ "github.com/docker/docker/libnetwork/testutils" 7 ) 8 9 func TestNew(t *testing.T) { 10 _, err := New(nil, "", 0, 1) 11 if err == nil { 12 t.Fatal("Expected failure, but succeeded") 13 } 14 15 _, err = New(nil, "myset", 1<<10, 0) 16 if err == nil { 17 t.Fatal("Expected failure, but succeeded") 18 } 19 20 i, err := New(nil, "myset", 0, 10) 21 if err != nil { 22 t.Fatalf("Unexpected failure: %v", err) 23 } 24 if i.handle == nil { 25 t.Fatal("set is not initialized") 26 } 27 if i.start != 0 { 28 t.Fatal("unexpected start") 29 } 30 if i.end != 10 { 31 t.Fatal("unexpected end") 32 } 33 } 34 35 func TestAllocate(t *testing.T) { 36 i, err := New(nil, "myids", 50, 52) 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 if err = i.GetSpecificID(49); err == nil { 42 t.Fatal("Expected failure but succeeded") 43 } 44 45 if err = i.GetSpecificID(53); err == nil { 46 t.Fatal("Expected failure but succeeded") 47 } 48 49 o, err := i.GetID(false) 50 if err != nil { 51 t.Fatal(err) 52 } 53 if o != 50 { 54 t.Fatalf("Unexpected first id returned: %d", o) 55 } 56 57 err = i.GetSpecificID(50) 58 if err == nil { 59 t.Fatal(err) 60 } 61 62 o, err = i.GetID(false) 63 if err != nil { 64 t.Fatal(err) 65 } 66 if o != 51 { 67 t.Fatalf("Unexpected id returned: %d", o) 68 } 69 70 o, err = i.GetID(false) 71 if err != nil { 72 t.Fatal(err) 73 } 74 if o != 52 { 75 t.Fatalf("Unexpected id returned: %d", o) 76 } 77 78 o, err = i.GetID(false) 79 if err == nil { 80 t.Fatalf("Expected failure but succeeded: %d", o) 81 } 82 83 i.Release(50) 84 85 o, err = i.GetID(false) 86 if err != nil { 87 t.Fatal(err) 88 } 89 if o != 50 { 90 t.Fatal("Unexpected id returned") 91 } 92 93 i.Release(52) 94 err = i.GetSpecificID(52) 95 if err != nil { 96 t.Fatal(err) 97 } 98 } 99 100 func TestUninitialized(t *testing.T) { 101 i := &Idm{} 102 103 if _, err := i.GetID(false); err == nil { 104 t.Fatal("Expected failure but succeeded") 105 } 106 107 if err := i.GetSpecificID(44); err == nil { 108 t.Fatal("Expected failure but succeeded") 109 } 110 } 111 112 func TestAllocateInRange(t *testing.T) { 113 i, err := New(nil, "myset", 5, 10) 114 if err != nil { 115 t.Fatal(err) 116 } 117 118 o, err := i.GetIDInRange(6, 6, false) 119 if err != nil { 120 t.Fatal(err) 121 } 122 if o != 6 { 123 t.Fatalf("Unexpected id returned. Expected: 6. Got: %d", o) 124 } 125 126 if err = i.GetSpecificID(6); err == nil { 127 t.Fatalf("Expected failure but succeeded") 128 } 129 130 o, err = i.GetID(false) 131 if err != nil { 132 t.Fatal(err) 133 } 134 if o != 5 { 135 t.Fatalf("Unexpected id returned. Expected: 5. Got: %d", o) 136 } 137 138 i.Release(6) 139 140 o, err = i.GetID(false) 141 if err != nil { 142 t.Fatal(err) 143 } 144 if o != 6 { 145 t.Fatalf("Unexpected id returned. Expected: 6. Got: %d", o) 146 } 147 148 for n := 7; n <= 10; n++ { 149 o, err := i.GetIDInRange(7, 10, false) 150 if err != nil { 151 t.Fatal(err) 152 } 153 if o != uint64(n) { 154 t.Fatalf("Unexpected id returned. Expected: %d. Got: %d", n, o) 155 } 156 } 157 158 if err = i.GetSpecificID(7); err == nil { 159 t.Fatalf("Expected failure but succeeded") 160 } 161 162 if err = i.GetSpecificID(10); err == nil { 163 t.Fatalf("Expected failure but succeeded") 164 } 165 166 i.Release(10) 167 168 o, err = i.GetIDInRange(5, 10, false) 169 if err != nil { 170 t.Fatal(err) 171 } 172 if o != 10 { 173 t.Fatalf("Unexpected id returned. Expected: 10. Got: %d", o) 174 } 175 176 i.Release(5) 177 178 o, err = i.GetIDInRange(5, 10, false) 179 if err != nil { 180 t.Fatal(err) 181 } 182 if o != 5 { 183 t.Fatalf("Unexpected id returned. Expected: 5. Got: %d", o) 184 } 185 186 for n := 5; n <= 10; n++ { 187 i.Release(uint64(n)) 188 } 189 190 for n := 5; n <= 10; n++ { 191 o, err := i.GetIDInRange(5, 10, false) 192 if err != nil { 193 t.Fatal(err) 194 } 195 if o != uint64(n) { 196 t.Fatalf("Unexpected id returned. Expected: %d. Got: %d", n, o) 197 } 198 } 199 200 for n := 5; n <= 10; n++ { 201 if err = i.GetSpecificID(uint64(n)); err == nil { 202 t.Fatalf("Expected failure but succeeded for id: %d", n) 203 } 204 } 205 206 // New larger set 207 ul := uint64((1 << 24) - 1) 208 i, err = New(nil, "newset", 0, ul) 209 if err != nil { 210 t.Fatal(err) 211 } 212 213 o, err = i.GetIDInRange(4096, ul, false) 214 if err != nil { 215 t.Fatal(err) 216 } 217 if o != 4096 { 218 t.Fatalf("Unexpected id returned. Expected: 4096. Got: %d", o) 219 } 220 221 o, err = i.GetIDInRange(4096, ul, false) 222 if err != nil { 223 t.Fatal(err) 224 } 225 if o != 4097 { 226 t.Fatalf("Unexpected id returned. Expected: 4097. Got: %d", o) 227 } 228 229 o, err = i.GetIDInRange(4096, ul, false) 230 if err != nil { 231 t.Fatal(err) 232 } 233 if o != 4098 { 234 t.Fatalf("Unexpected id returned. Expected: 4098. Got: %d", o) 235 } 236 } 237 238 func TestAllocateSerial(t *testing.T) { 239 i, err := New(nil, "myids", 50, 55) 240 if err != nil { 241 t.Fatal(err) 242 } 243 244 if err = i.GetSpecificID(49); err == nil { 245 t.Fatal("Expected failure but succeeded") 246 } 247 248 if err = i.GetSpecificID(56); err == nil { 249 t.Fatal("Expected failure but succeeded") 250 } 251 252 o, err := i.GetID(true) 253 if err != nil { 254 t.Fatal(err) 255 } 256 if o != 50 { 257 t.Fatalf("Unexpected first id returned: %d", o) 258 } 259 260 err = i.GetSpecificID(50) 261 if err == nil { 262 t.Fatal(err) 263 } 264 265 o, err = i.GetID(true) 266 if err != nil { 267 t.Fatal(err) 268 } 269 if o != 51 { 270 t.Fatalf("Unexpected id returned: %d", o) 271 } 272 273 o, err = i.GetID(true) 274 if err != nil { 275 t.Fatal(err) 276 } 277 if o != 52 { 278 t.Fatalf("Unexpected id returned: %d", o) 279 } 280 281 i.Release(50) 282 283 o, err = i.GetID(true) 284 if err != nil { 285 t.Fatal(err) 286 } 287 if o != 53 { 288 t.Fatal("Unexpected id returned") 289 } 290 291 i.Release(52) 292 err = i.GetSpecificID(52) 293 if err != nil { 294 t.Fatal(err) 295 } 296 }