github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/network/simulation/kademlia_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:43</date> 10 //</624450114521403392> 11 12 13 package simulation 14 15 import ( 16 "context" 17 "sync" 18 "testing" 19 "time" 20 21 "github.com/ethereum/go-ethereum/node" 22 "github.com/ethereum/go-ethereum/p2p/simulations/adapters" 23 "github.com/ethereum/go-ethereum/swarm/network" 24 ) 25 26 func TestWaitTillHealthy(t *testing.T) { 27 t.Skip("WaitTillHealthy depends on discovery, which relies on a reliable SuggestPeer, which is not reliable") 28 29 sim := New(map[string]ServiceFunc{ 30 "bzz": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { 31 addr := network.NewAddr(ctx.Config.Node()) 32 hp := network.NewHiveParams() 33 config := &network.BzzConfig{ 34 OverlayAddr: addr.Over(), 35 UnderlayAddr: addr.Under(), 36 HiveParams: hp, 37 } 38 kad := network.NewKademlia(addr.Over(), network.NewKadParams()) 39 //将kademlia存储在bucketkeykademlia下的节点桶中 40 //这样就可以通过waittillhealthy方法找到它。 41 b.Store(BucketKeyKademlia, kad) 42 return network.NewBzz(config, kad, nil, nil, nil), nil, nil 43 }, 44 }) 45 defer sim.Close() 46 47 _, err := sim.AddNodesAndConnectRing(10) 48 if err != nil { 49 t.Fatal(err) 50 } 51 52 ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) 53 defer cancel() 54 ill, err := sim.WaitTillHealthy(ctx) 55 if err != nil { 56 for id, kad := range ill { 57 t.Log("Node", id) 58 t.Log(kad.String()) 59 } 60 if err != nil { 61 t.Fatal(err) 62 } 63 } 64 } 65