Skip to content

Commit b68d962

Browse files
committed
[ECO-5386] Updated unit tests for ObjectMesssage serialization
1. Updated test for testOmitNullsInObjectMessageSerialization 2. Added test HandleNullsInObjectMessageDeserialization
1 parent 7e4f5d6 commit b68d962

12 files changed

Lines changed: 405 additions & 237 deletions

File tree

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ turbine = "1.2.0"
2626
ktor = "3.1.3"
2727
jetbrains-annoations = "26.0.2"
2828
jackson-msgpack = "0.8.11" # Compatible with msgpack-core 0.8.11
29-
jackson-param = "2.18.0" # Compatible with jackson-msgpack
29+
jackson-param = "2.19.1" # Compatible with jackson-msgpack
3030

3131
[libraries]
3232
gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }

lib/src/main/java/io/ably/lib/objects/LiveObjectsHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public static LiveObjectsPlugin tryInitializeLiveObjectsPlugin(AblyRealtime ably
2727
public static LiveObjectSerializer getLiveObjectSerializer() {
2828
if (liveObjectSerializer == null) {
2929
try {
30-
Class<?> serializerClass = Class.forName("io.ably.lib.objects.DefaultLiveObjectSerializer");
30+
Class<?> serializerClass = Class.forName("io.ably.lib.objects.serialization.DefaultLiveObjectSerializer");
3131
liveObjectSerializer = (LiveObjectSerializer) serializerClass.getDeclaredConstructor().newInstance();
3232
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException |
3333
InvocationTargetException e) {

lib/src/main/java/io/ably/lib/types/ProtocolSerializer.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class ProtocolSerializer {
1414
/****************************************
1515
* Msgpack decode
1616
****************************************/
17-
17+
1818
public static ProtocolMessage readMsgpack(byte[] packed) throws AblyException {
1919
try {
2020
MessageUnpacker unpacker = Serialisation.msgpackUnpackerConfig.newUnpacker(packed);
@@ -27,30 +27,31 @@ public static ProtocolMessage readMsgpack(byte[] packed) throws AblyException {
2727
/****************************************
2828
* Msgpack encode
2929
****************************************/
30-
31-
public static byte[] writeMsgpack(ProtocolMessage message) {
30+
31+
public static byte[] writeMsgpack(ProtocolMessage message) throws AblyException {
3232
ByteArrayOutputStream out = new ByteArrayOutputStream();
3333
MessagePacker packer = Serialisation.msgpackPackerConfig.newPacker(out);
3434
try {
3535
message.writeMsgpack(packer);
36-
3736
packer.flush();
3837
return out.toByteArray();
39-
} catch(IOException e) { return null; }
38+
} catch (IOException ioe) {
39+
throw AblyException.fromThrowable(ioe);
40+
}
4041
}
4142

4243
/****************************************
4344
* JSON decode
4445
****************************************/
45-
46+
4647
public static ProtocolMessage fromJSON(String packed) throws AblyException {
4748
return Serialisation.gson.fromJson(packed, ProtocolMessage.class);
4849
}
4950

5051
/****************************************
5152
* JSON encode
5253
****************************************/
53-
54+
5455
public static byte[] writeJSON(ProtocolMessage message) throws AblyException {
5556
return Serialisation.gson.toJson(message).getBytes(Charset.forName("UTF-8"));
5657
}

live-objects/src/main/kotlin/io/ably/lib/objects/Helpers.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,18 @@ internal enum class ProtocolMessageFormat(private val value: String) {
3939
override fun toString(): String = value
4040
}
4141

42-
internal class Binary(val data: ByteArray?) {
42+
internal class Binary(val data: ByteArray) {
4343
override fun equals(other: Any?): Boolean {
4444
if (this === other) return true
4545
if (other !is Binary) return false
46-
return data?.contentEquals(other.data) == true
46+
return data.contentEquals(other.data)
4747
}
4848

4949
override fun hashCode(): Int {
50-
return data?.contentHashCode() ?: 0
50+
return data.contentHashCode()
5151
}
5252
}
5353

5454
internal fun Binary.size(): Int {
55-
return data?.size ?: 0
55+
return data.size
5656
}

live-objects/src/main/kotlin/io/ably/lib/objects/ObjectMessage.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize
88
import com.fasterxml.jackson.databind.annotation.JsonSerialize
99
import com.google.gson.annotations.JsonAdapter
1010
import com.google.gson.annotations.SerializedName
11+
import io.ably.lib.objects.serialization.*
12+
import io.ably.lib.objects.serialization.InitialValueJsonSerializer
13+
import io.ably.lib.objects.serialization.InitialValueMsgpackDeserializer
14+
import io.ably.lib.objects.serialization.InitialValueMsgpackSerializer
15+
import io.ably.lib.objects.serialization.ObjectDataJsonSerializer
16+
import io.ably.lib.objects.serialization.ObjectDataMsgpackDeserializer
17+
import io.ably.lib.objects.serialization.ObjectDataMsgpackSerializer
18+
import io.ably.lib.objects.serialization.gson
1119

1220
/**
1321
* An enum class representing the different actions that can be performed on an object.
@@ -319,7 +327,9 @@ internal data class ObjectMessage(
319327
* or validation of the @extras@ field itself, but should treat it opaquely, encoding it and passing it to realtime unaltered
320328
* Spec: OM2d
321329
*/
322-
val extras: Any? = null,
330+
@JsonSerialize(using = JsonObjectMsgpackSerializer::class)
331+
@JsonDeserialize(using = JsonObjectMsgpackDeserializer::class)
332+
val extras: JsonObject? = null,
323333

324334
/**
325335
* Describes an operation to be applied to an object.

live-objects/src/main/kotlin/io/ably/lib/objects/Serialization.kt

Lines changed: 0 additions & 204 deletions
This file was deleted.

0 commit comments

Comments
 (0)