Files
openfsd/protocol/ping_test.go
Reese Norris 05ed593a4b initial commit
2024-04-04 19:40:43 -07:00

92 lines
1.8 KiB
Go

package protocol
import (
"github.com/go-playground/validator/v10"
"github.com/stretchr/testify/assert"
"testing"
)
func TestPingPDU_Serialize(t *testing.T) {
tests := []struct {
name string
pdu PingPDU
expected string
}{
{
name: "Valid PingPDU",
pdu: PingPDU{
From: "SOURCE",
To: "TARGET",
Timestamp: "1609459200",
},
expected: "$PISOURCE:TARGET:1609459200\r\n",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, tt.expected, tt.pdu.Serialize())
})
}
}
func TestParsePingPDU(t *testing.T) {
V = validator.New(validator.WithRequiredStructEnabled())
tests := []struct {
name string
packet string
want *PingPDU
wantErr error
}{
{
name: "Valid PingPDU Parse",
packet: "$PISOURCE:TARGET:1609459200\r\n",
want: &PingPDU{
From: "SOURCE",
To: "TARGET",
Timestamp: "1609459200",
},
wantErr: nil,
},
{
name: "Missing fields",
packet: "$PISOURCE:1609459200\r\n",
want: nil,
wantErr: NewGenericFSDError(SyntaxError),
},
{
name: "Exceeds max field length",
packet: "$PISOURCESOURCE:TARGETTARGET:16094592000000000000000000000000\r\n",
want: nil,
wantErr: NewGenericFSDError(SyntaxError),
},
{
name: "Invalid From field",
packet: "$PI12345678:TARGET:1609459200\r\n",
want: nil,
wantErr: NewGenericFSDError(SyntaxError),
},
{
name: "Invalid To field",
packet: "$PISOURCE:12345678:1609459200\r\n",
want: nil,
wantErr: NewGenericFSDError(SyntaxError),
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
result, err := ParsePingPDU(tc.packet)
if tc.wantErr != nil {
assert.EqualError(t, err, tc.wantErr.Error())
} else {
assert.NoError(t, err)
}
assert.Equal(t, tc.want, result)
})
}
}