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