add metar request/response to protocol

This commit is contained in:
Reese Norris
2024-04-09 15:14:09 -07:00
parent 2861947057
commit ed3eee721f
4 changed files with 293 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
package protocol
import (
"github.com/go-playground/validator/v10"
"github.com/stretchr/testify/assert"
"strings"
"testing"
)
func TestParseMetarResponsePDU(t *testing.T) {
V = validator.New(validator.WithRequiredStructEnabled())
tests := []struct {
name string
packet string
want *MetarResponsePDU
wantErr error
}{
{
"Valid - Standard Metar",
"$ARSERVER:CLIENT:KSEE 091847Z 25007KT 10SM SKC 24/04 A3006\r\n",
&MetarResponsePDU{
From: "SERVER",
To: "CLIENT",
Metar: "KSEE 091847Z 25007KT 10SM SKC 24/04 A3006",
},
nil,
},
{
"Valid - colons in metar",
"$ARSERVER:CLIENT:KSEE 091847Z::: 25007KT 10::SM SKC 24/:04 A3006\r\n",
&MetarResponsePDU{
From: "SERVER",
To: "CLIENT",
Metar: "KSEE 091847Z::: 25007KT 10::SM SKC 24/:04 A3006",
},
nil,
},
{
"Missing To field",
"$ARSERVER::KSEE 091847Z 25007KT 10SM SKC 24/04 A3006\r\n",
nil,
NewGenericFSDError(SyntaxError),
},
{
"From Field too long",
"$ARSERVERTOLONG:CLIENT:KSEE 091847Z 25007KT 10SM SKC 24/04 A3006\r\n",
nil,
NewGenericFSDError(SyntaxError),
},
{
"Metar too long",
"$ARSERVER:CLIENT:" + strings.Repeat("A", 257) + "\r\n",
nil,
NewGenericFSDError(SyntaxError),
},
{
"Incomplete packet format",
"$ARSERVER:CLIENT\r\n",
nil,
NewGenericFSDError(SyntaxError),
},
{
"Empty metar field",
"$ARSERVER:CLIENT:\r\n",
nil,
NewGenericFSDError(SyntaxError),
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
// Perform the parsing
result, err := ParseMetarResponsePDU(tc.packet)
// Check the error
if tc.wantErr != nil {
assert.EqualError(t, err, tc.wantErr.Error())
} else {
assert.NoError(t, err)
}
// Verify the result
assert.Equal(t, tc.want, result)
})
}
}
func TestMetarResponsePDU_Serialize(t *testing.T) {
tests := []struct {
name string
pdu MetarResponsePDU
want string
}{
{
"Standard Metar",
MetarResponsePDU{
From: "SERVER",
To: "CLIENT",
Metar: "KSEE 091847Z 25007KT 10SM SKC 24/04 A3006",
},
"$ARSERVER:CLIENT:KSEE 091847Z 25007KT 10SM SKC 24/04 A3006\r\n",
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
// Perform the serialization
got := tc.pdu.Serialize()
// Verify the result
assert.Equal(t, tc.want, got)
})
}
}