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