OSDN Git Service

Merge pull request #201 from Bytom/v0.1
[bytom/vapor.git] / p2p / node_info_test.go
diff --git a/p2p/node_info_test.go b/p2p/node_info_test.go
new file mode 100644 (file)
index 0000000..6e1c4b7
--- /dev/null
@@ -0,0 +1,68 @@
+package p2p
+
+import (
+       "bytes"
+       "reflect"
+       "testing"
+
+       "github.com/davecgh/go-spew/spew"
+       "github.com/tendermint/go-wire"
+
+       "github.com/vapor/errors"
+       "github.com/vapor/p2p/signlib"
+)
+
+func mockCompatibleWithFalse(remoteVerStr string) (bool, error) {
+       return false, nil
+}
+
+func mockCompatibleWithTrue(remoteVerStr string) (bool, error) {
+       return true, nil
+}
+
+func TestCompatibleWith(t *testing.T) {
+       nodeInfo := &NodeInfo{Network: "testnet", NetworkID: 0x888}
+
+       cases := []struct {
+               other                 *NodeInfo
+               versionCompatibleWith VersionCompatibleWith
+               err                   error
+       }{
+               {other: &NodeInfo{Network: "mainnet", NetworkID: 0x888}, versionCompatibleWith: mockCompatibleWithTrue, err: errDiffNetwork},
+               {other: &NodeInfo{Network: "testnet", NetworkID: 0x888}, versionCompatibleWith: mockCompatibleWithTrue, err: nil},
+               {other: &NodeInfo{Network: "testnet", NetworkID: 0x999}, versionCompatibleWith: mockCompatibleWithTrue, err: errDiffNetworkID},
+               {other: &NodeInfo{Network: "testnet", NetworkID: 0x888}, versionCompatibleWith: mockCompatibleWithFalse, err: errDiffMajorVersion},
+       }
+
+       for i, c := range cases {
+               if err := nodeInfo.compatibleWith(c.other, c.versionCompatibleWith); errors.Root(err) != c.err {
+                       t.Fatalf("index:%d node info compatible test err want:%s result:%s", i, c.err, err)
+               }
+       }
+}
+
+func TestNodeInfoWriteRead(t *testing.T) {
+       key := [64]byte{0x01, 0x02}
+       pubKey, err := signlib.NewPubKey(key[:])
+       if err != nil {
+               t.Fatal("create pubkey err.", err)
+       }
+       nodeInfo := &NodeInfo{PubKey: pubKey.String(), Moniker: "bytomd", 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"}}
+       n, err1, err2 := new(int), new(error), new(error)
+       buf := new(bytes.Buffer)
+
+       wire.WriteBinary(nodeInfo, buf, n, err1)
+       if *err1 != nil {
+               t.Fatal(*err1)
+       }
+
+       peerNodeInfo := new(NodeInfo)
+       wire.ReadBinary(peerNodeInfo, buf, maxNodeInfoSize, new(int), err2)
+       if *err2 != nil {
+               t.Fatal(*err1)
+       }
+
+       if !reflect.DeepEqual(*nodeInfo, *peerNodeInfo) {
+               t.Fatal("TestNodeInfoWriteRead err", spew.Sdump(nodeInfo), spew.Sdump(peerNodeInfo))
+       }
+}