github.com/FUSIONFoundation/efsn@v3.6.2-0.20200916075423-dbb5dd5d2cc7+incompatible/swarm/network/kademlia_test.go (about) 1 // Copyright 2017 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum 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-ethereum 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-ethereum 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/FusionFoundation/efsn/common" 27 "github.com/FusionFoundation/efsn/log" 28 "github.com/FusionFoundation/efsn/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 func newTestKademlia(b string) *Kademlia { 42 params := NewKadParams() 43 params.MinBinSize = 1 44 params.MinProxBinSize = 2 45 base := pot.NewAddressFromString(b) 46 return NewKademlia(base, params) 47 } 48 49 func newTestKadPeer(k *Kademlia, s string) *Peer { 50 return NewPeer(&BzzPeer{BzzAddr: testKadPeerAddr(s)}, k) 51 } 52 53 func On(k *Kademlia, ons ...string) { 54 for _, s := range ons { 55 k.On(newTestKadPeer(k, s)) 56 } 57 } 58 59 func Off(k *Kademlia, offs ...string) { 60 for _, s := range offs { 61 k.Off(newTestKadPeer(k, s)) 62 } 63 } 64 65 func Register(k *Kademlia, regs ...string) { 66 var as []*BzzAddr 67 for _, s := range regs { 68 as = append(as, testKadPeerAddr(s)) 69 } 70 err := k.Register(as...) 71 if err != nil { 72 panic(err.Error()) 73 } 74 } 75 76 func testSuggestPeer(k *Kademlia, expAddr string, expPo int, expWant bool) error { 77 addr, o, want := k.SuggestPeer() 78 if binStr(addr) != expAddr { 79 return fmt.Errorf("incorrect peer address suggested. expected %v, got %v", expAddr, binStr(addr)) 80 } 81 if o != expPo { 82 return fmt.Errorf("incorrect prox order suggested. expected %v, got %v", expPo, o) 83 } 84 if want != expWant { 85 return fmt.Errorf("expected SuggestPeer to want peers: %v", expWant) 86 } 87 return nil 88 } 89 90 func binStr(a *BzzAddr) string { 91 if a == nil { 92 return "<nil>" 93 } 94 return pot.ToBin(a.Address())[:8] 95 } 96 97 func TestSuggestPeerBug(t *testing.T) { 98 // 2 row gap, unsaturated proxbin, no callables -> want PO 0 99 k := newTestKademlia("00000000") 100 On(k, 101 "10000000", "11000000", 102 "01000000", 103 104 "00010000", "00011000", 105 ) 106 Off(k, 107 "01000000", 108 ) 109 err := testSuggestPeer(k, "01000000", 0, false) 110 if err != nil { 111 t.Fatal(err.Error()) 112 } 113 } 114 115 func TestSuggestPeerFindPeers(t *testing.T) { 116 // 2 row gap, unsaturated proxbin, no callables -> want PO 0 117 k := newTestKademlia("00000000") 118 On(k, "00100000") 119 err := testSuggestPeer(k, "<nil>", 0, false) 120 if err != nil { 121 t.Fatal(err.Error()) 122 } 123 124 // 2 row gap, saturated proxbin, no callables -> want PO 0 125 On(k, "00010000") 126 err = testSuggestPeer(k, "<nil>", 0, false) 127 if err != nil { 128 t.Fatal(err.Error()) 129 } 130 131 // 1 row gap (1 less), saturated proxbin, no callables -> want PO 1 132 On(k, "10000000") 133 err = testSuggestPeer(k, "<nil>", 1, false) 134 if err != nil { 135 t.Fatal(err.Error()) 136 } 137 138 // no gap (1 less), saturated proxbin, no callables -> do not want more 139 On(k, "01000000", "00100001") 140 err = testSuggestPeer(k, "<nil>", 0, false) 141 if err != nil { 142 t.Fatal(err.Error()) 143 } 144 145 // oversaturated proxbin, > do not want more 146 On(k, "00100001") 147 err = testSuggestPeer(k, "<nil>", 0, false) 148 if err != nil { 149 t.Fatal(err.Error()) 150 } 151 152 // reintroduce gap, disconnected peer callable 153 Off(k, "01000000") 154 err = testSuggestPeer(k, "01000000", 0, false) 155 if err != nil { 156 t.Fatal(err.Error()) 157 } 158 159 // second time disconnected peer not callable 160 // with reasonably set Interval 161 err = testSuggestPeer(k, "<nil>", 1, true) 162 if err != nil { 163 t.Fatal(err.Error()) 164 } 165 166 // on and off again, peer callable again 167 On(k, "01000000") 168 Off(k, "01000000") 169 err = testSuggestPeer(k, "01000000", 0, false) 170 if err != nil { 171 t.Fatal(err.Error()) 172 } 173 174 On(k, "01000000") 175 // new closer peer appears, it is immediately wanted 176 Register(k, "00010001") 177 err = testSuggestPeer(k, "00010001", 0, false) 178 if err != nil { 179 t.Fatal(err.Error()) 180 } 181 182 // PO1 disconnects 183 On(k, "00010001") 184 log.Info(k.String()) 185 Off(k, "01000000") 186 log.Info(k.String()) 187 // second time, gap filling 188 err = testSuggestPeer(k, "01000000", 0, false) 189 if err != nil { 190 t.Fatal(err.Error()) 191 } 192 193 On(k, "01000000") 194 err = testSuggestPeer(k, "<nil>", 0, false) 195 if err != nil { 196 t.Fatal(err.Error()) 197 } 198 199 k.MinBinSize = 2 200 err = testSuggestPeer(k, "<nil>", 0, true) 201 if err != nil { 202 t.Fatal(err.Error()) 203 } 204 205 Register(k, "01000001") 206 err = testSuggestPeer(k, "01000001", 0, false) 207 if err != nil { 208 t.Fatal(err.Error()) 209 } 210 211 On(k, "10000001") 212 log.Trace(fmt.Sprintf("Kad:\n%v", k.String())) 213 err = testSuggestPeer(k, "<nil>", 1, true) 214 if err != nil { 215 t.Fatal(err.Error()) 216 } 217 218 On(k, "01000001") 219 err = testSuggestPeer(k, "<nil>", 0, false) 220 if err != nil { 221 t.Fatal(err.Error()) 222 } 223 224 k.MinBinSize = 3 225 Register(k, "10000010") 226 err = testSuggestPeer(k, "10000010", 0, false) 227 if err != nil { 228 t.Fatal(err.Error()) 229 } 230 231 On(k, "10000010") 232 err = testSuggestPeer(k, "<nil>", 1, false) 233 if err != nil { 234 t.Fatal(err.Error()) 235 } 236 237 On(k, "01000010") 238 err = testSuggestPeer(k, "<nil>", 2, false) 239 if err != nil { 240 t.Fatal(err.Error()) 241 } 242 243 On(k, "00100010") 244 err = testSuggestPeer(k, "<nil>", 3, false) 245 if err != nil { 246 t.Fatal(err.Error()) 247 } 248 249 On(k, "00010010") 250 err = testSuggestPeer(k, "<nil>", 0, false) 251 if err != nil { 252 t.Fatal(err.Error()) 253 } 254 255 } 256 257 func TestSuggestPeerRetries(t *testing.T) { 258 k := newTestKademlia("00000000") 259 k.RetryInterval = int64(300 * time.Millisecond) // cycle 260 k.MaxRetries = 50 261 k.RetryExponent = 2 262 sleep := func(n int) { 263 ts := k.RetryInterval 264 for i := 1; i < n; i++ { 265 ts *= int64(k.RetryExponent) 266 } 267 time.Sleep(time.Duration(ts)) 268 } 269 270 Register(k, "01000000") 271 On(k, "00000001", "00000010") 272 err := testSuggestPeer(k, "01000000", 0, false) 273 if err != nil { 274 t.Fatal(err.Error()) 275 } 276 277 err = testSuggestPeer(k, "<nil>", 0, false) 278 if err != nil { 279 t.Fatal(err.Error()) 280 } 281 282 sleep(1) 283 err = testSuggestPeer(k, "01000000", 0, false) 284 if err != nil { 285 t.Fatal(err.Error()) 286 } 287 288 err = testSuggestPeer(k, "<nil>", 0, false) 289 if err != nil { 290 t.Fatal(err.Error()) 291 } 292 293 sleep(1) 294 err = testSuggestPeer(k, "01000000", 0, false) 295 if err != nil { 296 t.Fatal(err.Error()) 297 } 298 299 err = testSuggestPeer(k, "<nil>", 0, false) 300 if err != nil { 301 t.Fatal(err.Error()) 302 } 303 304 sleep(2) 305 err = testSuggestPeer(k, "01000000", 0, false) 306 if err != nil { 307 t.Fatal(err.Error()) 308 } 309 310 err = testSuggestPeer(k, "<nil>", 0, false) 311 if err != nil { 312 t.Fatal(err.Error()) 313 } 314 315 sleep(2) 316 err = testSuggestPeer(k, "<nil>", 0, false) 317 if err != nil { 318 t.Fatal(err.Error()) 319 } 320 321 } 322 323 func TestKademliaHiveString(t *testing.T) { 324 k := newTestKademlia("00000000") 325 On(k, "01000000", "00100000") 326 Register(k, "10000000", "10000001") 327 k.MaxProxDisplay = 8 328 h := k.String() 329 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=========================================================================" 330 if expH[104:] != h[104:] { 331 t.Fatalf("incorrect hive output. expected %v, got %v", expH, h) 332 } 333 } 334 335 // testKademliaCase constructs the kademlia and PeerPot map to validate 336 // the SuggestPeer and Healthy methods for provided hex-encoded addresses. 337 // Argument pivotAddr is the address of the kademlia. 338 func testKademliaCase(t *testing.T, pivotAddr string, addrs ...string) { 339 addr := common.FromHex(pivotAddr) 340 addrs = append(addrs, pivotAddr) 341 342 k := NewKademlia(addr, NewKadParams()) 343 344 as := make([][]byte, len(addrs)) 345 for i, a := range addrs { 346 as[i] = common.FromHex(a) 347 } 348 349 for _, a := range as { 350 if bytes.Equal(a, addr) { 351 continue 352 } 353 p := &BzzAddr{OAddr: a, UAddr: a} 354 if err := k.Register(p); err != nil { 355 t.Fatal(err) 356 } 357 } 358 359 ppmap := NewPeerPotMap(2, as) 360 361 pp := ppmap[pivotAddr] 362 363 for { 364 a, _, _ := k.SuggestPeer() 365 if a == nil { 366 break 367 } 368 k.On(NewPeer(&BzzPeer{BzzAddr: a}, k)) 369 } 370 371 h := k.Healthy(pp) 372 if !(h.GotNN && h.KnowNN && h.Full) { 373 t.Fatalf("not healthy: %#v\n%v", h, k.String()) 374 } 375 } 376 377 /* 378 The regression test for the following invalid kademlia edge case. 379 380 Addresses used in this test are discovered as part of the simulation network 381 in higher level tests for streaming. They were generated randomly. 382 383 ========================================================================= 384 Mon Apr 9 12:18:24 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 7efef1 385 population: 9 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 386 000 2 d7e5 ec56 | 18 ec56 (0) d7e5 (0) d9e0 (0) c735 (0) 387 001 2 18f1 3176 | 14 18f1 (0) 10bb (0) 10d1 (0) 0421 (0) 388 002 2 52aa 47cd | 11 52aa (0) 51d9 (0) 5161 (0) 5130 (0) 389 003 1 646e | 1 646e (0) 390 004 0 | 3 769c (0) 76d1 (0) 7656 (0) 391 ============ DEPTH: 5 ========================================== 392 005 1 7a48 | 1 7a48 (0) 393 006 1 7cbd | 1 7cbd (0) 394 007 0 | 0 395 008 0 | 0 396 009 0 | 0 397 010 0 | 0 398 011 0 | 0 399 012 0 | 0 400 013 0 | 0 401 014 0 | 0 402 015 0 | 0 403 ========================================================================= 404 */ 405 func TestKademliaCase1(t *testing.T) { 406 testKademliaCase(t, 407 "7efef1c41d77f843ad167be95f6660567eb8a4a59f39240000cce2e0d65baf8e", 408 "ec560e6a4806aa37f147ee83687f3cf044d9953e61eedb8c34b6d50d9e2c5623", 409 "646e9540c84f6a2f9cf6585d45a4c219573b4fd1b64a3c9a1386fc5cf98c0d4d", 410 "18f13c5fba653781019025ab10e8d2fdc916d6448729268afe9e928ffcdbb8e8", 411 "317617acf99b4ffddda8a736f8fc6c6ede0bf690bc23d834123823e6d03e2f69", 412 "d7e52d9647a5d1c27a68c3ee65d543be3947ae4b68537b236d71ef9cb15fb9ab", 413 "7a48f75f8ca60487ae42d6f92b785581b40b91f2da551ae73d5eae46640e02e8", 414 "7cbd42350bde8e18ae5b955b5450f8e2cef3419f92fbf5598160c60fd78619f0", 415 "52aa3ddec61f4d48dd505a2385403c634f6ad06ee1d99c5c90a5ba6006f9af9c", 416 "47cdb6fa93eeb8bc91a417ff4e3b14a9c2ea85137462e2f575fae97f0c4be60d", 417 "5161943eb42e2a03e715fe8afa1009ff5200060c870ead6ab103f63f26cb107f", 418 "a38eaa1255f76bf883ca0830c86e8c4bb7eed259a8348aae9b03f21f90105bee", 419 "b2522bdf1ab26f324e75424fdf6e493b47e8a27687fe76347607b344fc010075", 420 "5bd7213964efb2580b91d02ac31ef126838abeba342f5dbdbe8d4d03562671a2", 421 "0b531adb82744768b694d7f94f73d4f0c9de591266108daeb8c74066bfc9c9ca", 422 "28501f59f70e888d399570145ed884353e017443c675aa12731ada7c87ea14f7", 423 "4a45f1fc63e1a9cb9dfa44c98da2f3d20c2923e5d75ff60b2db9d1bdb0c54d51", 424 "b193431ee35cd32de95805e7c1c749450c47486595aae7195ea6b6019a64fd61", 425 "baebf36a1e35a7ed834e1c72faf44ba16c159fa47d3289ceb3ca35fefa8739b5", 426 "a3659bd32e05fa36c8d20dbaaed8362bf1a8a7bd116aed62d8a43a2efbdf513f", 427 "10d1b50881a4770ebebdd0a75589dabb931e6716747b0f65fd6b080b88c4fdb6", 428 "3c76b8ca5c7ce6a03320646826213f59229626bf5b9d25da0c3ec0662dcb8ff3", 429 "4d72a04ddeb851a68cd197ef9a92a3e2ff01fbbff638e64929dd1a9c2e150112", 430 "c7353d320987956075b5bc1668571c7a36c800d5598fdc4832ec6569561e15d1", 431 "d9e0c7c90878c20ab7639d5954756f54775404b3483407fe1b483635182734f6", 432 "8fca67216b7939c0824fb06c5279901a94da41da9482b000f56df9906736ee75", 433 "460719d7f7aa7d7438f0eaf30333484fa3bd0f233632c10ba89e6e46dd3604be", 434 "0421d92c8a1c79ed5d01305a3d25aaf22a8f5f9e3d4bc80da47ee16ce20465fe", 435 "3441d9d9c0f05820a1bb6459fc7d8ef266a1bd929e7db939a10f544efe8261ea", 436 "ab198a66c293586746758468c610e5d3914d4ce629147eff6dd55a31f863ff8f", 437 "3a1c8c16b0763f3d2c35269f454ff779d1255e954d2deaf6c040fb3f0bcdc945", 438 "5561c0ea3b203e173b11e6aa9d0e621a4e10b1d8b178b8fe375220806557b823", 439 "7656caccdc79cd8d7ce66d415cc96a718e8271c62fb35746bfc2b49faf3eebf3", 440 "5130594fd54c1652cf2debde2c4204573ed76555d1e26757fe345b409af1544a", 441 "76d1e83c71ca246d042e37ff1db181f2776265fbcfdc890ce230bfa617c9c2f0", 442 "89580231962624c53968c1b0095b4a2732b2a2640a19fdd7d21fd064fcc0a5ef", 443 "3d10d001fff44680c7417dd66ecf2e984f0baa20a9bbcea348583ba5ff210c4f", 444 "43754e323f0f3a1155b1852bd6edd55da86b8c4cfe3df8b33733fca50fc202b8", 445 "a9e7b1bb763ae6452ddcacd174993f82977d81a85206bb2ae3c842e2d8e19b4c", 446 "10bb07da7bc7c7757f74149eff167d528a94a253cdc694a863f4d50054c00b6d", 447 "28f0bc1b44658548d6e05dd16d4c2fe77f1da5d48b6774bc4263b045725d0c19", 448 "835fbbf1d16ba7347b6e2fc552d6e982148d29c624ea20383850df3c810fa8fc", 449 "8e236c56a77d7f46e41e80f7092b1a68cd8e92f6156365f41813ad1ca2c6b6f3", 450 "51d9c857e9238c49186e37b4eccf17a82de3d5739f026f6043798ab531456e73", 451 "bbddf7db6a682225301f36a9fd5b0d0121d2951753e1681295f3465352ad511f", 452 "2690a910c33ee37b91eb6c4e0731d1d345e2dc3b46d308503a6e85bbc242c69e", 453 "769ce86aa90b518b7ed382f9fdacfbed93574e18dc98fe6c342e4f9f409c2d5a", 454 "ba3bebec689ce51d3e12776c45f80d25164fdfb694a8122d908081aaa2e7122c", 455 "3a51f4146ea90a815d0d283d1ceb20b928d8b4d45875e892696986a3c0d8fb9b", 456 "81968a2d8fb39114342ee1da85254ec51e0608d7f0f6997c2a8354c260a71009", 457 ) 458 } 459 460 /* 461 The regression test for the following invalid kademlia edge case. 462 463 Addresses used in this test are discovered as part of the simulation network 464 in higher level tests for streaming. They were generated randomly. 465 466 ========================================================================= 467 Mon Apr 9 18:43:48 UTC 2018 KΛÐΞMLIΛ hive: queen's address: bc7f3b 468 population: 9 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 469 000 2 0f49 67ff | 28 0f49 (0) 0211 (0) 07b2 (0) 0703 (0) 470 001 2 e84b f3a4 | 13 f3a4 (0) e84b (0) e58b (0) e60b (0) 471 002 1 8dba | 1 8dba (0) 472 003 2 a008 ad72 | 2 ad72 (0) a008 (0) 473 004 0 | 3 b61f (0) b27f (0) b027 (0) 474 ============ DEPTH: 5 ========================================== 475 005 1 ba19 | 1 ba19 (0) 476 006 0 | 0 477 007 1 bdd6 | 1 bdd6 (0) 478 008 0 | 0 479 009 0 | 0 480 010 0 | 0 481 011 0 | 0 482 012 0 | 0 483 013 0 | 0 484 014 0 | 0 485 015 0 | 0 486 ========================================================================= 487 */ 488 func TestKademliaCase2(t *testing.T) { 489 testKademliaCase(t, 490 "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", 491 ) 492 } 493 494 /* 495 The regression test for the following invalid kademlia edge case. 496 497 Addresses used in this test are discovered as part of the simulation network 498 in higher level tests for streaming. They were generated randomly. 499 500 ========================================================================= 501 Mon Apr 9 19:04:35 UTC 2018 KΛÐΞMLIΛ hive: queen's address: b4822e 502 population: 8 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 503 000 2 786c 774b | 29 774b (0) 786c (0) 7a79 (0) 7d2f (0) 504 001 2 d9de cf19 | 10 cf19 (0) d9de (0) d2ff (0) d2a2 (0) 505 002 2 8ca1 8d74 | 5 8d74 (0) 8ca1 (0) 9793 (0) 9f51 (0) 506 003 0 | 0 507 004 0 | 3 bfac (0) bcbb (0) bde9 (0) 508 005 0 | 0 509 ============ DEPTH: 6 ========================================== 510 006 1 b660 | 1 b660 (0) 511 007 0 | 0 512 008 1 b450 | 1 b450 (0) 513 009 0 | 0 514 010 0 | 0 515 011 0 | 0 516 012 0 | 0 517 013 0 | 0 518 014 0 | 0 519 015 0 | 0 520 ========================================================================= 521 */ 522 func TestKademliaCase3(t *testing.T) { 523 testKademliaCase(t, 524 "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", 525 ) 526 } 527 528 /* 529 The regression test for the following invalid kademlia edge case. 530 531 Addresses used in this test are discovered as part of the simulation network 532 in higher level tests for streaming. They were generated randomly. 533 534 ========================================================================= 535 Mon Apr 9 19:16:25 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 9a90fe 536 population: 8 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 537 000 2 72ef 4e6c | 24 0b1e (0) 0d66 (0) 17f5 (0) 17e8 (0) 538 001 2 fc2b fa47 | 13 fa47 (0) fc2b (0) fffd (0) ecef (0) 539 002 2 b847 afa8 | 6 afa8 (0) ad77 (0) bb7c (0) b847 (0) 540 003 0 | 0 541 004 0 | 4 91fc (0) 957d (0) 9482 (0) 949a (0) 542 ============ DEPTH: 5 ========================================== 543 005 1 9ccf | 1 9ccf (0) 544 006 0 | 0 545 007 1 9bb2 | 1 9bb2 (0) 546 008 0 | 0 547 009 0 | 0 548 010 0 | 0 549 011 0 | 0 550 012 0 | 0 551 013 0 | 0 552 014 0 | 0 553 015 0 | 0 554 ========================================================================= 555 */ 556 func TestKademliaCase4(t *testing.T) { 557 testKademliaCase(t, 558 "9a90fe3506277244549064b8c3276abb06284a199d9063a97331947f2b7da7f4", 559 "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", 560 ) 561 } 562 563 /* 564 The regression test for the following invalid kademlia edge case. 565 566 Addresses used in this test are discovered as part of the simulation network 567 in higher level tests for streaming. They were generated randomly. 568 569 ========================================================================= 570 Mon Apr 9 19:25:18 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 5dd5c7 571 population: 13 (49), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 572 000 2 e528 fad0 | 22 fad0 (0) e528 (0) e3bb (0) ed13 (0) 573 001 3 3f30 18e0 1dd3 | 7 3f30 (0) 23db (0) 10b6 (0) 18e0 (0) 574 002 4 7c54 7804 61e4 60f9 | 10 61e4 (0) 60f9 (0) 636c (0) 7186 (0) 575 003 2 40ae 4bae | 5 4bae (0) 4d5c (0) 403a (0) 40ae (0) 576 004 0 | 0 577 005 0 | 3 5808 (0) 5a0e (0) 5bdb (0) 578 ============ DEPTH: 6 ========================================== 579 006 2 5f14 5f61 | 2 5f14 (0) 5f61 (0) 580 007 0 | 0 581 008 0 | 0 582 009 0 | 0 583 010 0 | 0 584 011 0 | 0 585 012 0 | 0 586 013 0 | 0 587 014 0 | 0 588 015 0 | 0 589 ========================================================================= 590 */ 591 func TestKademliaCase5(t *testing.T) { 592 testKademliaCase(t, 593 "5dd5c77dd9006a800478fcebb02d48d4036389e7d3c8f6a83b97dbad13f4c0a9", 594 "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", 595 ) 596 }