gecko/network/builder_test.go

311 lines
9.7 KiB
Go

// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package network
import (
"net"
"testing"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/utils"
"github.com/stretchr/testify/assert"
)
var (
TestBuilder Builder
)
func TestBuildGetVersion(t *testing.T) {
msg, err := TestBuilder.GetVersion()
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, GetVersion, msg.Op())
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, GetVersion, parsedMsg.Op())
}
func TestBuildVersion(t *testing.T) {
networkID := uint32(1)
nodeID := uint32(3)
myTime := uint64(2)
ip := utils.IPDesc{
IP: net.IPv6loopback,
Port: 12345,
}
myVersion := "xD"
msg, err := TestBuilder.Version(
networkID,
nodeID,
myTime,
ip,
myVersion,
)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, Version, msg.Op())
assert.Equal(t, networkID, msg.Get(NetworkID))
assert.Equal(t, nodeID, msg.Get(NodeID))
assert.Equal(t, myTime, msg.Get(MyTime))
assert.Equal(t, ip, msg.Get(IP))
assert.Equal(t, myVersion, msg.Get(VersionStr))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, Version, parsedMsg.Op())
assert.Equal(t, networkID, parsedMsg.Get(NetworkID))
assert.Equal(t, nodeID, parsedMsg.Get(NodeID))
assert.Equal(t, myTime, parsedMsg.Get(MyTime))
assert.Equal(t, ip, parsedMsg.Get(IP))
assert.Equal(t, myVersion, parsedMsg.Get(VersionStr))
}
func TestBuildGetPeerList(t *testing.T) {
msg, err := TestBuilder.GetPeerList()
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, GetPeerList, msg.Op())
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, GetPeerList, parsedMsg.Op())
}
func TestBuildPeerList(t *testing.T) {
ips := []utils.IPDesc{
{IP: net.IPv6loopback, Port: 12345},
{IP: net.IPv6loopback, Port: 54321},
}
msg, err := TestBuilder.PeerList(ips)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, PeerList, msg.Op())
assert.Equal(t, ips, msg.Get(Peers))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, PeerList, parsedMsg.Op())
assert.Equal(t, ips, parsedMsg.Get(Peers))
}
func TestBuildGetAcceptedFrontier(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
msg, err := TestBuilder.GetAcceptedFrontier(chainID, requestID)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, GetAcceptedFrontier, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, GetAcceptedFrontier, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
}
func TestBuildAcceptedFrontier(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
containerID := ids.Empty.Prefix(1)
containerIDSet := ids.Set{}
containerIDSet.Add(containerID)
containerIDs := [][]byte{containerID.Bytes()}
msg, err := TestBuilder.AcceptedFrontier(chainID, requestID, containerIDSet)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, AcceptedFrontier, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
assert.Equal(t, containerIDs, msg.Get(ContainerIDs))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, AcceptedFrontier, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
assert.Equal(t, containerIDs, parsedMsg.Get(ContainerIDs))
}
func TestBuildGetAccepted(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
containerID := ids.Empty.Prefix(1)
containerIDSet := ids.Set{}
containerIDSet.Add(containerID)
containerIDs := [][]byte{containerID.Bytes()}
msg, err := TestBuilder.GetAccepted(chainID, requestID, containerIDSet)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, GetAccepted, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
assert.Equal(t, containerIDs, msg.Get(ContainerIDs))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, GetAccepted, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
assert.Equal(t, containerIDs, parsedMsg.Get(ContainerIDs))
}
func TestBuildAccepted(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
containerID := ids.Empty.Prefix(1)
containerIDSet := ids.Set{}
containerIDSet.Add(containerID)
containerIDs := [][]byte{containerID.Bytes()}
msg, err := TestBuilder.Accepted(chainID, requestID, containerIDSet)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, Accepted, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
assert.Equal(t, containerIDs, msg.Get(ContainerIDs))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, Accepted, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
assert.Equal(t, containerIDs, parsedMsg.Get(ContainerIDs))
}
func TestBuildGet(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
containerID := ids.Empty.Prefix(1)
msg, err := TestBuilder.Get(chainID, requestID, containerID)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, Get, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
assert.Equal(t, containerID.Bytes(), msg.Get(ContainerID))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, Get, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
assert.Equal(t, containerID.Bytes(), parsedMsg.Get(ContainerID))
}
func TestBuildPut(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
containerID := ids.Empty.Prefix(1)
container := []byte{2}
msg, err := TestBuilder.Put(chainID, requestID, containerID, container)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, Put, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
assert.Equal(t, containerID.Bytes(), msg.Get(ContainerID))
assert.Equal(t, container, msg.Get(ContainerBytes))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, Put, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
assert.Equal(t, containerID.Bytes(), parsedMsg.Get(ContainerID))
assert.Equal(t, container, parsedMsg.Get(ContainerBytes))
}
func TestBuildPushQuery(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
containerID := ids.Empty.Prefix(1)
container := []byte{2}
msg, err := TestBuilder.PushQuery(chainID, requestID, containerID, container)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, PushQuery, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
assert.Equal(t, containerID.Bytes(), msg.Get(ContainerID))
assert.Equal(t, container, msg.Get(ContainerBytes))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, PushQuery, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
assert.Equal(t, containerID.Bytes(), parsedMsg.Get(ContainerID))
assert.Equal(t, container, parsedMsg.Get(ContainerBytes))
}
func TestBuildPullQuery(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
containerID := ids.Empty.Prefix(1)
msg, err := TestBuilder.PullQuery(chainID, requestID, containerID)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, PullQuery, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
assert.Equal(t, containerID.Bytes(), msg.Get(ContainerID))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, PullQuery, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
assert.Equal(t, containerID.Bytes(), parsedMsg.Get(ContainerID))
}
func TestBuildChits(t *testing.T) {
chainID := ids.Empty.Prefix(0)
requestID := uint32(5)
containerID := ids.Empty.Prefix(1)
containerIDSet := ids.Set{}
containerIDSet.Add(containerID)
containerIDs := [][]byte{containerID.Bytes()}
msg, err := TestBuilder.Chits(chainID, requestID, containerIDSet)
assert.NoError(t, err)
assert.NotNil(t, msg)
assert.Equal(t, Chits, msg.Op())
assert.Equal(t, chainID.Bytes(), msg.Get(ChainID))
assert.Equal(t, requestID, msg.Get(RequestID))
assert.Equal(t, containerIDs, msg.Get(ContainerIDs))
parsedMsg, err := TestBuilder.Parse(msg.Bytes())
assert.NoError(t, err)
assert.NotNil(t, parsedMsg)
assert.Equal(t, Chits, parsedMsg.Op())
assert.Equal(t, chainID.Bytes(), parsedMsg.Get(ChainID))
assert.Equal(t, requestID, parsedMsg.Get(RequestID))
assert.Equal(t, containerIDs, parsedMsg.Get(ContainerIDs))
}