diff --git a/sdk/pom.xml b/sdk/pom.xml
index 82ba03f4c..4691cb7bb 100644
--- a/sdk/pom.xml
+++ b/sdk/pom.xml
@@ -39,7 +39,7 @@
com.fasterxml.jackson.core
jackson-databind
- 2.13.4.1
+ 2.15.1
io.projectreactor
@@ -64,7 +64,7 @@
com.fasterxml.jackson.dataformat
jackson-dataformat-xml
- 2.11.3
+ 2.15.1
test
diff --git a/sdk/src/main/java/io/dapr/client/domain/CloudEvent.java b/sdk/src/main/java/io/dapr/client/domain/CloudEvent.java
index 040aa9eb3..18d3465c1 100644
--- a/sdk/src/main/java/io/dapr/client/domain/CloudEvent.java
+++ b/sdk/src/main/java/io/dapr/client/domain/CloudEvent.java
@@ -15,10 +15,20 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.io.IOException;
+import java.time.OffsetDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Objects;
@@ -76,6 +86,43 @@ public class CloudEvent {
@JsonProperty("data_base64")
private byte[] binaryData;
+ /**
+ * The pubsub component this CloudEvent came from.
+ */
+ @JsonProperty("pubsubname")
+ private String pubsubName;
+
+ /**
+ * The topic this CloudEvent came from.
+ */
+ private String topic;
+
+ /**
+ * The time this CloudEvent was created.
+ */
+ @JsonSerialize(using = OffsetDateTimeSerializer.class)
+ @JsonDeserialize(using = OffsetDateTimeDeserializer.class)
+ private OffsetDateTime time;
+
+ /**
+ * The trace id is the legacy name for trace parent.
+ */
+ @Deprecated
+ @JsonProperty("traceid")
+ private String traceId;
+
+ /**
+ * The trace parent.
+ */
+ @JsonProperty("traceparent")
+ private String traceParent;
+
+ /**
+ * The trace state.
+ */
+ @JsonProperty("tracestate")
+ private String traceState;
+
/**
* Instantiates a CloudEvent.
*/
@@ -125,9 +172,9 @@ public CloudEvent(
this.type = type;
this.specversion = specversion;
this.datacontenttype = "application/octet-stream";
- this.binaryData = binaryData == null ? null : Arrays.copyOf(binaryData, binaryData.length);;
+ this.binaryData = binaryData == null ? null : Arrays.copyOf(binaryData, binaryData.length);
}
-
+
/**
* Deserialize a message topic from Dapr.
*
@@ -255,6 +302,104 @@ public void setBinaryData(byte[] binaryData) {
this.binaryData = binaryData == null ? null : Arrays.copyOf(binaryData, binaryData.length);
}
+ /**
+ * Gets the pubsub component name.
+ * @return the pubsub component name.
+ */
+ public String getPubsubName() {
+ return pubsubName;
+ }
+
+ /**
+ * Sets the pubsub component name.
+ * @param pubsubName the pubsub component name.
+ */
+ public void setPubsubName(String pubsubName) {
+ this.pubsubName = pubsubName;
+ }
+
+ /**
+ * Gets the topic name.
+ * @return the topic name.
+ */
+ public String getTopic() {
+ return topic;
+ }
+
+ /**
+ * Sets the topic name.
+ * @param topic the topic name.
+ */
+ public void setTopic(String topic) {
+ this.topic = topic;
+ }
+
+ /**
+ * Gets the time.
+ * @return the time.
+ */
+ public OffsetDateTime getTime() {
+ return time;
+ }
+
+ /**
+ * Sets the time.
+ * @param time the time.
+ */
+ public void setTime(OffsetDateTime time) {
+ this.time = time;
+ }
+
+ /**
+ * Gets the trace id which is the legacy name for trace parent.
+ * @return the trace id.
+ */
+ @Deprecated
+ public String getTraceId() {
+ return traceId;
+ }
+
+ /**
+ * Sets the trace id which is the legacy name for trace parent.
+ * @param traceId the trace id.
+ */
+ @Deprecated
+ public void setTraceId(String traceId) {
+ this.traceId = traceId;
+ }
+
+ /**
+ * Gets the trace parent.
+ * @return the trace parent.
+ */
+ public String getTraceParent() {
+ return traceParent;
+ }
+
+ /**
+ * Sets the trace parent.
+ * @param traceParent the trace parent.
+ */
+ public void setTraceParent(String traceParent) {
+ this.traceParent = traceParent;
+ }
+
+ /**
+ * Gets the trace state.
+ * @return the trace state.
+ */
+ public String getTraceState() {
+ return traceState;
+ }
+
+ /**
+ * Sets the trace state.
+ * @param traceState the trace state.
+ */
+ public void setTraceState(String traceState) {
+ this.traceState = traceState;
+ }
+
/**
* {@inheritDoc}
*/
@@ -273,7 +418,13 @@ public boolean equals(Object o) {
&& Objects.equals(specversion, that.specversion)
&& Objects.equals(datacontenttype, that.datacontenttype)
&& Objects.equals(data, that.data)
- && Arrays.equals(binaryData, that.binaryData);
+ && Arrays.equals(binaryData, that.binaryData)
+ && Objects.equals(pubsubName, that.pubsubName)
+ && Objects.equals(topic, that.topic)
+ && ((time == null && that.time == null) || (time != null && that.time != null && time.isEqual(that.time)))
+ && Objects.equals(traceId, that.traceId)
+ && Objects.equals(traceParent, that.traceParent)
+ && Objects.equals(traceState, that.traceState);
}
/**
@@ -281,6 +432,23 @@ public boolean equals(Object o) {
*/
@Override
public int hashCode() {
- return Objects.hash(id, source, type, specversion, datacontenttype, data, binaryData);
+ return Objects.hash(id, source, type, specversion, datacontenttype, data, binaryData, pubsubName, topic, time,
+ traceId, traceParent, traceState);
+ }
+
+ private static class OffsetDateTimeSerializer extends JsonSerializer {
+ @Override
+ public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator,
+ SerializerProvider serializerProvider) throws IOException {
+ jsonGenerator.writeString(offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
+ }
+ }
+
+ private static class OffsetDateTimeDeserializer extends JsonDeserializer {
+ @Override
+ public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
+ throws IOException {
+ return OffsetDateTime.parse(jsonParser.getText());
+ }
}
}
diff --git a/sdk/src/test/java/io/dapr/client/CloudEventTest.java b/sdk/src/test/java/io/dapr/client/CloudEventTest.java
index fac624dab..bf893d712 100644
--- a/sdk/src/test/java/io/dapr/client/CloudEventTest.java
+++ b/sdk/src/test/java/io/dapr/client/CloudEventTest.java
@@ -13,12 +13,18 @@
package io.dapr.client;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.dapr.client.domain.CloudEvent;
import org.junit.jupiter.api.Test;
+import java.time.OffsetDateTime;
+import java.util.Objects;
+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
public class CloudEventTest {
@@ -28,6 +34,24 @@ public class CloudEventTest {
public static class MyClass {
public int id;
public String name;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ MyClass myClass = (MyClass) o;
+
+ if (id != myClass.id) return false;
+ return Objects.equals(name, myClass.name);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = id;
+ result = 31 * result + (name != null ? name.hashCode() : 0);
+ return result;
+ }
}
@Test
@@ -42,7 +66,12 @@ public void deserializeObjectClass() throws Exception {
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"application/json\",\n" +
- " \"data\" : {\"id\": 1, \"name\": \"hello world\"}\n" +
+ " \"data\" : {\"id\": 1, \"name\": \"hello world\"},\n" +
+ " \"pubsubname\" : \"mypubsubname\",\n" +
+ " \"topic\" : \"mytopic\",\n" +
+ " \"traceid\" : \"Z987-0987-0987\",\n" +
+ " \"traceparent\" : \"Z987-0987-0987\",\n" +
+ " \"tracestate\" : \"\"\n" +
"}";
MyClass expected = new MyClass() {{
@@ -51,7 +80,17 @@ public void deserializeObjectClass() throws Exception {
}};
CloudEvent cloudEvent = CloudEvent.deserialize(content.getBytes());
+ assertEquals("1.0", cloudEvent.getSpecversion());
+ assertEquals("com.github.pull_request.opened", cloudEvent.getType());
+ assertEquals("https://github.com/cloudevents/spec/pull", cloudEvent.getSource());
+ assertEquals("A234-1234-1234", cloudEvent.getId());
+ assertEquals(OffsetDateTime.parse("2018-04-05T17:31:00Z"), cloudEvent.getTime());
assertEquals("application/json", cloudEvent.getDatacontenttype());
+ assertEquals("mypubsubname", cloudEvent.getPubsubName());
+ assertEquals("mytopic", cloudEvent.getTopic());
+ assertEquals("Z987-0987-0987", cloudEvent.getTraceId());
+ assertEquals("Z987-0987-0987", cloudEvent.getTraceParent());
+ assertEquals("", cloudEvent.getTraceState());
MyClass myObject = OBJECT_MAPPER.convertValue(cloudEvent.getData(), MyClass.class);
assertEquals(expected.id, myObject.id);
assertEquals(expected.name, myObject.name);
@@ -179,4 +218,103 @@ public void deserializeBinaryData() throws Exception {
assertNull(cloudEvent.getData());
assertArrayEquals(expected, cloudEvent.getBinaryData());
}
+
+ @Test
+ public void serializeObjectClass() throws Exception {
+ CloudEvent cloudEvent = new CloudEvent<>();
+ MyClass myClass = new MyClass();
+ myClass.id = 1;
+ myClass.name = "Hello World";
+ cloudEvent.setData(myClass);
+ OffsetDateTime now = OffsetDateTime.now();
+ cloudEvent.setTime(now);
+
+ String cloudEventAsString = OBJECT_MAPPER.writeValueAsString(cloudEvent);
+ CloudEvent cloudEventDeserialized = OBJECT_MAPPER.readValue(cloudEventAsString,
+ new TypeReference>() {});
+ assertEquals(cloudEvent, cloudEventDeserialized);
+ assertEquals(now, cloudEventDeserialized.getTime());
+ MyClass myClassDeserialized = cloudEventDeserialized.getData();
+ assertEquals(myClass.id, myClassDeserialized.id);
+ assertEquals(myClass.name, myClassDeserialized.name);
+ }
+
+ @Test
+ public void equalsCodecovTest() {
+ CloudEvent> cloudEvent = new CloudEvent<>();
+ assertFalse(cloudEvent.equals(null));
+ assertFalse(cloudEvent.equals(""));
+
+ CloudEvent> cloudEventCopy = cloudEvent;
+ assertEquals(cloudEvent, cloudEventCopy);
+
+ CloudEvent cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setId("id");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setSource("source");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setType("type");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setSpecversion("specversion");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setDatacontenttype("datacontenttype");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setData("data");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setBinaryData("binaryData".getBytes());
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setPubsubName("pubsubName");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setTopic("topic");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ OffsetDateTime now = OffsetDateTime.now();
+ cloudEventDifferent = new CloudEvent<>();
+ // cloudEvent null time, cloudEventDifferent now time
+ cloudEventDifferent.setTime(now);
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+ // cloudEvent now time, cloudEventDifferent now time
+ cloudEvent.setTime(now);
+ assertEquals(cloudEventCopy, cloudEventDifferent);
+ // cloudEvent now time, cloudEventDifferent now time + 1 nano
+ cloudEventDifferent.setTime(now.plusNanos(1L));
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+ // reset cloudEvent time
+ cloudEvent.setTime(null);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setTraceId("traceId");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setTraceParent("traceParent");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+
+ cloudEventDifferent = new CloudEvent<>();
+ cloudEventDifferent.setTraceState("traceState");
+ assertNotEquals(cloudEventCopy, cloudEventDifferent);
+ }
+
+ @Test
+ public void hashCodeCodecovTest() {
+ CloudEvent> cloudEvent = new CloudEvent<>();
+ final int EXPECTED_EMPTY_HASH_CODE = -505558625;
+ assertEquals(EXPECTED_EMPTY_HASH_CODE, cloudEvent.hashCode());
+ }
}
diff --git a/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java b/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java
index d540fb8ae..2807d55e3 100644
--- a/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java
+++ b/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java
@@ -13,8 +13,16 @@
package io.dapr.serializer;
+import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.protobuf.ByteString;
import com.google.protobuf.CodedOutputStream;
import com.google.protobuf.MessageLite;
@@ -28,6 +36,8 @@
import java.io.OutputStream;
import java.io.Serializable;
import java.lang.reflect.Type;
+import java.time.OffsetDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
@@ -57,6 +67,10 @@ public static class MyObjectTestToSerialize implements Serializable {
private float floatValue;
private double doubleValue;
+ @JsonSerialize(using = OffsetDateTimeSerializer.class)
+ @JsonDeserialize(using = OffsetDateTimeDeserializer.class)
+ private OffsetDateTime timeValue;
+
public String getStringValue() {
return stringValue;
}
@@ -129,6 +143,14 @@ public void setDoubleValue(double doubleValue) {
this.doubleValue = doubleValue;
}
+ public OffsetDateTime getTimeValue() {
+ return timeValue;
+ }
+
+ public void setTimeValue(OffsetDateTime timeValue) {
+ this.timeValue = timeValue;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -167,6 +189,9 @@ public boolean equals(Object o) {
if (getStringValue() != null ? !getStringValue().equals(that.getStringValue()) : that.getStringValue() != null) {
return false;
}
+ if (getTimeValue() != null ? !getTimeValue().isEqual(that.getTimeValue()) : that.getTimeValue() != null) {
+ return false;
+ }
return true;
}
@@ -185,6 +210,7 @@ public int hashCode() {
result = 31 * result + (getFloatValue() != +0.0f ? Float.floatToIntBits(getFloatValue()) : 0);
temp = Double.doubleToLongBits(getDoubleValue());
result = 31 * result + (int) (temp ^ (temp >>> 32));
+ result = 31 * result + getTimeValue().toInstant().hashCode();
return result;
}
@@ -200,8 +226,23 @@ public String toString() {
", longValue=" + longValue +
", floatValue=" + floatValue +
", doubleValue=" + doubleValue +
+ ", timeValue=" + timeValue +
'}';
}
+
+ private static class OffsetDateTimeSerializer extends JsonSerializer {
+ @Override
+ public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ jsonGenerator.writeString(offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
+ }
+ }
+
+ private static class OffsetDateTimeDeserializer extends JsonDeserializer {
+ @Override
+ public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ return OffsetDateTime.parse(jsonParser.getText());
+ }
+ }
}
@Test
@@ -216,7 +257,8 @@ public void serializeStringObjectTest() {
obj.setLongValue(9223372036854775807L);
obj.setFloatValue(1.0f);
obj.setDoubleValue(1000.0);
- String expectedResult = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ obj.setTimeValue(OffsetDateTime.MIN);
+ String expectedResult = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"-999999999-01-01T00:00:00+18:00\"}";
String serializedValue;
@@ -437,7 +479,7 @@ public void serializeFakeProtoTest() throws Exception {
@Test
public void deserializeObjectTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -448,6 +490,7 @@ public void deserializeObjectTest() {
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
@@ -460,7 +503,7 @@ public void deserializeObjectTest() {
@Test
public void deserializeArrayObjectTest() {
- String jsonToDeserialize = "[{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}]";
+ String jsonToDeserialize = "[{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}]";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -471,6 +514,7 @@ public void deserializeArrayObjectTest() {
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
List result;
try {
@@ -536,7 +580,7 @@ public void deserializeNullObjectOrPrimitiveTest() {
@Test
public void deserializeObjectMissingStringPropertyTest() {
- String jsonToDeserialize = "{\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setIntValue(2147483647);
expectedResult.setBoolValue(true);
@@ -546,11 +590,12 @@ public void deserializeObjectMissingStringPropertyTest() {
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
@@ -558,7 +603,7 @@ public void deserializeObjectMissingStringPropertyTest() {
@Test
public void deserializeObjectMissingIntTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setBoolValue(true);
@@ -568,11 +613,12 @@ public void deserializeObjectMissingIntTest() {
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
@@ -580,7 +626,7 @@ public void deserializeObjectMissingIntTest() {
@Test
public void deserializeObjectMissingBooleanTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -590,11 +636,12 @@ public void deserializeObjectMissingBooleanTest() {
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
@@ -602,7 +649,7 @@ public void deserializeObjectMissingBooleanTest() {
@Test
public void deserializeObjectMissingCharTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -612,11 +659,12 @@ public void deserializeObjectMissingCharTest() {
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
@@ -624,7 +672,7 @@ public void deserializeObjectMissingCharTest() {
@Test
public void deserializeObjectMissingByteTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -634,11 +682,12 @@ public void deserializeObjectMissingByteTest() {
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
@@ -646,7 +695,7 @@ public void deserializeObjectMissingByteTest() {
@Test
public void deserializeObjectMissingShortTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -656,11 +705,12 @@ public void deserializeObjectMissingShortTest() {
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
@@ -668,7 +718,7 @@ public void deserializeObjectMissingShortTest() {
@Test
public void deserializeObjectMissingLongTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -678,11 +728,12 @@ public void deserializeObjectMissingLongTest() {
expectedResult.setShortValue((short) 32767);
expectedResult.setFloatValue(1.0f);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
@@ -690,7 +741,7 @@ public void deserializeObjectMissingLongTest() {
@Test
public void deserializeObjectMissingFloatTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"doubleValue\":1000.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -700,11 +751,12 @@ public void deserializeObjectMissingFloatTest() {
expectedResult.setShortValue((short) 32767);
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setDoubleValue(1000.0);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
@@ -712,7 +764,7 @@ public void deserializeObjectMissingFloatTest() {
@Test
public void deserializeObjectMissingDoubleTest() {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0}";
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
expectedResult.setStringValue("A String");
expectedResult.setIntValue(2147483647);
@@ -722,39 +774,70 @@ public void deserializeObjectMissingDoubleTest() {
expectedResult.setShortValue((short) 32767);
expectedResult.setLongValue(9223372036854775807L);
expectedResult.setFloatValue(1.0f);
+ expectedResult.setTimeValue(OffsetDateTime.MAX);
MyObjectTestToSerialize result;
try {
result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
- assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECING: [[" + expectedResult + "]]");
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
+ } catch (IOException exception) {
+ fail(exception.getMessage());
+ }
+ }
+
+ @Test
+ public void deserializeObjectMissingTimeTest() {
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0}";
+ MyObjectTestToSerialize expectedResult = new MyObjectTestToSerialize();
+ expectedResult.setStringValue("A String");
+ expectedResult.setIntValue(2147483647);
+ expectedResult.setBoolValue(true);
+ expectedResult.setCharValue('a');
+ expectedResult.setByteValue((byte) 65);
+ expectedResult.setShortValue((short) 32767);
+ expectedResult.setLongValue(9223372036854775807L);
+ expectedResult.setFloatValue(1.0f);
+ MyObjectTestToSerialize result;
+
+ try {
+ result = SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class);
+ assertEquals(expectedResult, result, "FOUND:[[" + result + "]] \n but was EXPECTING: [[" + expectedResult + "]]");
} catch (IOException exception) {
fail(exception.getMessage());
}
}
@Test
- public void deserializeObjectIntExceedMaximunValueTest() throws Exception {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483648,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ public void deserializeObjectIntExceedMaximumValueTest() {
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483648,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
+
assertThrows(IOException.class, () -> SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class));
}
@Test
- public void deserializeObjectNotACharTest() throws Exception {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"Not A Char\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ public void deserializeObjectNotACharTest() {
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"Not A Char\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
assertThrows(IOException.class, () -> SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class));
}
@Test
- public void deserializeObjectShortExceededMaximunValueTest() throws Exception {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32768,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ public void deserializeObjectShortExceededMaximumValueTest() {
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32768,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
assertThrows(IOException.class, () -> SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class));
}
@Test
- public void deserializeObjectLongExceededMaximumValueTest() throws Exception {
- String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775808,\"floatValue\":1.0,\"doubleValue\":1000.0}";
+ public void deserializeObjectLongExceededMaximumValueTest() {
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775808,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+999999999-12-31T23:59:59.999999999-18:00\"}";
+
+ assertThrows(IOException.class, () -> SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class));
+ }
+
+ @Test
+ public void deserializeObjectTimeExceededMaximumValueTest() {
+ String jsonToDeserialize = "{\"stringValue\":\"A String\",\"intValue\":2147483647,\"boolValue\":true,\"charValue\":\"a\",\"byteValue\":65,\"shortValue\":32767,\"longValue\":9223372036854775807,\"floatValue\":1.0,\"doubleValue\":1000.0,\"timeValue\":\"+1000000000-12-31T23:59:59.999999999-18:00\"}";
assertThrows(IOException.class, () -> SERIALIZER.deserialize(jsonToDeserialize.getBytes(), MyObjectTestToSerialize.class));
}
@@ -769,6 +852,7 @@ public void deserializeNullToPrimitives() throws Exception {
assertEquals(0, SERIALIZER.deserialize(null, double.class), 0);
assertEquals(0, SERIALIZER.deserialize(null, float.class), 0);
assertEquals(false, SERIALIZER.deserialize(null, boolean.class));
+ assertEquals(null, SERIALIZER.deserialize(null, OffsetDateTime.class));
assertNull(SERIALIZER.deserialize(null, Character.class));
assertNull(SERIALIZER.deserialize(null, Integer.class));
@@ -777,6 +861,7 @@ public void deserializeNullToPrimitives() throws Exception {
assertNull(SERIALIZER.deserialize(null, Double.class));
assertNull(SERIALIZER.deserialize(null, Float.class));
assertNull(SERIALIZER.deserialize(null, Boolean.class));
+ assertNull(SERIALIZER.deserialize(null, OffsetDateTime.class));
}
@Test
@@ -789,6 +874,7 @@ public void deserializeEmptyByteArrayToPrimitives() throws Exception {
assertEquals(0, SERIALIZER.deserialize(new byte[0], double.class), 0);
assertEquals(0, SERIALIZER.deserialize(new byte[0], float.class), 0);
assertEquals(false, SERIALIZER.deserialize(new byte[0], boolean.class));
+ assertEquals(null, SERIALIZER.deserialize(new byte[0], OffsetDateTime.class));
assertNull(SERIALIZER.deserialize(new byte[0], Character.class));
assertNull(SERIALIZER.deserialize(new byte[0], Integer.class));
@@ -797,6 +883,7 @@ public void deserializeEmptyByteArrayToPrimitives() throws Exception {
assertNull(SERIALIZER.deserialize(new byte[0], Double.class));
assertNull(SERIALIZER.deserialize(new byte[0], Float.class));
assertNull(SERIALIZER.deserialize(new byte[0], Boolean.class));
+ assertNull(SERIALIZER.deserialize(new byte[0], OffsetDateTime.class));
}
@Test
@@ -832,6 +919,20 @@ public void serializeDeserializeCloudEventEnvelope() throws Exception {
"v2",
"byte",
Base64.getEncoder().encodeToString(new byte[] {0, 2, 99}))));
+ assertTrue(check.apply(
+ new CloudEvent(
+ "0987-0987",
+ "anothersource",
+ "anothertype",
+ "v3",
+ "blah".getBytes())));
+ assertTrue(check.apply(
+ new CloudEvent(
+ "0987-0987",
+ "anothersource",
+ "anothertype",
+ "v3",
+ null)));
}
@Test
@@ -866,9 +967,10 @@ public void deserializeCloudEventEnvelopeData() throws Exception {
assertEquals(new TreeMap() {{
put("id", "123");
put("name", "Jon Doe");
- }}, deserializeData.apply("{\"id\": \"123\", \"name\": \"Jon Doe\"}"));
- assertEquals("{\"id\": \"123\", \"name\": \"Jon Doe\"}",
- deserializeData.apply(new ObjectMapper().writeValueAsString("{\"id\": \"123\", \"name\": \"Jon Doe\"}")));
+ put("time", "1970-01-01-00:00:00+00:00");
+ }}, deserializeData.apply("{\"id\": \"123\", \"name\": \"Jon Doe\", \"time\": \"1970-01-01-00:00:00+00:00\"}"));
+ assertEquals("{\"id\": \"123\", \"name\": \"Jon Doe\", \"time\": \"1970-01-01-00:00:00+00:00\"}",
+ deserializeData.apply(new ObjectMapper().writeValueAsString("{\"id\": \"123\", \"name\": \"Jon Doe\", \"time\": \"1970-01-01-00:00:00+00:00\"}")));
}
@Test