Skip to content

Commit

Permalink
[ECO-5193][TM*] Added unit tests to MessageTest
Browse files Browse the repository at this point in the history
1. Added serializer test for fields refSerial, refType and Operation
2. Added deserializer test for fields refSerial, refType and Operation
3. Added msgpack unit test for Message class
  • Loading branch information
sacOO7 committed Jan 17, 2025
1 parent be9a613 commit e8fe70b
Showing 1 changed file with 119 additions and 0 deletions.
119 changes: 119 additions & 0 deletions lib/src/test/java/io/ably/lib/types/MessageTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,13 @@
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import io.ably.lib.types.Message.Serializer;
import io.ably.lib.util.Serialisation;
import org.junit.Test;
import org.msgpack.core.MessagePacker;
import org.msgpack.core.MessageUnpacker;

import java.io.ByteArrayOutputStream;
import java.util.HashMap;

public class MessageTest {

Expand Down Expand Up @@ -90,6 +96,75 @@ public void deserialize_message_with_serial() throws Exception {
assertEquals("01826232498871-001@abcdefghij:001", message.serial);
}

@Test
public void serialize_message_with_operation() {
// Given
Message message = new Message("test-name", "test-data");
message.clientId = "test-client-id";
message.connectionKey = "test-key";
message.refSerial = "test-ref-serial";
message.refType = "test-ref-type";
Message.Operation operation = new Message.Operation();
operation.clientId = "operation-client-id";
operation.description = "operation-description";
operation.metadata = new HashMap<>();
operation.metadata.put("key1", "value1");
operation.metadata.put("key2", "value2");
message.operation = operation;

// When
JsonElement serializedElement = serializer.serialize(message, null, null);

// Then
JsonObject serializedObject = serializedElement.getAsJsonObject();
assertEquals("test-client-id", serializedObject.get("clientId").getAsString());
assertEquals("test-key", serializedObject.get("connectionKey").getAsString());
assertEquals("test-data", serializedObject.get("data").getAsString());
assertEquals("test-name", serializedObject.get("name").getAsString());
assertEquals("test-ref-serial", serializedObject.get("refSerial").getAsString());
assertEquals("test-ref-type", serializedObject.get("refType").getAsString());
JsonObject operationObject = serializedObject.getAsJsonObject("operation");
assertEquals("operation-client-id", operationObject.get("clientId").getAsString());
assertEquals("operation-description", operationObject.get("description").getAsString());
JsonObject metadataObject = operationObject.getAsJsonObject("metadata");
assertEquals("value1", metadataObject.get("key1").getAsString());
assertEquals("value2", metadataObject.get("key2").getAsString());
}

@Test
public void deserialize_message_with_operation() throws Exception {
// Given
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("clientId", "test-client-id");
jsonObject.addProperty("data", "test-data");
jsonObject.addProperty("name", "test-name");
jsonObject.addProperty("refSerial", "test-ref-serial");
jsonObject.addProperty("refType", "test-ref-type");
jsonObject.addProperty("connectionKey", "test-key");
JsonObject operationObject = new JsonObject();
operationObject.addProperty("clientId", "operation-client-id");
operationObject.addProperty("description", "operation-description");
JsonObject metadataObject = new JsonObject();
metadataObject.addProperty("key1", "value1");
metadataObject.addProperty("key2", "value2");
operationObject.add("metadata", metadataObject);
jsonObject.add("operation", operationObject);

// When
Message message = Message.fromEncoded(jsonObject, new ChannelOptions());

// Then
assertEquals("test-client-id", message.clientId);
assertEquals("test-data", message.data);
assertEquals("test-name", message.name);
assertEquals("test-ref-serial", message.refSerial);
assertEquals("test-ref-type", message.refType);
assertEquals("test-key", message.connectionKey);
assertEquals("operation-client-id", message.operation.clientId);
assertEquals("operation-description", message.operation.description);
assertEquals("value1", message.operation.metadata.get("key1"));
assertEquals("value2", message.operation.metadata.get("key2"));
}

@Test
public void deserialize_message_with_unknown_action() throws Exception {
Expand All @@ -111,4 +186,48 @@ public void deserialize_message_with_unknown_action() throws Exception {
assertNull(message.action);
assertEquals("01826232498871-001@abcdefghij:001", message.serial);
}

@Test
public void serialize_and_deserialize_with_msgpack() throws Exception {
// Given
Message message = new Message("test-name", "test-data");
message.clientId = "test-client-id";
message.connectionKey = "test-key";
message.refSerial = "test-ref-serial";
message.refType = "test-ref-type";
message.action = MessageAction.MESSAGE_CREATE;
message.serial = "01826232498871-001@abcdefghij:001";
Message.Operation operation = new Message.Operation();
operation.clientId = "operation-client-id";
operation.description = "operation-description";
operation.metadata = new HashMap<>();
operation.metadata.put("key1", "value1");
operation.metadata.put("key2", "value2");
message.operation = operation;

// When Encode to MessagePack
ByteArrayOutputStream out = new ByteArrayOutputStream();
MessagePacker packer = Serialisation.msgpackPackerConfig.newPacker(out);
message.writeMsgpack(packer);
packer.close();

// Decode from MessagePack
MessageUnpacker unpacker = Serialisation.msgpackUnpackerConfig.newUnpacker(out.toByteArray());
Message unpacked = Message.fromMsgpack(unpacker);
unpacker.close();

// Then
assertEquals("test-client-id", unpacked.clientId);
assertEquals("test-key", unpacked.connectionKey);
assertEquals("test-data", unpacked.data);
assertEquals("test-name", unpacked.name);
assertEquals("test-ref-serial", unpacked.refSerial);
assertEquals("test-ref-type", unpacked.refType);
assertEquals(MessageAction.MESSAGE_CREATE, unpacked.action);
assertEquals("01826232498871-001@abcdefghij:001", unpacked.serial);
assertEquals("operation-client-id", unpacked.operation.clientId);
assertEquals("operation-description", unpacked.operation.description);
assertEquals("value1", unpacked.operation.metadata.get("key1"));
assertEquals("value2", unpacked.operation.metadata.get("key2"));
}
}

0 comments on commit e8fe70b

Please sign in to comment.