github.com/aaa256/atlantis@v0.0.0-20210707112435-42ee889287a2/swarm/network/kademlia_test.go (about) 1 // Copyright 2017 The go-athereum Authors 2 // This file is part of the go-athereum library. 3 // 4 // The go-athereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-athereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-athereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package network 18 19 import ( 20 "bytes" 21 "fmt" 22 "os" 23 "testing" 24 "time" 25 26 "github.com/athereum/go-athereum/common" 27 "github.com/athereum/go-athereum/log" 28 "github.com/athereum/go-athereum/swarm/pot" 29 ) 30 31 func init() { 32 h := log.LvlFilterHandler(log.LvlWarn, log.StreamHandler(os.Stderr, log.TerminalFormat(true))) 33 log.Root().SetHandler(h) 34 } 35 36 func testKadPeerAddr(s string) *BzzAddr { 37 a := pot.NewAddressFromString(s) 38 return &BzzAddr{OAddr: a, UAddr: a} 39 } 40 41 type testDropPeer struct { 42 Peer 43 dropc chan error 44 } 45 46 type dropError struct { 47 error 48 addr string 49 } 50 51 func (d *testDropPeer) Drop(err error) { 52 err2 := &dropError{err, binStr(d)} 53 d.dropc <- err2 54 } 55 56 type testKademlia struct { 57 *Kademlia 58 Discovery bool 59 dropc chan error 60 } 61 62 func newTestKademlia(b string) *testKademlia { 63 params := NewKadParams() 64 params.MinBinSize = 1 65 params.MinProxBinSize = 2 66 base := pot.NewAddressFromString(b) 67 return &testKademlia{ 68 NewKademlia(base, params), 69 false, 70 make(chan error), 71 } 72 } 73 74 func (k *testKademlia) newTestKadPeer(s string) Peer { 75 return &testDropPeer{&BzzPeer{BzzAddr: testKadPeerAddr(s)}, k.dropc} 76 } 77 78 func (k *testKademlia) On(ons ...string) *testKademlia { 79 for _, s := range ons { 80 k.Kademlia.On(k.newTestKadPeer(s).(OverlayConn)) 81 } 82 return k 83 } 84 85 func (k *testKademlia) Off(offs ...string) *testKademlia { 86 for _, s := range offs { 87 k.Kademlia.Off(k.newTestKadPeer(s).(OverlayConn)) 88 } 89 90 return k 91 } 92 93 func (k *testKademlia) Register(regs ...string) *testKademlia { 94 var as []OverlayAddr 95 for _, s := range regs { 96 as = append(as, testKadPeerAddr(s)) 97 } 98 err := k.Kademlia.Register(as) 99 if err != nil { 100 panic(err.Error()) 101 } 102 return k 103 } 104 105 func testSuggestPeer(t *testing.T, k *testKademlia, expAddr string, expPo int, expWant bool) error { 106 addr, o, want := k.SuggestPeer() 107 if binStr(addr) != expAddr { 108 return fmt.Errorf("incorrect peer address suggested. expected %v, got %v", expAddr, binStr(addr)) 109 } 110 if o != expPo { 111 return fmt.Errorf("incorrect prox order suggested. expected %v, got %v", expPo, o) 112 } 113 if want != expWant { 114 return fmt.Errorf("expected SuggestPeer to want peers: %v", expWant) 115 } 116 return nil 117 } 118 119 func binStr(a OverlayPeer) string { 120 if a == nil { 121 return "<nil>" 122 } 123 return pot.ToBin(a.Address())[:8] 124 } 125 126 func TestSuggestPeerBug(t *testing.T) { 127 // 2 row gap, unsaturated proxbin, no callables -> want PO 0 128 k := newTestKademlia("00000000").On( 129 "10000000", "11000000", 130 "01000000", 131 132 "00010000", "00011000", 133 ).Off( 134 "01000000", 135 ) 136 err := testSuggestPeer(t, k, "01000000", 0, false) 137 if err != nil { 138 t.Fatal(err.Error()) 139 } 140 } 141 142 func TestSuggestPeerFindPeers(t *testing.T) { 143 // 2 row gap, unsaturated proxbin, no callables -> want PO 0 144 k := newTestKademlia("00000000").On("00100000") 145 err := testSuggestPeer(t, k, "<nil>", 0, false) 146 if err != nil { 147 t.Fatal(err.Error()) 148 } 149 150 // 2 row gap, saturated proxbin, no callables -> want PO 0 151 k.On("00010000") 152 err = testSuggestPeer(t, k, "<nil>", 0, false) 153 if err != nil { 154 t.Fatal(err.Error()) 155 } 156 157 // 1 row gap (1 less), saturated proxbin, no callables -> want PO 1 158 k.On("10000000") 159 err = testSuggestPeer(t, k, "<nil>", 1, false) 160 if err != nil { 161 t.Fatal(err.Error()) 162 } 163 164 // no gap (1 less), saturated proxbin, no callables -> do not want more 165 k.On("01000000", "00100001") 166 err = testSuggestPeer(t, k, "<nil>", 0, false) 167 if err != nil { 168 t.Fatal(err.Error()) 169 } 170 171 // oversaturated proxbin, > do not want more 172 k.On("00100001") 173 err = testSuggestPeer(t, k, "<nil>", 0, false) 174 if err != nil { 175 t.Fatal(err.Error()) 176 } 177 178 // reintroduce gap, disconnected peer callable 179 // log.Info(k.String()) 180 k.Off("01000000") 181 err = testSuggestPeer(t, k, "01000000", 0, false) 182 if err != nil { 183 t.Fatal(err.Error()) 184 } 185 186 // second time disconnected peer not callable 187 // with reasonably set Interval 188 err = testSuggestPeer(t, k, "<nil>", 1, true) 189 if err != nil { 190 t.Fatal(err.Error()) 191 } 192 193 // on and off again, peer callable again 194 k.On("01000000") 195 k.Off("01000000") 196 err = testSuggestPeer(t, k, "01000000", 0, false) 197 if err != nil { 198 t.Fatal(err.Error()) 199 } 200 201 k.On("01000000") 202 // new closer peer appears, it is immediately wanted 203 k.Register("00010001") 204 err = testSuggestPeer(t, k, "00010001", 0, false) 205 if err != nil { 206 t.Fatal(err.Error()) 207 } 208 209 // PO1 disconnects 210 k.On("00010001") 211 log.Info(k.String()) 212 k.Off("01000000") 213 log.Info(k.String()) 214 // second time, gap filling 215 err = testSuggestPeer(t, k, "01000000", 0, false) 216 if err != nil { 217 t.Fatal(err.Error()) 218 } 219 220 k.On("01000000") 221 err = testSuggestPeer(t, k, "<nil>", 0, false) 222 if err != nil { 223 t.Fatal(err.Error()) 224 } 225 226 k.MinBinSize = 2 227 err = testSuggestPeer(t, k, "<nil>", 0, true) 228 if err != nil { 229 t.Fatal(err.Error()) 230 } 231 232 k.Register("01000001") 233 err = testSuggestPeer(t, k, "01000001", 0, false) 234 if err != nil { 235 t.Fatal(err.Error()) 236 } 237 238 k.On("10000001") 239 log.Trace(fmt.Sprintf("Kad:\n%v", k.String())) 240 err = testSuggestPeer(t, k, "<nil>", 1, true) 241 if err != nil { 242 t.Fatal(err.Error()) 243 } 244 245 k.On("01000001") 246 err = testSuggestPeer(t, k, "<nil>", 0, false) 247 if err != nil { 248 t.Fatal(err.Error()) 249 } 250 251 k.MinBinSize = 3 252 k.Register("10000010") 253 err = testSuggestPeer(t, k, "10000010", 0, false) 254 if err != nil { 255 t.Fatal(err.Error()) 256 } 257 258 k.On("10000010") 259 err = testSuggestPeer(t, k, "<nil>", 1, false) 260 if err != nil { 261 t.Fatal(err.Error()) 262 } 263 264 k.On("01000010") 265 err = testSuggestPeer(t, k, "<nil>", 2, false) 266 if err != nil { 267 t.Fatal(err.Error()) 268 } 269 270 k.On("00100010") 271 err = testSuggestPeer(t, k, "<nil>", 3, false) 272 if err != nil { 273 t.Fatal(err.Error()) 274 } 275 276 k.On("00010010") 277 err = testSuggestPeer(t, k, "<nil>", 0, false) 278 if err != nil { 279 t.Fatal(err.Error()) 280 } 281 282 } 283 284 func TestSuggestPeerRetries(t *testing.T) { 285 t.Skip("Test is disabled, because it is flaky. It fails with kademlia_test.go:346: incorrect peer address suggested. expected <nil>, got 01000000") 286 // 2 row gap, unsaturated proxbin, no callables -> want PO 0 287 k := newTestKademlia("00000000") 288 k.RetryInterval = int64(100 * time.Millisecond) // cycle 289 k.MaxRetries = 50 290 k.RetryExponent = 2 291 sleep := func(n int) { 292 ts := k.RetryInterval 293 for i := 1; i < n; i++ { 294 ts *= int64(k.RetryExponent) 295 } 296 time.Sleep(time.Duration(ts)) 297 } 298 299 k.Register("01000000") 300 k.On("00000001", "00000010") 301 err := testSuggestPeer(t, k, "01000000", 0, false) 302 if err != nil { 303 t.Fatal(err.Error()) 304 } 305 306 err = testSuggestPeer(t, k, "<nil>", 0, false) 307 if err != nil { 308 t.Fatal(err.Error()) 309 } 310 311 sleep(1) 312 err = testSuggestPeer(t, k, "01000000", 0, false) 313 if err != nil { 314 t.Fatal(err.Error()) 315 } 316 317 err = testSuggestPeer(t, k, "<nil>", 0, false) 318 if err != nil { 319 t.Fatal(err.Error()) 320 } 321 322 sleep(1) 323 err = testSuggestPeer(t, k, "01000000", 0, false) 324 if err != nil { 325 t.Fatal(err.Error()) 326 } 327 328 err = testSuggestPeer(t, k, "<nil>", 0, false) 329 if err != nil { 330 t.Fatal(err.Error()) 331 } 332 333 sleep(2) 334 err = testSuggestPeer(t, k, "01000000", 0, false) 335 if err != nil { 336 t.Fatal(err.Error()) 337 } 338 339 err = testSuggestPeer(t, k, "<nil>", 0, false) 340 if err != nil { 341 t.Fatal(err.Error()) 342 } 343 344 sleep(2) 345 err = testSuggestPeer(t, k, "<nil>", 0, false) 346 if err != nil { 347 t.Fatal(err.Error()) 348 } 349 350 } 351 352 func TestKademliaHiveString(t *testing.T) { 353 k := newTestKademlia("00000000").On("01000000", "00100000").Register("10000000", "10000001") 354 k.MaxProxDisplay = 8 355 h := k.String() 356 expH := "\n=========================================================================\nMon Feb 27 12:10:28 UTC 2017 KΛÐΞMLIΛ hive: queen's address: 000000\npopulation: 2 (4), MinProxBinSize: 2, MinBinSize: 1, MaxBinSize: 4\n000 0 | 2 8100 (0) 8000 (0)\n============ DEPTH: 1 ==========================================\n001 1 4000 | 1 4000 (0)\n002 1 2000 | 1 2000 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n=========================================================================" 357 if expH[104:] != h[104:] { 358 t.Fatalf("incorrect hive output. expected %v, got %v", expH, h) 359 } 360 } 361 362 // testKademliaCase constructs the kademlia and PeerPot map to validate 363 // the SuggestPeer and Healthy methods for provided hex-encoded addresses. 364 // Argument pivotAddr is the address of the kademlia. 365 func testKademliaCase(t *testing.T, pivotAddr string, addrs ...string) { 366 addr := common.FromHex(pivotAddr) 367 addrs = append(addrs, pivotAddr) 368 369 k := NewKademlia(addr, NewKadParams()) 370 371 as := make([][]byte, len(addrs)) 372 for i, a := range addrs { 373 as[i] = common.FromHex(a) 374 } 375 376 for _, a := range as { 377 if bytes.Equal(a, addr) { 378 continue 379 } 380 p := &BzzAddr{OAddr: a, UAddr: a} 381 if err := k.Register([]OverlayAddr{p}); err != nil { 382 t.Fatal(err) 383 } 384 } 385 386 ppmap := NewPeerPotMap(2, as) 387 388 pp := ppmap[pivotAddr] 389 390 for { 391 a, _, _ := k.SuggestPeer() 392 if a == nil { 393 break 394 } 395 k.On(&BzzPeer{BzzAddr: a.(*BzzAddr)}) 396 } 397 398 h := k.Healthy(pp) 399 if !(h.GotNN && h.KnowNN && h.Full) { 400 t.Error("not healthy") 401 } 402 } 403 404 /* 405 The regression test for the following invalid kademlia edge case. 406 407 Addresses used in this test are discovered as part of the simulation network 408 in higher level tests for streaming. They were generated randomly. 409 410 ========================================================================= 411 Mon Apr 9 12:18:24 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 7efef1 412 population: 9 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 413 000 2 d7e5 ec56 | 18 ec56 (0) d7e5 (0) d9e0 (0) c735 (0) 414 001 2 18f1 3176 | 14 18f1 (0) 10bb (0) 10d1 (0) 0421 (0) 415 002 2 52aa 47cd | 11 52aa (0) 51d9 (0) 5161 (0) 5130 (0) 416 003 1 646e | 1 646e (0) 417 004 0 | 3 769c (0) 76d1 (0) 7656 (0) 418 ============ DEPTH: 5 ========================================== 419 005 1 7a48 | 1 7a48 (0) 420 006 1 7cbd | 1 7cbd (0) 421 007 0 | 0 422 008 0 | 0 423 009 0 | 0 424 010 0 | 0 425 011 0 | 0 426 012 0 | 0 427 013 0 | 0 428 014 0 | 0 429 015 0 | 0 430 ========================================================================= 431 */ 432 func TestKademliaCase1(t *testing.T) { 433 testKademliaCase(t, 434 "7efef1c41d77f843ad167be95f6660567eb8a4a59f39240000cce2e0d65baf8e", 435 "ec560e6a4806aa37f147ee83687f3cf044d9953e61eedb8c34b6d50d9e2c5623", 436 "646e9540c84f6a2f9cf6585d45a4c219573b4fd1b64a3c9a1386fc5cf98c0d4d", 437 "18f13c5fba653781019025ab10e8d2fdc916d6448729268afe9e928ffcdbb8e8", 438 "317617acf99b4ffddda8a736f8fc6c6ede0bf690bc23d834123823e6d03e2f69", 439 "d7e52d9647a5d1c27a68c3ee65d543be3947ae4b68537b236d71ef9cb15fb9ab", 440 "7a48f75f8ca60487ae42d6f92b785581b40b91f2da551ae73d5eae46640e02e8", 441 "7cbd42350bde8e18ae5b955b5450f8e2cef3419f92fbf5598160c60fd78619f0", 442 "52aa3ddec61f4d48dd505a2385403c634f6ad06ee1d99c5c90a5ba6006f9af9c", 443 "47cdb6fa93eeb8bc91a417ff4e3b14a9c2ea85137462e2f575fae97f0c4be60d", 444 "5161943eb42e2a03e715fe8afa1009ff5200060c870ead6ab103f63f26cb107f", 445 "a38eaa1255f76bf883ca0830c86e8c4bb7eed259a8348aae9b03f21f90105bee", 446 "b2522bdf1ab26f324e75424fdf6e493b47e8a27687fe76347607b344fc010075", 447 "5bd7213964efb2580b91d02ac31ef126838abeba342f5dbdbe8d4d03562671a2", 448 "0b531adb82744768b694d7f94f73d4f0c9de591266108daeb8c74066bfc9c9ca", 449 "28501f59f70e888d399570145ed884353e017443c675aa12731ada7c87ea14f7", 450 "4a45f1fc63e1a9cb9dfa44c98da2f3d20c2923e5d75ff60b2db9d1bdb0c54d51", 451 "b193431ee35cd32de95805e7c1c749450c47486595aae7195ea6b6019a64fd61", 452 "baebf36a1e35a7ed834e1c72faf44ba16c159fa47d3289ceb3ca35fefa8739b5", 453 "a3659bd32e05fa36c8d20dbaaed8362bf1a8a7bd116aed62d8a43a2efbdf513f", 454 "10d1b50881a4770ebebdd0a75589dabb931e6716747b0f65fd6b080b88c4fdb6", 455 "3c76b8ca5c7ce6a03320646826213f59229626bf5b9d25da0c3ec0662dcb8ff3", 456 "4d72a04ddeb851a68cd197ef9a92a3e2ff01fbbff638e64929dd1a9c2e150112", 457 "c7353d320987956075b5bc1668571c7a36c800d5598fdc4832ec6569561e15d1", 458 "d9e0c7c90878c20ab7639d5954756f54775404b3483407fe1b483635182734f6", 459 "8fca67216b7939c0824fb06c5279901a94da41da9482b000f56df9906736ee75", 460 "460719d7f7aa7d7438f0eaf30333484fa3bd0f233632c10ba89e6e46dd3604be", 461 "0421d92c8a1c79ed5d01305a3d25aaf22a8f5f9e3d4bc80da47ee16ce20465fe", 462 "3441d9d9c0f05820a1bb6459fc7d8ef266a1bd929e7db939a10f544efe8261ea", 463 "ab198a66c293586746758468c610e5d3914d4ce629147eff6dd55a31f863ff8f", 464 "3a1c8c16b0763f3d2c35269f454ff779d1255e954d2deaf6c040fb3f0bcdc945", 465 "5561c0ea3b203e173b11e6aa9d0e621a4e10b1d8b178b8fe375220806557b823", 466 "7656caccdc79cd8d7ce66d415cc96a718e8271c62fb35746bfc2b49faf3eebf3", 467 "5130594fd54c1652cf2debde2c4204573ed76555d1e26757fe345b409af1544a", 468 "76d1e83c71ca246d042e37ff1db181f2776265fbcfdc890ce230bfa617c9c2f0", 469 "89580231962624c53968c1b0095b4a2732b2a2640a19fdd7d21fd064fcc0a5ef", 470 "3d10d001fff44680c7417dd66ecf2e984f0baa20a9bbcea348583ba5ff210c4f", 471 "43754e323f0f3a1155b1852bd6edd55da86b8c4cfe3df8b33733fca50fc202b8", 472 "a9e7b1bb763ae6452ddcacd174993f82977d81a85206bb2ae3c842e2d8e19b4c", 473 "10bb07da7bc7c7757f74149eff167d528a94a253cdc694a863f4d50054c00b6d", 474 "28f0bc1b44658548d6e05dd16d4c2fe77f1da5d48b6774bc4263b045725d0c19", 475 "835fbbf1d16ba7347b6e2fc552d6e982148d29c624ea20383850df3c810fa8fc", 476 "8e236c56a77d7f46e41e80f7092b1a68cd8e92f6156365f41813ad1ca2c6b6f3", 477 "51d9c857e9238c49186e37b4eccf17a82de3d5739f026f6043798ab531456e73", 478 "bbddf7db6a682225301f36a9fd5b0d0121d2951753e1681295f3465352ad511f", 479 "2690a910c33ee37b91eb6c4e0731d1d345e2dc3b46d308503a6e85bbc242c69e", 480 "769ce86aa90b518b7ed382f9fdacfbed93574e18dc98fe6c342e4f9f409c2d5a", 481 "ba3bebec689ce51d3e12776c45f80d25164fdfb694a8122d908081aaa2e7122c", 482 "3a51f4146ea90a815d0d283d1ceb20b928d8b4d45875e892696986a3c0d8fb9b", 483 "81968a2d8fb39114342ee1da85254ec51e0608d7f0f6997c2a8354c260a71009", 484 ) 485 } 486 487 /* 488 The regression test for the following invalid kademlia edge case. 489 490 Addresses used in this test are discovered as part of the simulation network 491 in higher level tests for streaming. They were generated randomly. 492 493 ========================================================================= 494 Mon Apr 9 18:43:48 UTC 2018 KΛÐΞMLIΛ hive: queen's address: bc7f3b 495 population: 9 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 496 000 2 0f49 67ff | 28 0f49 (0) 0211 (0) 07b2 (0) 0703 (0) 497 001 2 e84b f3a4 | 13 f3a4 (0) e84b (0) e58b (0) e60b (0) 498 002 1 8dba | 1 8dba (0) 499 003 2 a008 ad72 | 2 ad72 (0) a008 (0) 500 004 0 | 3 b61f (0) b27f (0) b027 (0) 501 ============ DEPTH: 5 ========================================== 502 005 1 ba19 | 1 ba19 (0) 503 006 0 | 0 504 007 1 bdd6 | 1 bdd6 (0) 505 008 0 | 0 506 009 0 | 0 507 010 0 | 0 508 011 0 | 0 509 012 0 | 0 510 013 0 | 0 511 014 0 | 0 512 015 0 | 0 513 ========================================================================= 514 */ 515 func TestKademliaCase2(t *testing.T) { 516 testKademliaCase(t, 517 "bc7f3b6a4a7e3c91b100ca6680b6c06ff407972b88956324ca853295893e0237", "67ffb61d3aa27449d277016188f35f19e2321fbda5008c68cf6303faa080534f", "600cd54c842eadac1729c04abfc369bc244572ca76117105b9dd910283b82730", "d955a05409650de151218557425105a8aa2867bb6a0e0462fa1cf90abcf87ad6", "7a6b726de45abdf7bb3e5fd9fb0dc8932270ca4dedef92238c80c05bcdb570e3", "263e99424ebfdb652adb4e3dcd27d59e11bb7ae1c057b3ef6f390d0228006254", "ba195d1a53aafde68e661c64d39db8c2a73505bf336125c15c3560de3b48b7ed", "3458c762169937115f67cabc35a6c384ed70293a8aec37b077a6c1b8e02d510e", "4ef4dc2e28ac6efdba57e134ac24dd4e0be68b9d54f7006515eb9509105f700c", "2a8782b79b0c24b9714dfd2c8ff1932bebc08aa6520b4eaeaa59ff781238890c", "625d02e960506f4524e9cdeac85b33faf3ea437fceadbd478b62b78720cf24fc", "e051a36a8c8637f520ba259c9ed3fadaf740dadc6a04c3f0e21778ebd4cd6ac4", "e34bc014fa2504f707bb3d904872b56c2fa250bee3cb19a147a0418541f1bd90", "28036dc79add95799916893890add5d8972f3b95325a509d6ded3d448f4dc652", "1b013c407794fa2e4c955d8f51cbc6bd78588a174b6548246b291281304b5409", "34f71b68698e1534095ff23ee9c35bf64c7f12b8463e7c6f6b19c25cf03928b4", "c712c6e9bbb7076832972a95890e340b94ed735935c3c0bb788e61f011b59479", "a008d5becdcda4b9dbfdaafc3cec586cf61dcf2d4b713b6168fff02e3b9f0b08", "29de15555cdbebaab214009e416ee92f947dcec5dab9894129f50f1b17138f34", "5df9449f700bd4b5a23688b68b293f2e92fa6ca524c93bc6bb9936efba9d9ada", "3ab0168a5f87fedc6a39b53c628256ac87a98670d8691bbdaaecec22418d13a2", "1ee299b2d2a74a568494130e6869e66d57982d345c482a0e0eeb285ac219ae3b", "e0e0e3b860cea9b7a74cf1b0675cc632dc64e80a02f20bbc5e96e2e8bb670606", "dc1ba6f169b0fcdcca021dcebaf39fe5d4875e7e69b854fad65687c1d7719ec0", "d321f73e42fcfb1d3a303eddf018ca5dffdcfd5567cd5ec1212f045f6a07e47d", "070320c3da7b542e5ca8aaf6a0a53d2bb5113ed264ab1db2dceee17c729edcb1", "17d314d65fdd136b50d182d2c8f5edf16e7838c2be8cf2c00abe4b406dbcd1d8", "e60b99e0a06f7d2d99d84085f67cdf8cc22a9ae22c339365d80f90289834a2b4", "02115771e18932e1f67a45f11f5bf743c5dae97fbc477d34d35c996012420eac", "3102a40eb2e5060353dd19bf61eeec8782dd1bebfcb57f4c796912252b591827", "8dbaf231062f2dc7ddaba5f9c7761b0c21292be51bf8c2ef503f31d4a2f63f79", "b02787b713c83a9f9183216310f04251994e04c2763a9024731562e8978e7cc4", "b27fe6cd33989e10909ce794c4b0b88feae286b614a59d49a3444c1a7b51ea82", "07b2d2c94fdc6fd148fe23be2ed9eff54f5e12548f29ed8416e6860fc894466f", "e58bf9f451ef62ac44ff0a9bb0610ec0fd14d423235954f0d3695e83017cbfc4", "bdd600b91bb79d1ee0053b854de308cfaa7e2abce575ea6815a0a7b3449609c2", "0f49c93c1edc7999920b21977cedd51a763940dac32e319feb9c1df2da0f3071", "7cbf0297cd41acf655cd6f960d7aaf61479edb4189d5c001cbc730861f0deb41", "79265193778d87ad626a5f59397bc075872d7302a12634ce2451a767d0a82da2", "2fe7d705f7c370b9243dbaafe007d555ff58d218822fca49d347b12a0282457c", "e84bc0c83d05e55a0080eed41dda5a795da4b9313a4da697142e69a65834cbb3", "cc4d278bd9aa0e9fb3cd8d2e0d68fb791aab5de4b120b845c409effbed47a180", "1a2317a8646cd4b6d3c4aa4cc25f676533abb689cf180787db216880a1239ad8", "cbafd6568cf8e99076208e6b6843f5808a7087897c67aad0c54694669398f889", "7b7c8357255fc37b4dae0e1af61589035fd39ff627e0938c6b3da8b4e4ec5d23", "2b8d782c1f5bac46c922cf439f6aa79f91e9ba5ffc0020d58455188a2075b334", "b61f45af2306705740742e76197a119235584ced01ef3f7cf3d4370f6c557cd1", "2775612e7cdae2780bf494c370bdcbe69c55e4a1363b1dc79ea0135e61221cce", "f3a49bb22f40885e961299abfa697a7df690a79f067bf3a4847a3ad48d826c9f", "ad724ac218dc133c0aadf4618eae21fdd0c2f3787af279846b49e2b4f97ff167", 518 ) 519 } 520 521 /* 522 The regression test for the following invalid kademlia edge case. 523 524 Addresses used in this test are discovered as part of the simulation network 525 in higher level tests for streaming. They were generated randomly. 526 527 ========================================================================= 528 Mon Apr 9 19:04:35 UTC 2018 KΛÐΞMLIΛ hive: queen's address: b4822e 529 population: 8 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 530 000 2 786c 774b | 29 774b (0) 786c (0) 7a79 (0) 7d2f (0) 531 001 2 d9de cf19 | 10 cf19 (0) d9de (0) d2ff (0) d2a2 (0) 532 002 2 8ca1 8d74 | 5 8d74 (0) 8ca1 (0) 9793 (0) 9f51 (0) 533 003 0 | 0 534 004 0 | 3 bfac (0) bcbb (0) bde9 (0) 535 005 0 | 0 536 ============ DEPTH: 6 ========================================== 537 006 1 b660 | 1 b660 (0) 538 007 0 | 0 539 008 1 b450 | 1 b450 (0) 540 009 0 | 0 541 010 0 | 0 542 011 0 | 0 543 012 0 | 0 544 013 0 | 0 545 014 0 | 0 546 015 0 | 0 547 ========================================================================= 548 */ 549 func TestKademliaCase3(t *testing.T) { 550 testKademliaCase(t, 551 "b4822e874a01b94ac3a35c821e6db131e785c2fcbb3556e84b36102caf09b091", "2ecf54ea38d58f9cfc3862e54e5854a7c506fbc640e0b38e46d7d45a19794999", "442374092be50fc7392e8dd3f6fab3158ff7f14f26ff98060aed9b2eecf0b97d", "b450a4a67fcfa3b976cf023d8f1f15052b727f712198ce901630efe2f95db191", "9a7291638eb1c989a6dd6661a42c735b23ac6605b5d3e428aa5ffe650e892c85", "67f62eeab9804cfcac02b25ebeab9113d1b9d03dd5200b1c5a324cc0163e722f", "2e4a0e4b53bca4a9d7e2734150e9f579f29a255ade18a268461b20d026c9ee90", "30dd79c5fcdaa1b106f6960c45c9fde7c046aa3d931088d98c52ab759d0b2ac4", "97936fb5a581e59753c54fa5feec493714f2218245f61f97a62eafd4699433e4", "3a2899b6e129e3e193f6e2aefb82589c948c246d2ec1d4272af32ef3b2660f44", "f0e2a8aa88e67269e9952431ef12e5b29b7f41a1871fbfc38567fad95655d607", "7fa12b3f3c5f8383bfc644b958f72a486969733fa097d8952b3eb4f7b4f73192", "360c167aad5fc992656d6010ec45fdce5bcd492ad9608bc515e2be70d4e430c1", "fe21bc969b3d8e5a64a6484a829c1e04208f26f3cd4de6afcbc172a5bd17f1f1", "b660a1f40141d7ccd282fe5bd9838744119bd1cb3780498b5173578cc5ad308f", "44dcb3370e76680e2fba8cd986ad45ff0b77ca45680ee8d950e47922c4af6226", "8ca126923d17fccb689647307b89f38aa14e2a7b9ebcf3c1e31ccf3d2291a3bc", "f0ae19ae9ce6329327cbf42baf090e084c196b0877d8c7b69997e0123be23ef8", "d2a2a217385158e3e1e348883a14bc423e57daa12077e8c49797d16121ea0810", "f5467ccd85bb4ebe768527db520a210459969a5f1fae6e07b43f519799f0b224", "68be5fd9f9d142a5099e3609011fe3bab7bb992c595999e31e0b3d1668dfb3cf", "4d49a8a476e4934afc6b5c36db9bece3ed1804f20b952da5a21b2b0de766aa73", "ea7155745ef3fb2d099513887a2ba279333ced65c65facbd890ce58bd3fce772", "cf19f51f4e848053d289ac95a9138cdd23fc3077ae913cd58cda8cc7a521b2e1", "590b1cd41c7e6144e76b5cd515a3a4d0a4317624620a3f1685f43ae68bdcd890", "d2ffe0626b5f94a7e00fa0b506e7455a3d9399c15800db108d5e715ef5f6e346", "69630878c50a91f6c2edd23a706bfa0b50bd5661672a37d67bab38e6bca3b698", "445e9067079899bb5faafaca915ae6c0f6b1b730a5a628835dd827636f7feb1e", "6461c77491f1c4825958949f23c153e6e1759a5be53abbcee17c9da3867f3141", "23a235f4083771ccc207771daceda700b525a59ab586788d4f6892e69e34a6e2", "bde99f79ef41a81607ddcf92b9f95dcbc6c3537e91e8bf740e193dc73b19485e", "177957c0e5f0fbd12b88022a91768095d193830986caec8d888097d3ff4310b8", "bcbbdbaa4cdf8352422072f332e05111b732354a35c4d7c617ce1fc3b8b42a5a", "774b6717fdfb0d1629fb9d4c04a9ca40079ae2955d7f82e897477055ed017abb", "16443bf625be6d39ecaa6f114e5d2c1d47a64bfd3c13808d94b55b6b6acef2ee", "8d7495d9008066505ed00ce8198af82bfa5a6b4c08768b4c9fb3aa4eb0b0cca2", "15800849a53349508cb382959527f6c3cf1a46158ff1e6e2316b7dea7967e35f", "7a792f0f4a2b731781d1b244b2a57947f1a2e32900a1c0793449f9f7ae18a7b7", "5e517c2832c9deaa7df77c7bad4d20fd6eda2b7815e155e68bc48238fac1416f", "9f51a14f0019c72bd1d472706d8c80a18c1873c6a0663e754b60eae8094483d7", "7d2fabb565122521d22ba99fed9e5be6a458fbc93156d54db27d97a00b8c3a97", "786c9e412a7db4ec278891fa534caa9a1d1a028c631c6f3aeb9c4d96ad895c36", "3bd6341d40641c2632a5a0cd7a63553a04e251efd7195897a1d27e02a7a8bfde", "31efd1f5fb57b8cff0318d77a1a9e8d67e1d1c8d18ce90f99c3a240dff48cdc8", "d9de3e1156ce1380150948acbcfecd99c96e7f4b0bc97745f4681593d017f74f", "427a2201e09f9583cd990c03b81b58148c297d474a3b50f498d83b1c7a9414cd", "bfaca11596d3dec406a9fcf5d97536516dfe7f0e3b12078428a7e1700e25218a", "351c4770a097248a650008152d0cab5825d048bef770da7f3364f59d1e721bc0", "ee00f205d1486b2be7381d962bd2867263758e880529e4e2bfedfa613bbc0e71", "6aa3b6418d89e3348e4859c823ef4d6d7cd46aa7f7e77aba586c4214d760d8f8", 552 ) 553 } 554 555 /* 556 The regression test for the following invalid kademlia edge case. 557 558 Addresses used in this test are discovered as part of the simulation network 559 in higher level tests for streaming. They were generated randomly. 560 561 ========================================================================= 562 Mon Apr 9 19:16:25 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 9a90fe 563 population: 8 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 564 000 2 72ef 4e6c | 24 0b1e (0) 0d66 (0) 17f5 (0) 17e8 (0) 565 001 2 fc2b fa47 | 13 fa47 (0) fc2b (0) fffd (0) ecef (0) 566 002 2 b847 afa8 | 6 afa8 (0) ad77 (0) bb7c (0) b847 (0) 567 003 0 | 0 568 004 0 | 4 91fc (0) 957d (0) 9482 (0) 949a (0) 569 ============ DEPTH: 5 ========================================== 570 005 1 9ccf | 1 9ccf (0) 571 006 0 | 0 572 007 1 9bb2 | 1 9bb2 (0) 573 008 0 | 0 574 009 0 | 0 575 010 0 | 0 576 011 0 | 0 577 012 0 | 0 578 013 0 | 0 579 014 0 | 0 580 015 0 | 0 581 ========================================================================= 582 */ 583 func TestKademliaCase4(t *testing.T) { 584 testKademliaCase(t, 585 "9a90fe3506277244549064b8c3276abb06284a199d9063a97331947f2b7da7f4", 586 "c19359eddef24b7be1a833b4475f212cd944263627a53f9ef4837d106c247730", "fc2b6fef99ef947f7e57c3df376891769e2a2fd83d2b8e634e0fc1e91eaa080c", "ecefc0e1a8ea7bb4b48c469e077401fce175dd75294255b96c4e54f6a2950a55", "bb7ce598efc056bba343cc2614aa3f67a575557561290b44c73a63f8f433f9f7", "55fbee6ca52dfd7f0be0db969ee8e524b654ab4f0cce7c05d83887d7d2a15460", "afa852b6b319998c6a283cc0c82d2f5b8e9410075d7700f3012761f1cfbd0f76", "36c370cfb63f2087971ba6e58d7585b04e16b8f0da335efb91554c2dd8fe191c", "6be41e029985edebc901fb77fc4fb65516b6d85086e2a98bfa3159c99391e585", "dd3cfc72ea553e7d2b28f0037a65646b30955b929d29ba4c40f4a2a811248e77", "da3a8f18e09c7b0ca235c4e33e1441a5188f1df023138bf207753ee63e768f7d", "de9e3ab4dc572d54a2d4b878329fd832bb51a149f4ce167316eeb177b61e7e01", "4e6c1ecde6ed917706257fe020a1d02d2e9d87fca4c85f0f7b132491008c5032", "72ef04b77a070e13463b3529dd312bcacfb7a12d20dc597f5ec3de0501e9b834", "3fef57186675d524ab8bb1f54ba8cb68610babca1247c0c46dbb60aed003c69d", "1d8e6b71f7a052865d6558d4ba44ad5fab7b908cc1badf5766822e1c20d0d823", "6be2f2b4ffa173014d4ec7df157d289744a2bda54bb876b264ccfa898a0da315", "b0ba3fff8643f9985c744327b0c4c869763509fd5da2de9a80a4a0a082021255", "9ccf40b9406ba2e6567101fb9b4e5334a9ec74263eff47267da266ba45e6c158", "d7347f02c180a448e60f73931845062ce00048750b584790278e9c93ef31ad81", "b68c6359a22b3bee6fecb8804311cfd816648ea31d530c9fb48e477e029d707a", "0d668a18ad7c2820214df6df95a6c855ce19fb1cb765f8ca620e45db76686d37", "3fbd2663bff65533246f1fabb9f38086854c6218aeb3dc9ac6ac73d4f0988f91", "949aa5719ca846052bfaa1b38c97b6eca3df3e24c0e0630042c6bccafbb4cdb5", "77b8a2b917bef5d54f3792183b014cca7798f713ff14fe0b2ac79b4c9f6f996d", "17e853cbd8dc00cba3cd9ffeb36f26a9f41a0eb92f80b62c2cda16771c935388", "5f682ed7a8cf2f98387c3def7c97f9f05ae39e39d393eeca3cf621268d6347f8", "ad77487eaf11fd8084ba4517a51766eb0e5b77dd3492dfa79aa3a2802fb29d20", "d247cfcacf9a8200ebaddf639f8c926ab0a001abe682f40df3785e80ed124e91", "195589442e11907eede1ee6524157f1125f68399f3170c835ff81c603b069f6c", "5b5ca0a67f3c54e7d3a6a862ef56168ec9ed1f4945e6c24de6d336b2be2e6f8c", "56430e4caa253015f1f998dce4a48a88af1953f68e94eca14f53074ae9c3e467", "0b1eed6a5bf612d1d8e08f5c546f3d12e838568fd3aa43ed4c537f10c65545d6", "7058db19a56dfff01988ac4a62e1310597f9c8d7ebde6890dadabf047d722d39", "b847380d6888ff7cd11402d086b19eccc40950b52c9d67e73cb4f8462f5df078", "df6c048419a2290ab546d527e9eeba349e7f7e1759bafe4adac507ce60ef9670", "91fc5b4b24fc3fbfea7f9a3d0f0437cb5733c0c2345d8bdffd7048d6e3b8a37b", "957d8ea51b37523952b6f5ae95462fcd4aed1483ef32cc80b69580aaeee03606", "efa82e4e91ad9ab781977400e9ac0bb9de7389aaedebdae979b73d1d3b8d72b0", "7400c9f3f3fc0cc6fe8cc37ab24b9771f44e9f78be913f73cd35fc4be030d6bd", "9bb28f4122d61f7bb56fe27ef706159fb802fef0f5de9dfa32c9c5b3183235f1", "40a8de6e98953498b806614532ea4abf8b99ad7f9719fb68203a6eae2efa5b2a", "412de0b218b8f7dcacc9205cd16ffb4eca5b838f46a2f4f9f534026061a47308", "17f56ecad51075080680ad9faa0fd8946b824d3296ddb20be07f9809fe8d1c5a", "fffd4e7ae885a41948a342b6647955a7ec8a8039039f510cff467ef597675457", "35e78e11b5ac46a29dd04ab0043136c3291f4ca56cb949ace33111ed56395463", "94824fc80230af82077c83bfc01dc9675b1f9d3d538b1e5f41c21ac753598691", "fa470ae314ca3fce493f21b423eef2a49522e09126f6f2326fa3c9cac0b344f7", "7078860b5b621b21ac7b95f9fc4739c8235ce5066a8b9bd7d938146a34fa88ec", "eea53560f0428bfd2eca4f86a5ce9dec5ff1309129a975d73465c1c9e9da71d1", 587 ) 588 } 589 590 /* 591 The regression test for the following invalid kademlia edge case. 592 593 Addresses used in this test are discovered as part of the simulation network 594 in higher level tests for streaming. They were generated randomly. 595 596 ========================================================================= 597 Mon Apr 9 19:25:18 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 5dd5c7 598 population: 13 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 599 000 2 e528 fad0 | 22 fad0 (0) e528 (0) e3bb (0) ed13 (0) 600 001 3 3f30 18e0 1dd3 | 7 3f30 (0) 23db (0) 10b6 (0) 18e0 (0) 601 002 4 7c54 7804 61e4 60f9 | 10 61e4 (0) 60f9 (0) 636c (0) 7186 (0) 602 003 2 40ae 4bae | 5 4bae (0) 4d5c (0) 403a (0) 40ae (0) 603 004 0 | 0 604 005 0 | 3 5808 (0) 5a0e (0) 5bdb (0) 605 ============ DEPTH: 6 ========================================== 606 006 2 5f14 5f61 | 2 5f14 (0) 5f61 (0) 607 007 0 | 0 608 008 0 | 0 609 009 0 | 0 610 010 0 | 0 611 011 0 | 0 612 012 0 | 0 613 013 0 | 0 614 014 0 | 0 615 015 0 | 0 616 ========================================================================= 617 */ 618 func TestKademliaCase5(t *testing.T) { 619 testKademliaCase(t, 620 "5dd5c77dd9006a800478fcebb02d48d4036389e7d3c8f6a83b97dbad13f4c0a9", 621 "78fafa0809929a1279ece089a51d12457c2d8416dff859aeb2ccc24bb50df5ec", "1dd39b1257e745f147cbbc3cadd609ccd6207c41056dbc4254bba5d2527d3ee5", "5f61dd66d4d94aec8fcc3ce0e7885c7edf30c43143fa730e2841c5d28e3cd081", "8aa8b0472cb351d967e575ad05c4b9f393e76c4b01ef4b3a54aac5283b78abc9", "4502f385152a915b438a6726ce3ea9342e7a6db91a23c2f6bee83a885ed7eb82", "718677a504249db47525e959ef1784bed167e1c46f1e0275b9c7b588e28a3758", "7c54c6ed1f8376323896ed3a4e048866410de189e9599dd89bf312ca4adb96b5", "18e03bd3378126c09e799a497150da5c24c895aedc84b6f0dbae41fc4bac081a", "23db76ac9e6e58d9f5395ca78252513a7b4118b4155f8462d3d5eec62486cadc", "40ae0e8f065e96c7adb7fa39505136401f01780481e678d718b7f6dbb2c906ec", "c1539998b8bae19d339d6bbb691f4e9daeb0e86847545229e80fe0dffe716e92", "ed139d73a2699e205574c08722ca9f030ad2d866c662f1112a276b91421c3cb9", "5bdb19584b7a36d09ca689422ef7e6bb681b8f2558a6b2177a8f7c812f631022", "636c9de7fe234ffc15d67a504c69702c719f626c17461d3f2918e924cd9d69e2", "de4455413ff9335c440d52458c6544191bd58a16d85f700c1de53b62773064ea", "de1963310849527acabc7885b6e345a56406a8f23e35e436b6d9725e69a79a83", "a80a50a467f561210a114cba6c7fb1489ed43a14d61a9edd70e2eb15c31f074d", "7804f12b8d8e6e4b375b242058242068a3809385e05df0e64973cde805cf729c", "60f9aa320c02c6f2e6370aa740cf7cea38083fa95fca8c99552cda52935c1520", "d8da963602390f6c002c00ce62a84b514edfce9ebde035b277a957264bb54d21", "8463d93256e026fe436abad44697152b9a56ac8e06a0583d318e9571b83d073c", "9a3f78fcefb9a05e40a23de55f6153d7a8b9d973ede43a380bf46bb3b3847de1", "e3bb576f4b3760b9ca6bff59326f4ebfc4a669d263fb7d67ab9797adea54ed13", "4d5cdbd6dcca5bdf819a0fe8d175dc55cc96f088d37462acd5ea14bc6296bdbe", "5a0ed28de7b5258c727cb85447071c74c00a5fbba9e6bc0393bc51944d04ab2a", "61e4ddb479c283c638f4edec24353b6cc7a3a13b930824aad016b0996ca93c47", "7e3610868acf714836cafaaa7b8c009a9ac6e3a6d443e5586cf661530a204ee2", "d74b244d4345d2c86e30a097105e4fb133d53c578320285132a952cdaa64416e", "cfeed57d0f935bfab89e3f630a7c97e0b1605f0724d85a008bbfb92cb47863a8", "580837af95055670e20d494978f60c7f1458dc4b9e389fc7aa4982b2aca3bce3", "df55c0c49e6c8a83d82dfa1c307d3bf6a20e18721c80d8ec4f1f68dc0a137ced", "5f149c51ce581ba32a285439a806c063ced01ccd4211cd024e6a615b8f216f95", "1eb76b00aeb127b10dd1b7cd4c3edeb4d812b5a658f0feb13e85c4d2b7c6fe06", "7a56ba7c3fb7cbfb5561a46a75d95d7722096b45771ec16e6fa7bbfab0b35dfe", "4bae85ad88c28470f0015246d530adc0cd1778bdd5145c3c6b538ee50c4e04bd", "afd1892e2a7145c99ec0ebe9ded0d3fec21089b277a68d47f45961ec5e39e7e0", "953138885d7b36b0ef79e46030f8e61fd7037fbe5ce9e0a94d728e8c8d7eab86", "de761613ef305e4f628cb6bf97d7b7dc69a9d513dc233630792de97bcda777a6", "3f3087280063d09504c084bbf7fdf984347a72b50d097fd5b086ffabb5b3fb4c", "7d18a94bb1ebfdef4d3e454d2db8cb772f30ca57920dd1e402184a9e598581a0", "a7d6fbdc9126d9f10d10617f49fb9f5474ffe1b229f76b7dd27cebba30eccb5d", "fad0246303618353d1387ec10c09ee991eb6180697ed3470ed9a6b377695203d", "1cf66e09ea51ee5c23df26615a9e7420be2ac8063f28f60a3bc86020e94fe6f3", "8269cdaa153da7c358b0b940791af74d7c651cd4d3f5ed13acfe6d0f2c539e7f", "90d52eaaa60e74bf1c79106113f2599471a902d7b1c39ac1f55b20604f453c09", "9788fd0c09190a3f3d0541f68073a2f44c2fcc45bb97558a7c319f36c25a75b3", "10b68fc44157ecfdae238ee6c1ce0333f906ad04d1a4cb1505c8e35c3c87fbb0", "e5284117fdf3757920475c786e0004cb00ba0932163659a89b36651a01e57394", "403ad51d911e113dcd5f9ff58c94f6d278886a2a4da64c3ceca2083282c92de3", 622 ) 623 }