10 log "github.com/sirupsen/logrus"
11 "github.com/stretchr/testify/assert"
12 "github.com/stretchr/testify/require"
13 crypto "github.com/tendermint/go-crypto"
15 cfg "github.com/bytom/config"
18 func TestPeerBasic(t *testing.T) {
19 assert, require := assert.New(t), require.New(t)
21 // simulate remote peer
22 rp := &remotePeer{PrivKey: crypto.GenPrivKeyEd25519(), Config: DefaultPeerConfig(cfg.DefaultP2PConfig())}
26 p, err := createOutboundPeerAndPerformHandshake(rp.Addr(), DefaultPeerConfig(cfg.DefaultP2PConfig()))
32 assert.True(p.IsRunning())
33 assert.True(p.IsOutbound())
34 assert.False(p.IsPersistent())
36 assert.True(p.IsPersistent())
37 assert.Equal(rp.Addr().String(), p.Addr().String())
38 assert.Equal(rp.PubKey(), p.PubKey())
41 func TestPeerWithoutAuthEnc(t *testing.T) {
42 assert, require := assert.New(t), require.New(t)
44 config := DefaultPeerConfig(cfg.DefaultP2PConfig())
45 config.AuthEnc = false
47 // simulate remote peer
48 rp := &remotePeer{PrivKey: crypto.GenPrivKeyEd25519(), Config: config}
52 p, err := createOutboundPeerAndPerformHandshake(rp.Addr(), config)
58 assert.True(p.IsRunning())
61 func TestPeerSend(t *testing.T) {
62 assert, require := assert.New(t), require.New(t)
64 config := DefaultPeerConfig(cfg.DefaultP2PConfig())
65 config.AuthEnc = false
67 // simulate remote peer
68 rp := &remotePeer{PrivKey: crypto.GenPrivKeyEd25519(), Config: config}
72 p, err := createOutboundPeerAndPerformHandshake(rp.Addr(), config)
78 assert.True(p.CanSend(0x01))
79 assert.True(p.Send(0x01, "Asylum"))
82 func createOutboundPeerAndPerformHandshake(addr *NetAddress, config *PeerConfig) (*Peer, error) {
83 chDescs := []*ChannelDescriptor{
84 &ChannelDescriptor{ID: 0x01, Priority: 1},
86 reactorsByCh := map[byte]Reactor{0x01: NewTestReactor(chDescs, true)}
87 pk := crypto.GenPrivKeyEd25519()
88 p, err := newOutboundPeerWithConfig(addr, reactorsByCh, chDescs, func(p *Peer, r interface{}) {}, pk, config)
92 err = p.HandshakeTimeout(&NodeInfo{
93 PubKey: pk.PubKey().Unwrap().(crypto.PubKeyEd25519),
96 Version: "123.123.123",
104 type remotePeer struct {
105 PrivKey crypto.PrivKeyEd25519
111 func (p *remotePeer) Addr() *NetAddress {
115 func (p *remotePeer) PubKey() crypto.PubKeyEd25519 {
116 return p.PrivKey.PubKey().Unwrap().(crypto.PubKeyEd25519)
119 func (p *remotePeer) Start() {
120 l, e := net.Listen("tcp", "127.0.0.1:0") // any available address
122 log.Fatalf("net.Listen tcp :0: %+v", e)
124 p.addr = NewNetAddress(l.Addr())
125 p.quit = make(chan struct{})
129 func (p *remotePeer) Stop() {
133 func (p *remotePeer) accept(l net.Listener) {
135 conn, err := l.Accept()
137 log.Fatalf("Failed to accept conn: %+v", err)
139 peer, err := newInboundPeerWithConfig(conn, make(map[byte]Reactor), make([]*ChannelDescriptor, 0), func(p *Peer, r interface{}) {}, p.PrivKey, p.Config)
141 log.Fatalf("Failed to create a peer: %+v", err)
143 err = peer.HandshakeTimeout(&NodeInfo{
144 PubKey: p.PrivKey.PubKey().Unwrap().(crypto.PubKeyEd25519),
145 Moniker: "remote_peer",
147 Version: "123.123.123",
150 log.Fatalf("Failed to perform handshake: %+v", err)