mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-02-22 02:47:26 +08:00
* print patch number in node-info * rename patchVersion to patchNumber for better differentiation between node version and patch number
171 lines
4.8 KiB
Go
171 lines
4.8 KiB
Go
package protobufs
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestPeerInfo_Serialization(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
peer *PeerInfo
|
|
}{
|
|
{
|
|
name: "complete peer info",
|
|
peer: &PeerInfo{
|
|
PeerId: []byte("peer-id-12345"),
|
|
Reachability: []*Reachability{
|
|
{
|
|
Filter: make([]byte, 32),
|
|
PubsubMultiaddrs: []string{"/ip4/127.0.0.1/tcp/8080", "/ip6/::1/tcp/8080"},
|
|
StreamMultiaddrs: []string{"/ip4/127.0.0.1/tcp/8081", "/ip6/::1/tcp/8081"},
|
|
},
|
|
{
|
|
Filter: append([]byte{0xFF}, make([]byte, 31)...),
|
|
PubsubMultiaddrs: []string{"/ip4/192.168.1.1/tcp/9090"},
|
|
StreamMultiaddrs: []string{"/ip4/192.168.1.1/tcp/9091"},
|
|
},
|
|
},
|
|
Timestamp: 1234567890,
|
|
Version: []byte{1, 0, 0}, // semantic version bytes
|
|
PatchNumber: []byte("patch-123"),
|
|
Capabilities: []*Capability{
|
|
{
|
|
ProtocolIdentifier: 0x12345678,
|
|
AdditionalMetadata: []byte("capability metadata"),
|
|
},
|
|
{
|
|
ProtocolIdentifier: 0x87654321,
|
|
AdditionalMetadata: []byte("another capability"),
|
|
},
|
|
},
|
|
PublicKey: make([]byte, 57), // Ed448 key
|
|
Signature: make([]byte, 114), // Ed448 signature
|
|
},
|
|
},
|
|
{
|
|
name: "peer info with single reachability",
|
|
peer: &PeerInfo{
|
|
PeerId: []byte("peer-id-67890"),
|
|
Reachability: []*Reachability{
|
|
{
|
|
Filter: append([]byte{0xAA}, make([]byte, 31)...),
|
|
PubsubMultiaddrs: []string{"/ip4/10.0.0.1/tcp/7070"},
|
|
StreamMultiaddrs: []string{"/ip4/10.0.0.1/tcp/7071"},
|
|
},
|
|
},
|
|
Timestamp: 9876543210,
|
|
Version: []byte{2, 1, 3},
|
|
PatchNumber: []byte("patch-456"),
|
|
Capabilities: []*Capability{
|
|
{
|
|
ProtocolIdentifier: 0xABCDEF12,
|
|
AdditionalMetadata: []byte("single capability"),
|
|
},
|
|
},
|
|
PublicKey: append([]byte{0xBB}, make([]byte, 56)...),
|
|
Signature: append([]byte{0xCC}, make([]byte, 113)...),
|
|
},
|
|
},
|
|
{
|
|
name: "minimal peer info",
|
|
peer: &PeerInfo{
|
|
PeerId: []byte{},
|
|
Reachability: []*Reachability{},
|
|
Timestamp: 0,
|
|
Version: []byte{},
|
|
PatchNumber: []byte{},
|
|
Capabilities: []*Capability{},
|
|
PublicKey: []byte{},
|
|
Signature: []byte{},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Test serialization
|
|
data, err := tt.peer.ToCanonicalBytes()
|
|
require.NoError(t, err)
|
|
require.NotNil(t, data)
|
|
|
|
// Test deserialization
|
|
peer2 := &PeerInfo{}
|
|
err = peer2.FromCanonicalBytes(data)
|
|
require.NoError(t, err)
|
|
|
|
// Compare basic fields
|
|
assert.Equal(t, tt.peer.PeerId, peer2.PeerId)
|
|
assert.Equal(t, tt.peer.Timestamp, peer2.Timestamp)
|
|
assert.Equal(t, tt.peer.Version, peer2.Version)
|
|
assert.Equal(t, tt.peer.PatchNumber, peer2.PatchNumber)
|
|
assert.Equal(t, tt.peer.PublicKey, peer2.PublicKey)
|
|
assert.Equal(t, tt.peer.Signature, peer2.Signature)
|
|
|
|
// Compare reachability arrays
|
|
assert.Equal(t, len(tt.peer.Reachability), len(peer2.Reachability))
|
|
for i := range tt.peer.Reachability {
|
|
assert.Equal(t, tt.peer.Reachability[i].Filter, peer2.Reachability[i].Filter)
|
|
assert.Equal(t, tt.peer.Reachability[i].PubsubMultiaddrs, peer2.Reachability[i].PubsubMultiaddrs)
|
|
assert.Equal(t, tt.peer.Reachability[i].StreamMultiaddrs, peer2.Reachability[i].StreamMultiaddrs)
|
|
}
|
|
|
|
// Compare capabilities arrays
|
|
assert.Equal(t, len(tt.peer.Capabilities), len(peer2.Capabilities))
|
|
for i := range tt.peer.Capabilities {
|
|
assert.Equal(t, tt.peer.Capabilities[i].ProtocolIdentifier, peer2.Capabilities[i].ProtocolIdentifier)
|
|
assert.Equal(t, tt.peer.Capabilities[i].AdditionalMetadata, peer2.Capabilities[i].AdditionalMetadata)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCapability_Serialization(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
cap *Capability
|
|
}{
|
|
{
|
|
name: "complete capability",
|
|
cap: &Capability{
|
|
ProtocolIdentifier: uint32(0x12345678),
|
|
AdditionalMetadata: []byte("capability metadata"),
|
|
},
|
|
},
|
|
{
|
|
name: "capability with max protocol id",
|
|
cap: &Capability{
|
|
ProtocolIdentifier: uint32(0xFFFFFFFF),
|
|
AdditionalMetadata: []byte("max protocol capability"),
|
|
},
|
|
},
|
|
{
|
|
name: "capability with empty metadata",
|
|
cap: &Capability{
|
|
ProtocolIdentifier: uint32(0),
|
|
AdditionalMetadata: []byte{},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Test serialization
|
|
data, err := tt.cap.ToCanonicalBytes()
|
|
require.NoError(t, err)
|
|
require.NotNil(t, data)
|
|
|
|
// Test deserialization
|
|
cap2 := &Capability{}
|
|
err = cap2.FromCanonicalBytes(data)
|
|
require.NoError(t, err)
|
|
|
|
// Compare
|
|
assert.Equal(t, tt.cap.ProtocolIdentifier, cap2.ProtocolIdentifier)
|
|
assert.Equal(t, tt.cap.AdditionalMetadata, cap2.AdditionalMetadata)
|
|
})
|
|
}
|
|
}
|