OSDN Git Service

Peer add announces new block message num limit
[bytom/vapor.git] / p2p / node_info_test.go
1 package p2p
2
3 import (
4         "bytes"
5         "reflect"
6         "testing"
7
8         "github.com/davecgh/go-spew/spew"
9         "github.com/tendermint/go-wire"
10
11         "github.com/vapor/errors"
12         "github.com/vapor/p2p/signlib"
13 )
14
15 func mockCompatibleWithFalse(remoteVerStr string) (bool, error) {
16         return false, nil
17 }
18
19 func mockCompatibleWithTrue(remoteVerStr string) (bool, error) {
20         return true, nil
21 }
22
23 func TestCompatibleWith(t *testing.T) {
24         nodeInfo := &NodeInfo{Network: "testnet", NetworkID: 0x888}
25
26         cases := []struct {
27                 other                 *NodeInfo
28                 versionCompatibleWith VersionCompatibleWith
29                 err                   error
30         }{
31                 {other: &NodeInfo{Network: "mainnet", NetworkID: 0x888}, versionCompatibleWith: mockCompatibleWithTrue, err: errDiffNetwork},
32                 {other: &NodeInfo{Network: "testnet", NetworkID: 0x888}, versionCompatibleWith: mockCompatibleWithTrue, err: nil},
33                 {other: &NodeInfo{Network: "testnet", NetworkID: 0x999}, versionCompatibleWith: mockCompatibleWithTrue, err: errDiffNetworkID},
34                 {other: &NodeInfo{Network: "testnet", NetworkID: 0x888}, versionCompatibleWith: mockCompatibleWithFalse, err: errDiffMajorVersion},
35         }
36
37         for i, c := range cases {
38                 if err := nodeInfo.compatibleWith(c.other, c.versionCompatibleWith); errors.Root(err) != c.err {
39                         t.Fatalf("index:%d node info compatible test err want:%s result:%s", i, c.err, err)
40                 }
41         }
42 }
43
44 func TestNodeInfoWriteRead(t *testing.T) {
45         key := [64]byte{0x01, 0x02}
46         pubKey, err := signlib.NewPubKey(key[:])
47         if err != nil {
48                 t.Fatal("create pubkey err.", err)
49         }
50         nodeInfo := &NodeInfo{PubKey: pubKey.String(), Moniker: "vapord", Network: "mainnet", NetworkID: 0x888, RemoteAddr: "127.0.0.2:0", ListenAddr: "127.0.0.1:0", Version: "1.1.0-test", ServiceFlag: 10, Other: []string{"abc", "bcd"}}
51         n, err1, err2 := new(int), new(error), new(error)
52         buf := new(bytes.Buffer)
53
54         wire.WriteBinary(nodeInfo, buf, n, err1)
55         if *err1 != nil {
56                 t.Fatal(*err1)
57         }
58
59         peerNodeInfo := new(NodeInfo)
60         wire.ReadBinary(peerNodeInfo, buf, maxNodeInfoSize, new(int), err2)
61         if *err2 != nil {
62                 t.Fatal(*err1)
63         }
64
65         if !reflect.DeepEqual(*nodeInfo, *peerNodeInfo) {
66                 t.Fatal("TestNodeInfoWriteRead err", spew.Sdump(nodeInfo), spew.Sdump(peerNodeInfo))
67         }
68 }