github.com/shyftnetwork/go-empyrean@v1.8.3-0.20191127201940-fbfca9338f04/swarm/network/kademlia_test.go (about) 1 // Copyright 2018 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/ShyftNetwork/go-empyrean/common" 27 "github.com/ShyftNetwork/go-empyrean/log" 28 "github.com/ShyftNetwork/go-empyrean/p2p" 29 "github.com/ShyftNetwork/go-empyrean/p2p/enode" 30 "github.com/ShyftNetwork/go-empyrean/p2p/protocols" 31 "github.com/ShyftNetwork/go-empyrean/swarm/pot" 32 ) 33 34 func init() { 35 h := log.LvlFilterHandler(log.LvlWarn, log.StreamHandler(os.Stderr, log.TerminalFormat(true))) 36 log.Root().SetHandler(h) 37 } 38 39 func testKadPeerAddr(s string) *BzzAddr { 40 a := pot.NewAddressFromString(s) 41 return &BzzAddr{OAddr: a, UAddr: a} 42 } 43 44 func newTestKademliaParams() *KadParams { 45 params := NewKadParams() 46 // TODO why is this 1? 47 params.MinBinSize = 1 48 params.NeighbourhoodSize = 2 49 return params 50 } 51 52 func newTestKademlia(b string) *Kademlia { 53 base := pot.NewAddressFromString(b) 54 return NewKademlia(base, newTestKademliaParams()) 55 } 56 57 func newTestKadPeer(k *Kademlia, s string, lightNode bool) *Peer { 58 return NewPeer(&BzzPeer{BzzAddr: testKadPeerAddr(s), LightNode: lightNode}, k) 59 } 60 61 func On(k *Kademlia, ons ...string) { 62 for _, s := range ons { 63 k.On(newTestKadPeer(k, s, false)) 64 } 65 } 66 67 func Off(k *Kademlia, offs ...string) { 68 for _, s := range offs { 69 k.Off(newTestKadPeer(k, s, false)) 70 } 71 } 72 73 func Register(k *Kademlia, regs ...string) { 74 var as []*BzzAddr 75 for _, s := range regs { 76 as = append(as, testKadPeerAddr(s)) 77 } 78 err := k.Register(as...) 79 if err != nil { 80 panic(err.Error()) 81 } 82 } 83 84 // tests the validity of neighborhood depth calculations 85 // 86 // in particular, it tests that if there are one or more consecutive 87 // empty bins above the farthest "nearest neighbor-peer" then 88 // the depth should be set at the farthest of those empty bins 89 // 90 // TODO: Make test adapt to change in NeighbourhoodSize 91 func TestNeighbourhoodDepth(t *testing.T) { 92 baseAddressBytes := RandomAddr().OAddr 93 kad := NewKademlia(baseAddressBytes, NewKadParams()) 94 95 baseAddress := pot.NewAddressFromBytes(baseAddressBytes) 96 97 // generate the peers 98 var peers []*Peer 99 for i := 0; i < 7; i++ { 100 addr := pot.RandomAddressAt(baseAddress, i) 101 peers = append(peers, newTestDiscoveryPeer(addr, kad)) 102 } 103 var sevenPeers []*Peer 104 for i := 0; i < 2; i++ { 105 addr := pot.RandomAddressAt(baseAddress, 7) 106 sevenPeers = append(sevenPeers, newTestDiscoveryPeer(addr, kad)) 107 } 108 109 testNum := 0 110 // first try with empty kademlia 111 depth := kad.NeighbourhoodDepth() 112 if depth != 0 { 113 t.Fatalf("%d expected depth 0, was %d", testNum, depth) 114 } 115 testNum++ 116 117 // add one peer on 7 118 kad.On(sevenPeers[0]) 119 depth = kad.NeighbourhoodDepth() 120 if depth != 0 { 121 t.Fatalf("%d expected depth 0, was %d", testNum, depth) 122 } 123 testNum++ 124 125 // add a second on 7 126 kad.On(sevenPeers[1]) 127 depth = kad.NeighbourhoodDepth() 128 if depth != 0 { 129 t.Fatalf("%d expected depth 0, was %d", testNum, depth) 130 } 131 testNum++ 132 133 // add from 0 to 6 134 for i, p := range peers { 135 kad.On(p) 136 depth = kad.NeighbourhoodDepth() 137 if depth != i+1 { 138 t.Fatalf("%d.%d expected depth %d, was %d", i+1, testNum, i, depth) 139 } 140 } 141 testNum++ 142 143 kad.Off(sevenPeers[1]) 144 depth = kad.NeighbourhoodDepth() 145 if depth != 6 { 146 t.Fatalf("%d expected depth 6, was %d", testNum, depth) 147 } 148 testNum++ 149 150 kad.Off(peers[4]) 151 depth = kad.NeighbourhoodDepth() 152 if depth != 4 { 153 t.Fatalf("%d expected depth 4, was %d", testNum, depth) 154 } 155 testNum++ 156 157 kad.Off(peers[3]) 158 depth = kad.NeighbourhoodDepth() 159 if depth != 3 { 160 t.Fatalf("%d expected depth 3, was %d", testNum, depth) 161 } 162 testNum++ 163 } 164 165 // TestHealthStrict tests the simplest definition of health 166 // Which means whether we are connected to all neighbors we know of 167 func TestHealthStrict(t *testing.T) { 168 169 // base address is all zeros 170 // no peers 171 // unhealthy (and lonely) 172 k := newTestKademlia("11111111") 173 assertHealth(t, k, false, false) 174 175 // know one peer but not connected 176 // unhealthy 177 Register(k, "11100000") 178 log.Trace(k.String()) 179 assertHealth(t, k, false, false) 180 181 // know one peer and connected 182 // healthy 183 On(k, "11100000") 184 assertHealth(t, k, true, false) 185 186 // know two peers, only one connected 187 // unhealthy 188 Register(k, "11111100") 189 log.Trace(k.String()) 190 assertHealth(t, k, false, false) 191 192 // know two peers and connected to both 193 // healthy 194 On(k, "11111100") 195 assertHealth(t, k, true, false) 196 197 // know three peers, connected to the two deepest 198 // healthy 199 Register(k, "00000000") 200 log.Trace(k.String()) 201 assertHealth(t, k, true, false) 202 203 // know three peers, connected to all three 204 // healthy 205 On(k, "00000000") 206 assertHealth(t, k, true, false) 207 208 // add fourth peer deeper than current depth 209 // unhealthy 210 Register(k, "11110000") 211 log.Trace(k.String()) 212 assertHealth(t, k, false, false) 213 214 // connected to three deepest peers 215 // healthy 216 On(k, "11110000") 217 assertHealth(t, k, true, false) 218 219 // add additional peer in same bin as deepest peer 220 // unhealthy 221 Register(k, "11111101") 222 log.Trace(k.String()) 223 assertHealth(t, k, false, false) 224 225 // four deepest of five peers connected 226 // healthy 227 On(k, "11111101") 228 assertHealth(t, k, true, false) 229 } 230 231 func assertHealth(t *testing.T, k *Kademlia, expectHealthy bool, expectSaturation bool) { 232 t.Helper() 233 kid := common.Bytes2Hex(k.BaseAddr()) 234 addrs := [][]byte{k.BaseAddr()} 235 k.EachAddr(nil, 255, func(addr *BzzAddr, po int) bool { 236 addrs = append(addrs, addr.Address()) 237 return true 238 }) 239 240 pp := NewPeerPotMap(k.NeighbourhoodSize, addrs) 241 healthParams := k.Healthy(pp[kid]) 242 243 // definition of health, all conditions but be true: 244 // - we at least know one peer 245 // - we know all neighbors 246 // - we are connected to all known neighbors 247 health := healthParams.KnowNN && healthParams.ConnectNN && healthParams.CountKnowNN > 0 248 if expectHealthy != health { 249 t.Fatalf("expected kademlia health %v, is %v\n%v", expectHealthy, health, k.String()) 250 } 251 } 252 253 func testSuggestPeer(k *Kademlia, expAddr string, expPo int, expWant bool) error { 254 addr, o, want := k.SuggestPeer() 255 log.Trace("suggestpeer return", "a", addr, "o", o, "want", want) 256 if binStr(addr) != expAddr { 257 return fmt.Errorf("incorrect peer address suggested. expected %v, got %v", expAddr, binStr(addr)) 258 } 259 if o != expPo { 260 return fmt.Errorf("incorrect prox order suggested. expected %v, got %v", expPo, o) 261 } 262 if want != expWant { 263 return fmt.Errorf("expected SuggestPeer to want peers: %v", expWant) 264 } 265 return nil 266 } 267 268 func binStr(a *BzzAddr) string { 269 if a == nil { 270 return "<nil>" 271 } 272 return pot.ToBin(a.Address())[:8] 273 } 274 275 // TODO explain why this bug occurred and how it should have been mitigated 276 func TestSuggestPeerBug(t *testing.T) { 277 // 2 row gap, unsaturated proxbin, no callables -> want PO 0 278 k := newTestKademlia("00000000") 279 On(k, 280 "10000000", "11000000", 281 "01000000", 282 283 "00010000", "00011000", 284 ) 285 Off(k, 286 "01000000", 287 ) 288 err := testSuggestPeer(k, "01000000", 0, false) 289 if err != nil { 290 t.Fatal(err.Error()) 291 } 292 } 293 294 func TestSuggestPeerFindPeers(t *testing.T) { 295 t.Skip("The SuggestPeers implementation seems to have weaknesses exposed by the change in the new depth calculation. The results are no longer predictable") 296 297 testnum := 0 298 // test 0 299 // 2 row gap, unsaturated proxbin, no callables -> want PO 0 300 k := newTestKademlia("00000000") 301 On(k, "00100000") 302 err := testSuggestPeer(k, "<nil>", 0, false) 303 if err != nil { 304 t.Fatalf("%d %v", testnum, err.Error()) 305 } 306 testnum++ 307 308 // test 1 309 // 2 row gap, saturated proxbin, no callables -> want PO 0 310 On(k, "00010000") 311 err = testSuggestPeer(k, "<nil>", 0, false) 312 if err != nil { 313 t.Fatalf("%d %v", testnum, err.Error()) 314 } 315 testnum++ 316 317 // test 2 318 // 1 row gap (1 less), saturated proxbin, no callables -> want PO 1 319 On(k, "10000000") 320 err = testSuggestPeer(k, "<nil>", 1, false) 321 if err != nil { 322 t.Fatalf("%d %v", testnum, err.Error()) 323 } 324 testnum++ 325 326 // test 3 327 // no gap (1 less), saturated proxbin, no callables -> do not want more 328 On(k, "01000000", "00100001") 329 err = testSuggestPeer(k, "<nil>", 0, false) 330 if err != nil { 331 t.Fatalf("%d %v", testnum, err.Error()) 332 } 333 testnum++ 334 335 // test 4 336 // oversaturated proxbin, > do not want more 337 On(k, "00100001") 338 err = testSuggestPeer(k, "<nil>", 0, false) 339 if err != nil { 340 t.Fatalf("%d %v", testnum, err.Error()) 341 } 342 testnum++ 343 344 // test 5 345 // reintroduce gap, disconnected peer callable 346 Off(k, "01000000") 347 log.Trace(k.String()) 348 err = testSuggestPeer(k, "01000000", 0, false) 349 if err != nil { 350 t.Fatalf("%d %v", testnum, err.Error()) 351 } 352 testnum++ 353 354 // test 6 355 // second time disconnected peer not callable 356 // with reasonably set Interval 357 log.Trace("foo") 358 log.Trace(k.String()) 359 err = testSuggestPeer(k, "<nil>", 1, false) 360 if err != nil { 361 t.Fatalf("%d %v", testnum, err.Error()) 362 } 363 testnum++ 364 365 // test 6 366 // on and off again, peer callable again 367 On(k, "01000000") 368 Off(k, "01000000") 369 log.Trace(k.String()) 370 err = testSuggestPeer(k, "01000000", 0, false) 371 if err != nil { 372 t.Fatalf("%d %v", testnum, err.Error()) 373 } 374 testnum++ 375 376 // test 7 377 // new closer peer appears, it is immediately wanted 378 On(k, "01000000") 379 Register(k, "00010001") 380 err = testSuggestPeer(k, "00010001", 0, false) 381 if err != nil { 382 t.Fatalf("%d %v", testnum, err.Error()) 383 } 384 testnum++ 385 386 // test 8 387 // PO1 disconnects 388 On(k, "00010001") 389 log.Info(k.String()) 390 Off(k, "01000000") 391 log.Info(k.String()) 392 // second time, gap filling 393 err = testSuggestPeer(k, "01000000", 0, false) 394 if err != nil { 395 t.Fatalf("%d %v", testnum, err.Error()) 396 } 397 testnum++ 398 399 // test 9 400 On(k, "01000000") 401 log.Info(k.String()) 402 err = testSuggestPeer(k, "<nil>", 0, false) 403 if err != nil { 404 t.Fatalf("%d %v", testnum, err.Error()) 405 } 406 testnum++ 407 408 // test 10 409 k.MinBinSize = 2 410 log.Info(k.String()) 411 err = testSuggestPeer(k, "<nil>", 0, true) 412 if err != nil { 413 t.Fatalf("%d %v", testnum, err.Error()) 414 } 415 testnum++ 416 417 // test 11 418 Register(k, "01000001") 419 log.Info(k.String()) 420 err = testSuggestPeer(k, "01000001", 0, false) 421 if err != nil { 422 t.Fatalf("%d %v", testnum, err.Error()) 423 } 424 testnum++ 425 426 // test 12 427 On(k, "10000001") 428 log.Trace(fmt.Sprintf("Kad:\n%v", k.String())) 429 err = testSuggestPeer(k, "<nil>", 1, true) 430 if err != nil { 431 t.Fatalf("%d %v", testnum, err.Error()) 432 } 433 testnum++ 434 435 // test 13 436 On(k, "01000001") 437 err = testSuggestPeer(k, "<nil>", 0, false) 438 if err != nil { 439 t.Fatalf("%d %v", testnum, err.Error()) 440 } 441 testnum++ 442 443 // test 14 444 k.MinBinSize = 3 445 Register(k, "10000010") 446 err = testSuggestPeer(k, "10000010", 0, false) 447 if err != nil { 448 t.Fatalf("%d %v", testnum, err.Error()) 449 } 450 testnum++ 451 452 // test 15 453 On(k, "10000010") 454 err = testSuggestPeer(k, "<nil>", 1, false) 455 if err != nil { 456 t.Fatalf("%d %v", testnum, err.Error()) 457 } 458 testnum++ 459 460 // test 16 461 On(k, "01000010") 462 err = testSuggestPeer(k, "<nil>", 2, false) 463 if err != nil { 464 t.Fatalf("%d %v", testnum, err.Error()) 465 } 466 testnum++ 467 468 // test 17 469 On(k, "00100010") 470 err = testSuggestPeer(k, "<nil>", 3, false) 471 if err != nil { 472 t.Fatalf("%d %v", testnum, err.Error()) 473 } 474 testnum++ 475 476 // test 18 477 On(k, "00010010") 478 err = testSuggestPeer(k, "<nil>", 0, false) 479 if err != nil { 480 t.Fatalf("%d %v", testnum, err.Error()) 481 } 482 testnum++ 483 484 } 485 486 // a node should stay in the address book if it's removed from the kademlia 487 func TestOffEffectingAddressBookNormalNode(t *testing.T) { 488 k := newTestKademlia("00000000") 489 // peer added to kademlia 490 k.On(newTestKadPeer(k, "01000000", false)) 491 // peer should be in the address book 492 if k.addrs.Size() != 1 { 493 t.Fatal("known peer addresses should contain 1 entry") 494 } 495 // peer should be among live connections 496 if k.conns.Size() != 1 { 497 t.Fatal("live peers should contain 1 entry") 498 } 499 // remove peer from kademlia 500 k.Off(newTestKadPeer(k, "01000000", false)) 501 // peer should be in the address book 502 if k.addrs.Size() != 1 { 503 t.Fatal("known peer addresses should contain 1 entry") 504 } 505 // peer should not be among live connections 506 if k.conns.Size() != 0 { 507 t.Fatal("live peers should contain 0 entry") 508 } 509 } 510 511 // a light node should not be in the address book 512 func TestOffEffectingAddressBookLightNode(t *testing.T) { 513 k := newTestKademlia("00000000") 514 // light node peer added to kademlia 515 k.On(newTestKadPeer(k, "01000000", true)) 516 // peer should not be in the address book 517 if k.addrs.Size() != 0 { 518 t.Fatal("known peer addresses should contain 0 entry") 519 } 520 // peer should be among live connections 521 if k.conns.Size() != 1 { 522 t.Fatal("live peers should contain 1 entry") 523 } 524 // remove peer from kademlia 525 k.Off(newTestKadPeer(k, "01000000", true)) 526 // peer should not be in the address book 527 if k.addrs.Size() != 0 { 528 t.Fatal("known peer addresses should contain 0 entry") 529 } 530 // peer should not be among live connections 531 if k.conns.Size() != 0 { 532 t.Fatal("live peers should contain 0 entry") 533 } 534 } 535 536 func TestSuggestPeerRetries(t *testing.T) { 537 k := newTestKademlia("00000000") 538 k.RetryInterval = int64(300 * time.Millisecond) // cycle 539 k.MaxRetries = 50 540 k.RetryExponent = 2 541 sleep := func(n int) { 542 ts := k.RetryInterval 543 for i := 1; i < n; i++ { 544 ts *= int64(k.RetryExponent) 545 } 546 time.Sleep(time.Duration(ts)) 547 } 548 549 Register(k, "01000000") 550 On(k, "00000001", "00000010") 551 err := testSuggestPeer(k, "01000000", 0, false) 552 if err != nil { 553 t.Fatal(err.Error()) 554 } 555 556 err = testSuggestPeer(k, "<nil>", 0, false) 557 if err != nil { 558 t.Fatal(err.Error()) 559 } 560 561 sleep(1) 562 err = testSuggestPeer(k, "01000000", 0, false) 563 if err != nil { 564 t.Fatal(err.Error()) 565 } 566 567 err = testSuggestPeer(k, "<nil>", 0, false) 568 if err != nil { 569 t.Fatal(err.Error()) 570 } 571 572 sleep(1) 573 err = testSuggestPeer(k, "01000000", 0, false) 574 if err != nil { 575 t.Fatal(err.Error()) 576 } 577 578 err = testSuggestPeer(k, "<nil>", 0, false) 579 if err != nil { 580 t.Fatal(err.Error()) 581 } 582 583 sleep(2) 584 err = testSuggestPeer(k, "01000000", 0, false) 585 if err != nil { 586 t.Fatal(err.Error()) 587 } 588 589 err = testSuggestPeer(k, "<nil>", 0, false) 590 if err != nil { 591 t.Fatal(err.Error()) 592 } 593 594 sleep(2) 595 err = testSuggestPeer(k, "<nil>", 0, false) 596 if err != nil { 597 t.Fatal(err.Error()) 598 } 599 600 } 601 602 func TestKademliaHiveString(t *testing.T) { 603 k := newTestKademlia("00000000") 604 On(k, "01000000", "00100000") 605 Register(k, "10000000", "10000001") 606 k.MaxProxDisplay = 8 607 h := k.String() 608 expH := "\n=========================================================================\nMon Feb 27 12:10:28 UTC 2017 KΛÐΞMLIΛ hive: queen's address: 000000\npopulation: 2 (4), NeighbourhoodSize: 2, MinBinSize: 1, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 0 | 2 8100 (0) 8000 (0)\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=========================================================================" 609 if expH[104:] != h[104:] { 610 t.Fatalf("incorrect hive output. expected %v, got %v", expH, h) 611 } 612 } 613 614 // testKademliaCase constructs the kademlia and PeerPot map to validate 615 // the SuggestPeer and Healthy methods for provided hex-encoded addresses. 616 // Argument pivotAddr is the address of the kademlia. 617 func testKademliaCase(t *testing.T, pivotAddr string, addrs ...string) { 618 619 t.Skip("this test relies on SuggestPeer which is now not reliable. See description in TestSuggestPeerFindPeers") 620 addr := common.Hex2Bytes(pivotAddr) 621 var byteAddrs [][]byte 622 for _, ahex := range addrs { 623 byteAddrs = append(byteAddrs, common.Hex2Bytes(ahex)) 624 } 625 626 k := NewKademlia(addr, NewKadParams()) 627 628 // our pivot kademlia is the last one in the array 629 for _, a := range byteAddrs { 630 if bytes.Equal(a, addr) { 631 continue 632 } 633 p := &BzzAddr{OAddr: a, UAddr: a} 634 if err := k.Register(p); err != nil { 635 t.Fatalf("a %x addr %x: %v", a, addr, err) 636 } 637 } 638 639 ppmap := NewPeerPotMap(k.NeighbourhoodSize, byteAddrs) 640 641 pp := ppmap[pivotAddr] 642 643 for { 644 a, _, _ := k.SuggestPeer() 645 if a == nil { 646 break 647 } 648 k.On(NewPeer(&BzzPeer{BzzAddr: a}, k)) 649 } 650 651 h := k.Healthy(pp) 652 if !(h.ConnectNN && h.KnowNN && h.CountKnowNN > 0) { 653 t.Fatalf("not healthy: %#v\n%v", h, k.String()) 654 } 655 } 656 657 /* 658 The regression test for the following invalid kademlia edge case. 659 660 Addresses used in this test are discovered as part of the simulation network 661 in higher level tests for streaming. They were generated randomly. 662 663 ========================================================================= 664 Mon Apr 9 12:18:24 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 7efef1 665 population: 9 (49), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4 666 000 2 d7e5 ec56 | 18 ec56 (0) d7e5 (0) d9e0 (0) c735 (0) 667 001 2 18f1 3176 | 14 18f1 (0) 10bb (0) 10d1 (0) 0421 (0) 668 002 2 52aa 47cd | 11 52aa (0) 51d9 (0) 5161 (0) 5130 (0) 669 003 1 646e | 1 646e (0) 670 004 0 | 3 769c (0) 76d1 (0) 7656 (0) 671 ============ DEPTH: 5 ========================================== 672 005 1 7a48 | 1 7a48 (0) 673 006 1 7cbd | 1 7cbd (0) 674 007 0 | 0 675 008 0 | 0 676 009 0 | 0 677 010 0 | 0 678 011 0 | 0 679 012 0 | 0 680 013 0 | 0 681 014 0 | 0 682 015 0 | 0 683 ========================================================================= 684 */ 685 func TestKademliaCase1(t *testing.T) { 686 testKademliaCase(t, 687 "7efef1c41d77f843ad167be95f6660567eb8a4a59f39240000cce2e0d65baf8e", 688 "ec560e6a4806aa37f147ee83687f3cf044d9953e61eedb8c34b6d50d9e2c5623", 689 "646e9540c84f6a2f9cf6585d45a4c219573b4fd1b64a3c9a1386fc5cf98c0d4d", 690 "18f13c5fba653781019025ab10e8d2fdc916d6448729268afe9e928ffcdbb8e8", 691 "317617acf99b4ffddda8a736f8fc6c6ede0bf690bc23d834123823e6d03e2f69", 692 "d7e52d9647a5d1c27a68c3ee65d543be3947ae4b68537b236d71ef9cb15fb9ab", 693 "7a48f75f8ca60487ae42d6f92b785581b40b91f2da551ae73d5eae46640e02e8", 694 "7cbd42350bde8e18ae5b955b5450f8e2cef3419f92fbf5598160c60fd78619f0", 695 "52aa3ddec61f4d48dd505a2385403c634f6ad06ee1d99c5c90a5ba6006f9af9c", 696 "47cdb6fa93eeb8bc91a417ff4e3b14a9c2ea85137462e2f575fae97f0c4be60d", 697 "5161943eb42e2a03e715fe8afa1009ff5200060c870ead6ab103f63f26cb107f", 698 "a38eaa1255f76bf883ca0830c86e8c4bb7eed259a8348aae9b03f21f90105bee", 699 "b2522bdf1ab26f324e75424fdf6e493b47e8a27687fe76347607b344fc010075", 700 "5bd7213964efb2580b91d02ac31ef126838abeba342f5dbdbe8d4d03562671a2", 701 "0b531adb82744768b694d7f94f73d4f0c9de591266108daeb8c74066bfc9c9ca", 702 "28501f59f70e888d399570145ed884353e017443c675aa12731ada7c87ea14f7", 703 "4a45f1fc63e1a9cb9dfa44c98da2f3d20c2923e5d75ff60b2db9d1bdb0c54d51", 704 "b193431ee35cd32de95805e7c1c749450c47486595aae7195ea6b6019a64fd61", 705 "baebf36a1e35a7ed834e1c72faf44ba16c159fa47d3289ceb3ca35fefa8739b5", 706 "a3659bd32e05fa36c8d20dbaaed8362bf1a8a7bd116aed62d8a43a2efbdf513f", 707 "10d1b50881a4770ebebdd0a75589dabb931e6716747b0f65fd6b080b88c4fdb6", 708 "3c76b8ca5c7ce6a03320646826213f59229626bf5b9d25da0c3ec0662dcb8ff3", 709 "4d72a04ddeb851a68cd197ef9a92a3e2ff01fbbff638e64929dd1a9c2e150112", 710 "c7353d320987956075b5bc1668571c7a36c800d5598fdc4832ec6569561e15d1", 711 "d9e0c7c90878c20ab7639d5954756f54775404b3483407fe1b483635182734f6", 712 "8fca67216b7939c0824fb06c5279901a94da41da9482b000f56df9906736ee75", 713 "460719d7f7aa7d7438f0eaf30333484fa3bd0f233632c10ba89e6e46dd3604be", 714 "0421d92c8a1c79ed5d01305a3d25aaf22a8f5f9e3d4bc80da47ee16ce20465fe", 715 "3441d9d9c0f05820a1bb6459fc7d8ef266a1bd929e7db939a10f544efe8261ea", 716 "ab198a66c293586746758468c610e5d3914d4ce629147eff6dd55a31f863ff8f", 717 "3a1c8c16b0763f3d2c35269f454ff779d1255e954d2deaf6c040fb3f0bcdc945", 718 "5561c0ea3b203e173b11e6aa9d0e621a4e10b1d8b178b8fe375220806557b823", 719 "7656caccdc79cd8d7ce66d415cc96a718e8271c62fb35746bfc2b49faf3eebf3", 720 "5130594fd54c1652cf2debde2c4204573ed76555d1e26757fe345b409af1544a", 721 "76d1e83c71ca246d042e37ff1db181f2776265fbcfdc890ce230bfa617c9c2f0", 722 "89580231962624c53968c1b0095b4a2732b2a2640a19fdd7d21fd064fcc0a5ef", 723 "3d10d001fff44680c7417dd66ecf2e984f0baa20a9bbcea348583ba5ff210c4f", 724 "43754e323f0f3a1155b1852bd6edd55da86b8c4cfe3df8b33733fca50fc202b8", 725 "a9e7b1bb763ae6452ddcacd174993f82977d81a85206bb2ae3c842e2d8e19b4c", 726 "10bb07da7bc7c7757f74149eff167d528a94a253cdc694a863f4d50054c00b6d", 727 "28f0bc1b44658548d6e05dd16d4c2fe77f1da5d48b6774bc4263b045725d0c19", 728 "835fbbf1d16ba7347b6e2fc552d6e982148d29c624ea20383850df3c810fa8fc", 729 "8e236c56a77d7f46e41e80f7092b1a68cd8e92f6156365f41813ad1ca2c6b6f3", 730 "51d9c857e9238c49186e37b4eccf17a82de3d5739f026f6043798ab531456e73", 731 "bbddf7db6a682225301f36a9fd5b0d0121d2951753e1681295f3465352ad511f", 732 "2690a910c33ee37b91eb6c4e0731d1d345e2dc3b46d308503a6e85bbc242c69e", 733 "769ce86aa90b518b7ed382f9fdacfbed93574e18dc98fe6c342e4f9f409c2d5a", 734 "ba3bebec689ce51d3e12776c45f80d25164fdfb694a8122d908081aaa2e7122c", 735 "3a51f4146ea90a815d0d283d1ceb20b928d8b4d45875e892696986a3c0d8fb9b", 736 "81968a2d8fb39114342ee1da85254ec51e0608d7f0f6997c2a8354c260a71009", 737 ) 738 } 739 740 /* 741 The regression test for the following invalid kademlia edge case. 742 743 Addresses used in this test are discovered as part of the simulation network 744 in higher level tests for streaming. They were generated randomly. 745 746 ========================================================================= 747 Mon Apr 9 18:43:48 UTC 2018 KΛÐΞMLIΛ hive: queen's address: bc7f3b 748 population: 9 (49), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4 749 000 2 0f49 67ff | 28 0f49 (0) 0211 (0) 07b2 (0) 0703 (0) 750 001 2 e84b f3a4 | 13 f3a4 (0) e84b (0) e58b (0) e60b (0) 751 002 1 8dba | 1 8dba (0) 752 003 2 a008 ad72 | 2 ad72 (0) a008 (0) 753 004 0 | 3 b61f (0) b27f (0) b027 (0) 754 ============ DEPTH: 5 ========================================== 755 005 1 ba19 | 1 ba19 (0) 756 006 0 | 0 757 007 1 bdd6 | 1 bdd6 (0) 758 008 0 | 0 759 009 0 | 0 760 010 0 | 0 761 011 0 | 0 762 012 0 | 0 763 013 0 | 0 764 014 0 | 0 765 015 0 | 0 766 ========================================================================= 767 */ 768 func TestKademliaCase2(t *testing.T) { 769 testKademliaCase(t, 770 "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", 771 ) 772 } 773 774 /* 775 The regression test for the following invalid kademlia edge case. 776 777 Addresses used in this test are discovered as part of the simulation network 778 in higher level tests for streaming. They were generated randomly. 779 780 ========================================================================= 781 Mon Apr 9 19:04:35 UTC 2018 KΛÐΞMLIΛ hive: queen's address: b4822e 782 population: 8 (49), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4 783 000 2 786c 774b | 29 774b (0) 786c (0) 7a79 (0) 7d2f (0) 784 001 2 d9de cf19 | 10 cf19 (0) d9de (0) d2ff (0) d2a2 (0) 785 002 2 8ca1 8d74 | 5 8d74 (0) 8ca1 (0) 9793 (0) 9f51 (0) 786 003 0 | 0 787 004 0 | 3 bfac (0) bcbb (0) bde9 (0) 788 005 0 | 0 789 ============ DEPTH: 6 ========================================== 790 006 1 b660 | 1 b660 (0) 791 007 0 | 0 792 008 1 b450 | 1 b450 (0) 793 009 0 | 0 794 010 0 | 0 795 011 0 | 0 796 012 0 | 0 797 013 0 | 0 798 014 0 | 0 799 015 0 | 0 800 ========================================================================= 801 */ 802 func TestKademliaCase3(t *testing.T) { 803 testKademliaCase(t, 804 "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", 805 ) 806 } 807 808 /* 809 The regression test for the following invalid kademlia edge case. 810 811 Addresses used in this test are discovered as part of the simulation network 812 in higher level tests for streaming. They were generated randomly. 813 814 ========================================================================= 815 Mon Apr 9 19:16:25 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 9a90fe 816 population: 8 (49), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4 817 000 2 72ef 4e6c | 24 0b1e (0) 0d66 (0) 17f5 (0) 17e8 (0) 818 001 2 fc2b fa47 | 13 fa47 (0) fc2b (0) fffd (0) ecef (0) 819 002 2 b847 afa8 | 6 afa8 (0) ad77 (0) bb7c (0) b847 (0) 820 003 0 | 0 821 004 0 | 4 91fc (0) 957d (0) 9482 (0) 949a (0) 822 ============ DEPTH: 5 ========================================== 823 005 1 9ccf | 1 9ccf (0) 824 006 0 | 0 825 007 1 9bb2 | 1 9bb2 (0) 826 008 0 | 0 827 009 0 | 0 828 010 0 | 0 829 011 0 | 0 830 012 0 | 0 831 013 0 | 0 832 014 0 | 0 833 015 0 | 0 834 ========================================================================= 835 */ 836 func TestKademliaCase4(t *testing.T) { 837 testKademliaCase(t, 838 "9a90fe3506277244549064b8c3276abb06284a199d9063a97331947f2b7da7f4", 839 "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", 840 ) 841 } 842 843 /* 844 The regression test for the following invalid kademlia edge case. 845 846 Addresses used in this test are discovered as part of the simulation network 847 in higher level tests for streaming. They were generated randomly. 848 849 ========================================================================= 850 Mon Apr 9 19:25:18 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 5dd5c7 851 population: 13 (49), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4 852 000 2 e528 fad0 | 22 fad0 (0) e528 (0) e3bb (0) ed13 (0) 853 001 3 3f30 18e0 1dd3 | 7 3f30 (0) 23db (0) 10b6 (0) 18e0 (0) 854 002 4 7c54 7804 61e4 60f9 | 10 61e4 (0) 60f9 (0) 636c (0) 7186 (0) 855 003 2 40ae 4bae | 5 4bae (0) 4d5c (0) 403a (0) 40ae (0) 856 004 0 | 0 857 005 0 | 3 5808 (0) 5a0e (0) 5bdb (0) 858 ============ DEPTH: 6 ========================================== 859 006 2 5f14 5f61 | 2 5f14 (0) 5f61 (0) 860 007 0 | 0 861 008 0 | 0 862 009 0 | 0 863 010 0 | 0 864 011 0 | 0 865 012 0 | 0 866 013 0 | 0 867 014 0 | 0 868 015 0 | 0 869 ========================================================================= 870 */ 871 func TestKademliaCase5(t *testing.T) { 872 testKademliaCase(t, 873 "5dd5c77dd9006a800478fcebb02d48d4036389e7d3c8f6a83b97dbad13f4c0a9", 874 "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", 875 ) 876 } 877 878 func newTestDiscoveryPeer(addr pot.Address, kad *Kademlia) *Peer { 879 rw := &p2p.MsgPipeRW{} 880 p := p2p.NewPeer(enode.ID{}, "foo", []p2p.Cap{}) 881 pp := protocols.NewPeer(p, rw, &protocols.Spec{}) 882 bp := &BzzPeer{ 883 Peer: pp, 884 BzzAddr: &BzzAddr{ 885 OAddr: addr.Bytes(), 886 UAddr: []byte(fmt.Sprintf("%x", addr[:])), 887 }, 888 } 889 return NewPeer(bp, kad) 890 }