mirror of
https://github.com/netbirdio/netbird.git
synced 2025-08-18 11:00:06 +02:00
[misc] Separate shared code dependencies (#4288)
* Separate shared code dependencies * Fix import * Test respective shared code * Update openapi ref * Fix test * Fix test path
This commit is contained in:
144
shared/relay/messages/peer_state_test.go
Normal file
144
shared/relay/messages/peer_state_test.go
Normal file
@@ -0,0 +1,144 @@
|
||||
package messages
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
)
|
||||
|
||||
const (
|
||||
testPeerCount = 10
|
||||
)
|
||||
|
||||
// Helper function to generate test PeerIDs
|
||||
func generateTestPeerIDs(n int) []PeerID {
|
||||
ids := make([]PeerID, n)
|
||||
for i := 0; i < n; i++ {
|
||||
for j := 0; j < peerIDSize; j++ {
|
||||
ids[i][j] = byte(i + j)
|
||||
}
|
||||
}
|
||||
return ids
|
||||
}
|
||||
|
||||
// Helper function to compare slices of PeerID
|
||||
func peerIDEqual(a, b []PeerID) bool {
|
||||
if len(a) != len(b) {
|
||||
return false
|
||||
}
|
||||
for i := range a {
|
||||
if !bytes.Equal(a[i][:], b[i][:]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func TestMarshalUnmarshalSubPeerState(t *testing.T) {
|
||||
ids := generateTestPeerIDs(testPeerCount)
|
||||
|
||||
msgs, err := MarshalSubPeerStateMsg(ids)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
var allIDs []PeerID
|
||||
for _, msg := range msgs {
|
||||
decoded, err := UnmarshalSubPeerStateMsg(msg)
|
||||
if err != nil {
|
||||
t.Fatalf("unmarshal failed: %v", err)
|
||||
}
|
||||
allIDs = append(allIDs, decoded...)
|
||||
}
|
||||
|
||||
if !peerIDEqual(ids, allIDs) {
|
||||
t.Errorf("expected %v, got %v", ids, allIDs)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarshalSubPeerState_EmptyInput(t *testing.T) {
|
||||
_, err := MarshalSubPeerStateMsg([]PeerID{})
|
||||
if err == nil {
|
||||
t.Errorf("expected error for empty input")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnmarshalSubPeerState_Invalid(t *testing.T) {
|
||||
// Too short
|
||||
_, err := UnmarshalSubPeerStateMsg([]byte{1})
|
||||
if err == nil {
|
||||
t.Errorf("expected error for short input")
|
||||
}
|
||||
|
||||
// Misaligned length
|
||||
buf := make([]byte, sizeOfProtoHeader+1)
|
||||
_, err = UnmarshalSubPeerStateMsg(buf)
|
||||
if err == nil {
|
||||
t.Errorf("expected error for misaligned input")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarshalUnmarshalPeersOnline(t *testing.T) {
|
||||
ids := generateTestPeerIDs(testPeerCount)
|
||||
|
||||
msgs, err := MarshalPeersOnline(ids)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
var allIDs []PeerID
|
||||
for _, msg := range msgs {
|
||||
decoded, err := UnmarshalPeersOnlineMsg(msg)
|
||||
if err != nil {
|
||||
t.Fatalf("unmarshal failed: %v", err)
|
||||
}
|
||||
allIDs = append(allIDs, decoded...)
|
||||
}
|
||||
|
||||
if !peerIDEqual(ids, allIDs) {
|
||||
t.Errorf("expected %v, got %v", ids, allIDs)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarshalPeersOnline_EmptyInput(t *testing.T) {
|
||||
_, err := MarshalPeersOnline([]PeerID{})
|
||||
if err == nil {
|
||||
t.Errorf("expected error for empty input")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnmarshalPeersOnline_Invalid(t *testing.T) {
|
||||
_, err := UnmarshalPeersOnlineMsg([]byte{1})
|
||||
if err == nil {
|
||||
t.Errorf("expected error for short input")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarshalUnmarshalPeersWentOffline(t *testing.T) {
|
||||
ids := generateTestPeerIDs(testPeerCount)
|
||||
|
||||
msgs, err := MarshalPeersWentOffline(ids)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
var allIDs []PeerID
|
||||
for _, msg := range msgs {
|
||||
// MarshalPeersWentOffline shares no unmarshal function, so reuse PeersOnline
|
||||
decoded, err := UnmarshalPeersOnlineMsg(msg)
|
||||
if err != nil {
|
||||
t.Fatalf("unmarshal failed: %v", err)
|
||||
}
|
||||
allIDs = append(allIDs, decoded...)
|
||||
}
|
||||
|
||||
if !peerIDEqual(ids, allIDs) {
|
||||
t.Errorf("expected %v, got %v", ids, allIDs)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarshalPeersWentOffline_EmptyInput(t *testing.T) {
|
||||
_, err := MarshalPeersWentOffline([]PeerID{})
|
||||
if err == nil {
|
||||
t.Errorf("expected error for empty input")
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user