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