From ea157566a5503b1f62e9d4ad459e7f8033b45991 Mon Sep 17 00:00:00 2001 From: Muzzammil Shahid Date: Wed, 10 Jul 2024 19:05:39 +0500 Subject: [PATCH] Add interop tests for Call message --- tests/helpers.go | 19 +++++++++++ tests/interop/messages/call_test.go | 50 +++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 tests/interop/messages/call_test.go diff --git a/tests/helpers.go b/tests/helpers.go index f93a671..09cb2bf 100644 --- a/tests/helpers.go +++ b/tests/helpers.go @@ -2,9 +2,16 @@ package tests import ( "bytes" + "encoding/hex" "fmt" "os/exec" "strings" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/xconnio/wampproto-go/messages" + "github.com/xconnio/wampproto-go/serializers" ) func RunCommand(command string) (string, error) { @@ -23,3 +30,15 @@ func RunCommand(command string) (string, error) { return output, nil } + +func RunCommandAndDeserialize(t *testing.T, command string, serializer serializers.Serializer) messages.Message { + output, err := RunCommand(command) + require.NoError(t, err) + outputBytes, err := hex.DecodeString(output) + require.NoError(t, err) + + msg, err := serializer.Deserialize(outputBytes) + require.NoError(t, err) + + return msg +} diff --git a/tests/interop/messages/call_test.go b/tests/interop/messages/call_test.go new file mode 100644 index 0000000..f2ba8fa --- /dev/null +++ b/tests/interop/messages/call_test.go @@ -0,0 +1,50 @@ +package messages_test + +import ( + "fmt" + "reflect" + "testing" + + "github.com/stretchr/testify/require" + "github.com/xconnio/wampproto-go/serializers" + + "github.com/xconnio/wampproto-go/messages" + "github.com/xconnio/wampproto-go/tests" +) + +func callsEqual(msg1 *messages.Call, msg2 *messages.Call) bool { + return msg1.RequestID() == msg2.RequestID() && + msg1.Procedure() == msg2.Procedure() && + reflect.DeepEqual(msg1.Options(), msg2.Options()) && + reflect.DeepEqual(msg1.Args(), msg2.Args()) && + reflect.DeepEqual(msg1.KwArgs(), msg2.KwArgs()) +} + +func TestCallJSONSerializer(t *testing.T) { + var message = messages.NewCall(1, map[string]any{}, "test", nil, nil) + command := fmt.Sprintf("message call %v %s --serializer json --output hex", message.RequestID(), message.Procedure()) + var serializer = &serializers.JSONSerializer{} + + msg := tests.RunCommandAndDeserialize(t, command, serializer) + require.True(t, callsEqual(message, msg.(*messages.Call))) +} + +func TestCallCBORSerializer(t *testing.T) { + var message = messages.NewCall(1, map[string]any{}, "test", []any{"abc"}, map[string]any{"abc": "xyz"}) + command := fmt.Sprintf("message call %v %s abc -k abc=xyz --serializer cbor --output hex", + message.RequestID(), message.Procedure()) + var serializer = &serializers.CBORSerializer{} + + msg := tests.RunCommandAndDeserialize(t, command, serializer) + require.True(t, callsEqual(message, msg.(*messages.Call))) +} + +func TestCallMsgPackSerializer(t *testing.T) { + var message = messages.NewCall(1, map[string]any{}, "test", []any{"abc"}, map[string]any{"abc": "xyz"}) + command := fmt.Sprintf("message call %v %s abc -k abc=xyz --serializer msgpack --output hex", + message.RequestID(), message.Procedure()) + var serializer = &serializers.MsgPackSerializer{} + + msg := tests.RunCommandAndDeserialize(t, command, serializer) + require.True(t, callsEqual(message, msg.(*messages.Call))) +}