6 log "github.com/sirupsen/logrus"
7 "github.com/tendermint/go-crypto"
8 cmn "github.com/tendermint/tmlibs/common"
10 cfg "github.com/bytom/bytom/config"
11 dbm "github.com/bytom/bytom/database/leveldb"
12 "github.com/bytom/bytom/p2p/connection"
13 "github.com/bytom/bytom/p2p/discover/dht"
16 //PanicOnAddPeerErr add peer error
17 var PanicOnAddPeerErr = false
19 func CreateRandomPeer(outbound bool) *Peer {
20 _, netAddr := CreateRoutableAddr()
26 ListenAddr: netAddr.DialString(),
28 mconn: &connection.MConnection{},
33 func CreateRoutableAddr() (addr string, netAddr *NetAddress) {
36 addr = cmn.Fmt("%X@%v.%v.%v.%v:46656", cmn.RandBytes(20), cmn.RandInt()%256, cmn.RandInt()%256, cmn.RandInt()%256, cmn.RandInt()%256)
37 netAddr, err = NewNetAddressString(addr)
41 if netAddr.Routable() {
48 // Connect2Switches will connect switches i and j via net.Pipe()
49 // Blocks until a conection is established.
50 // NOTE: caller ensures i and j are within bounds
51 func Connect2Switches(switches []*Switch, i, j int) {
52 switchI := switches[i]
53 switchJ := switches[j]
55 doneCh := make(chan struct{})
57 err := switchI.addPeerWithConnection(c1)
58 if PanicOnAddPeerErr && err != nil {
64 err := switchJ.addPeerWithConnection(c2)
65 if PanicOnAddPeerErr && err != nil {
74 func startSwitches(switches []*Switch) error {
75 for _, s := range switches {
76 _, err := s.Start() // start switch and reactors
84 type mockDiscv struct {
87 func (m *mockDiscv) ReadRandomNodes(buf []*dht.Node) (n int) {
91 func MakeSwitch(cfg *cfg.Config, testdb dbm.DB, privKey crypto.PrivKeyEd25519, initSwitch func(*Switch) *Switch) *Switch {
92 // new switch, add reactors
93 l, listenAddr := GetListener(cfg.P2P)
94 cfg.P2P.LANDiscover = false
95 sw, err := newSwitch(cfg, new(mockDiscv), nil, l, privKey, listenAddr)
97 log.Errorf("create switch error: %s", err)