github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/network/simulation/example_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 12:09:47</date> 10 //</624342673641181184> 11 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 // 25 // 26 // 27 28 package simulation_test 29 30 import ( 31 "context" 32 "fmt" 33 "sync" 34 "time" 35 36 "github.com/ethereum/go-ethereum/log" 37 "github.com/ethereum/go-ethereum/node" 38 "github.com/ethereum/go-ethereum/p2p" 39 "github.com/ethereum/go-ethereum/p2p/simulations/adapters" 40 "github.com/ethereum/go-ethereum/swarm/network" 41 "github.com/ethereum/go-ethereum/swarm/network/simulation" 42 ) 43 44 // 45 // 46 // 47 func ExampleSimulation_WaitTillHealthy() { 48 sim := simulation.New(map[string]simulation.ServiceFunc{ 49 "bzz": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { 50 addr := network.NewAddrFromNodeID(ctx.Config.ID) 51 hp := network.NewHiveParams() 52 hp.Discovery = false 53 config := &network.BzzConfig{ 54 OverlayAddr: addr.Over(), 55 UnderlayAddr: addr.Under(), 56 HiveParams: hp, 57 } 58 kad := network.NewKademlia(addr.Over(), network.NewKadParams()) 59 // 60 // 61 b.Store(simulation.BucketKeyKademlia, kad) 62 return network.NewBzz(config, kad, nil, nil, nil), nil, nil 63 }, 64 }) 65 defer sim.Close() 66 67 _, err := sim.AddNodesAndConnectRing(10) 68 if err != nil { 69 // 70 panic(err) 71 } 72 73 ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) 74 defer cancel() 75 ill, err := sim.WaitTillHealthy(ctx, 2) 76 if err != nil { 77 // 78 for id, kad := range ill { 79 fmt.Println("Node", id) 80 fmt.Println(kad.String()) 81 } 82 // 83 } 84 85 // 86 } 87 88 // 89 func ExampleSimulation_PeerEvents() { 90 sim := simulation.New(nil) 91 defer sim.Close() 92 93 events := sim.PeerEvents(context.Background(), sim.NodeIDs()) 94 95 go func() { 96 for e := range events { 97 if e.Error != nil { 98 log.Error("peer event", "err", e.Error) 99 continue 100 } 101 log.Info("peer event", "node", e.NodeID, "peer", e.Event.Peer, "msgcode", e.Event.MsgCode) 102 } 103 }() 104 } 105 106 // 107 func ExampleSimulation_PeerEvents_disconnections() { 108 sim := simulation.New(nil) 109 defer sim.Close() 110 111 disconnections := sim.PeerEvents( 112 context.Background(), 113 sim.NodeIDs(), 114 simulation.NewPeerEventsFilter().Type(p2p.PeerEventTypeDrop), 115 ) 116 117 go func() { 118 for d := range disconnections { 119 if d.Error != nil { 120 log.Error("peer drop", "err", d.Error) 121 continue 122 } 123 log.Warn("peer drop", "node", d.NodeID, "peer", d.Event.Peer) 124 } 125 }() 126 } 127 128 // 129 // 130 func ExampleSimulation_PeerEvents_multipleFilters() { 131 sim := simulation.New(nil) 132 defer sim.Close() 133 134 msgs := sim.PeerEvents( 135 context.Background(), 136 sim.NodeIDs(), 137 // 138 simulation.NewPeerEventsFilter().Type(p2p.PeerEventTypeMsgRecv).Protocol("bzz").MsgCode(1), 139 simulation.NewPeerEventsFilter().Type(p2p.PeerEventTypeMsgRecv).Protocol("bzz").MsgCode(4), 140 ) 141 142 go func() { 143 for m := range msgs { 144 if m.Error != nil { 145 log.Error("bzz message", "err", m.Error) 146 continue 147 } 148 log.Info("bzz message", "node", m.NodeID, "peer", m.Event.Peer) 149 } 150 }() 151 } 152