From e5f8f17b4d91934206562232564b4a868e8df644 Mon Sep 17 00:00:00 2001 From: Muzzammil Shahid Date: Fri, 7 Jun 2024 19:14:12 +0500 Subject: [PATCH] Add interop tests for call message --- pubspec.yaml | 1 + test/interoptests/auth_test.dart | 9 +--- test/interoptests/helper.dart | 10 +++++ test/interoptests/messages_test.dart | 64 ++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 test/interoptests/helper.dart create mode 100644 test/interoptests/messages_test.dart diff --git a/pubspec.yaml b/pubspec.yaml index 0844572..92e53e2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -9,6 +9,7 @@ environment: # Add regular dependencies here. dependencies: cbor: ^6.2.0 + collection: ^1.18.0 crypto: ^3.0.3 msgpack_dart: ^1.0.1 pinenacl: ^0.5.1 diff --git a/test/interoptests/auth_test.dart b/test/interoptests/auth_test.dart index 5451dc1..3b8b213 100644 --- a/test/interoptests/auth_test.dart +++ b/test/interoptests/auth_test.dart @@ -1,16 +1,9 @@ -import "dart:io"; - import "package:pinenacl/ed25519.dart"; import "package:test/test.dart"; import "package:wampproto/src/auth/cryptosign.dart"; -Future runCommand(String command) async { - ProcessResult result = await Process.run("wampproto", command.split(" ")); - expect(result.exitCode, 0, reason: result.stderr); - - return result.stdout; -} +import "helper.dart"; void main() { group("CryptoSignAuth", () { diff --git a/test/interoptests/helper.dart b/test/interoptests/helper.dart new file mode 100644 index 0000000..6bca84e --- /dev/null +++ b/test/interoptests/helper.dart @@ -0,0 +1,10 @@ +import "dart:io"; + +import "package:test/test.dart"; + +Future runCommand(String command) async { + ProcessResult result = await Process.run("wampproto", command.split(" ")); + expect(result.exitCode, 0, reason: result.stderr); + + return result.stdout; +} diff --git a/test/interoptests/messages_test.dart b/test/interoptests/messages_test.dart new file mode 100644 index 0000000..f2aa376 --- /dev/null +++ b/test/interoptests/messages_test.dart @@ -0,0 +1,64 @@ +import "dart:convert"; + +import "package:collection/collection.dart"; +import "package:pinenacl/api.dart"; +import "package:test/test.dart"; + +import "package:wampproto/messages.dart"; +import "package:wampproto/serializers.dart"; + +import "helper.dart"; + +void main() { + group("Messages", () { + const equality = DeepCollectionEquality(); + const testProcedure = "io.xconn.test"; + + var jsonSerializer = JSONSerializer(); + var cborSerializer = CBORSerializer(); + var msgPackSerializer = MsgPackSerializer(); + + group("Call", () { + bool isEqual(Call msg1, Call msg2) => + msg1.requestID == msg2.requestID && + msg1.uri == msg2.uri && + equality.equals(msg1.options, msg2.options) && + equality.equals(msg1.args, msg2.args) && + equality.equals(msg1.kwargs, msg2.kwargs); + + test("JSONSerializer", () async { + var callMessage = Call(CallFields(1, testProcedure)); + var command = "message call ${callMessage.requestID} ${callMessage.uri} --serializer json"; + + var output = await runCommand(command); + var outputBytes = Base16Encoder.instance.decode(output.trim()); + var jsonString = utf8.decode(outputBytes); + + var message = jsonSerializer.deserialize(jsonString) as Call; + expect(isEqual(message, callMessage), true); + }); + + test("CBORSerializer", () async { + var callMessage = Call(CallFields(1, testProcedure, args: ["abc"])); + var command = "message call ${callMessage.requestID} ${callMessage.uri} abc --serializer cbor"; + + var output = await runCommand(command); + var outputBytes = Base16Encoder.instance.decode(output.trim()); + + var message = cborSerializer.deserialize(outputBytes) as Call; + expect(isEqual(message, callMessage), true); + }); + + test("MsgPackSerializer", () async { + var callMessage = Call(CallFields(1, testProcedure, args: ["abc"], kwargs: {"a": 1})); + var command = "message call ${callMessage.requestID} ${callMessage.uri} abc -k a=1 --serializer msgpack"; + + var output = await runCommand(command); + var outputBytes = Base16Encoder.instance.decode(output.trim()); + + var message = msgPackSerializer.deserialize(outputBytes) as Call; + expect(isEqual(message, callMessage), true); + }); + }); + }); +}