Removed final from CloudEvent class (#775)

* Remove final from CloudEvent Class

Signed-off-by: addjuarez <addiajuarez@gmail.com>

* Add private field

Signed-off-by: addjuarez <addiajuarez@gmail.com>

* Changing test to not use a complex constructor and double deserialization.

Signed-off-by: Artur Souza <artursouza.ms@outlook.com>

* Remove OBJECT_MAPPER.

Signed-off-by: Artur Souza <artursouza.ms@outlook.com>

Signed-off-by: addjuarez <addiajuarez@gmail.com>
Signed-off-by: Artur Souza <artursouza.ms@outlook.com>
Co-authored-by: Artur Souza <artursouza.ms@outlook.com>
This commit is contained in:
addjuarez 2022-09-08 19:34:11 -05:00 committed by GitHub
parent 2cc9e536c8
commit bbb6a1d9c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 321 additions and 1 deletions

View File

@ -26,7 +26,7 @@ import java.util.Objects;
* A cloud event in Dapr.
* @param <T> The type of the payload.
*/
public final class CloudEvent<T> {
public class CloudEvent<T> {
/**
* Mime type used for CloudEvent.

View File

@ -0,0 +1,70 @@
/*
* Copyright 2022 The Dapr Authors
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
limitations under the License.
*/
package io.dapr.client;
import io.dapr.client.domain.CloudEvent;
import java.util.Arrays;
import java.util.Objects;
import java.io.IOException;
public class CloudEventCustom<T> extends CloudEvent<T> {
private String newValue;
private int newInt;
private double newDouble;
public String getNewValue() {
return newValue;
}
public void setNewValue(String newValue) {
this.newValue = newValue;
}
public int getNewInt() {
return newInt;
}
public void setNewInt(int newInt) {
this.newInt = newInt;
}
public double getNewDouble() {
return newDouble;
}
public void setNewDouble(double newDouble) {
this.newDouble = newDouble;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
CloudEventCustom<?> that = (CloudEventCustom<?>) o;
return newInt == that.newInt && Double.compare(that.newDouble, newDouble) == 0 && Objects.equals(newValue, that.newValue);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), newValue, newInt, newDouble);
}
}

View File

@ -0,0 +1,250 @@
/*
* Copyright 2022 The Dapr Authors
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
limitations under the License.
*/
package io.dapr.client;
import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import io.dapr.serializer.DaprObjectSerializer;
import io.dapr.serializer.DefaultObjectSerializer;
import io.dapr.utils.TypeRef;
public class CloudEventCustomTest {
private DaprObjectSerializer serializer = new DefaultObjectSerializer();
public static class MyClass {
public int id;
public String name;
}
@Test
public void deserializeNewAttributes() throws Exception {
String content = "{\n" +
" \"specversion\" : \"1.0\",\n" +
" \"newValue\" : \"hello world again\",\n" +
" \"newDouble\" : 432434324.43,\n" +
" \"newInt\" : 435,\n" +
" \"type\" : \"com.github.pull_request.opened\",\n" +
" \"source\" : \"https://github.com/cloudevents/spec/pull\",\n" +
" \"subject\" : \"123\",\n" +
" \"id\" : \"A234-1234-1234\",\n" +
" \"time\" : \"2018-04-05T17:31:00Z\",\n" +
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"application/json\"\n" +
"}";
CloudEventCustom cloudEventCustom = serializer.deserialize(content.getBytes(), TypeRef.get(CloudEventCustom.class));
assertEquals("application/json", cloudEventCustom.getDatacontenttype());
assertEquals("hello world again", cloudEventCustom.getNewValue());
assertEquals(432434324.43, cloudEventCustom.getNewDouble(),0);
assertEquals(435, cloudEventCustom.getNewInt());
}
@Test
public void deserializeObjectClass() throws Exception {
String content = "{\n" +
" \"specversion\" : \"1.0\",\n" +
" \"newValue\" : \"hello world again\",\n" +
" \"newDouble\" : 432434324.43,\n" +
" \"newInt\" : 435,\n" +
" \"type\" : \"com.github.pull_request.opened\",\n" +
" \"source\" : \"https://github.com/cloudevents/spec/pull\",\n" +
" \"subject\" : \"123\",\n" +
" \"id\" : \"A234-1234-1234\",\n" +
" \"time\" : \"2018-04-05T17:31:00Z\",\n" +
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"application/json\",\n" +
" \"data\" : {\"id\": 1, \"name\": \"hello world\"}\n" +
"}";
CloudEventCustom<MyClass> cloudEventCustom = serializer.deserialize(
content.getBytes(), new TypeRef<CloudEventCustom<MyClass>>() {});
assertEquals("application/json", cloudEventCustom.getDatacontenttype());
assertEquals(1, cloudEventCustom.getData().id);
assertEquals("hello world", cloudEventCustom.getData().name);
assertEquals("hello world again", cloudEventCustom.getNewValue());
assertEquals(432434324.43, cloudEventCustom.getNewDouble(), 0);
assertEquals(435, cloudEventCustom.getNewInt());
}
@Test
public void deserializeNullData() throws Exception {
String content = "{\n" +
" \"specversion\" : \"1.0\",\n" +
" \"type\" : \"com.github.pull_request.opened\",\n" +
" \"source\" : \"https://github.com/cloudevents/spec/pull\",\n" +
" \"subject\" : \"123\",\n" +
" \"id\" : \"A234-1234-1234\",\n" +
" \"time\" : \"2018-04-05T17:31:00Z\",\n" +
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"application/json\"\n" +
"}";
CloudEventCustom cloudEventCustom = serializer.deserialize(content.getBytes(), TypeRef.get(CloudEventCustom.class));
assertEquals("application/json", cloudEventCustom.getDatacontenttype());
assertNull(cloudEventCustom.getData());
assertNull(cloudEventCustom.getNewValue());
assertEquals(0, cloudEventCustom.getNewInt());
}
@Test
public void deserializeInteger() throws Exception {
String content = "{\n" +
" \"specversion\" : 7,\n" +
" \"newInt\" : 7,\n" +
" \"type\" : \"com.github.pull_request.opened\",\n" +
" \"source\" : \"https://github.com/cloudevents/spec/pull\",\n" +
" \"subject\" : \"123\",\n" +
" \"id\" : \"A234-1234-1234\",\n" +
" \"time\" : \"2018-04-05T17:31:00Z\",\n" +
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"application/json\",\n" +
" \"data\" : 1\n" +
"}";
CloudEventCustom<Integer> cloudEventCustom = serializer.deserialize(
content.getBytes(), new TypeRef<CloudEventCustom<Integer>>() {});
assertEquals("application/json", cloudEventCustom.getDatacontenttype());
assertEquals(1, cloudEventCustom.getData().intValue());
assertEquals(7, cloudEventCustom.getNewInt());
}
@Test
public void deserializeString() throws Exception {
String content = "{\n" +
" \"specversion\" : \"1.0\",\n" +
" \"type\" : \"com.github.pull_request.opened\",\n" +
" \"source\" : \"https://github.com/cloudevents/spec/pull\",\n" +
" \"subject\" : \"123\",\n" +
" \"id\" : \"A234-1234-1234\",\n" +
" \"time\" : \"2018-04-05T17:31:00Z\",\n" +
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"text/plain\",\n" +
" \"data\" : \"hello world\"\n" +
"}";
CloudEventCustom<String> cloudEventCustom = serializer.deserialize(
content.getBytes(), new TypeRef<CloudEventCustom<String>>() {});
assertEquals("text/plain", cloudEventCustom.getDatacontenttype());
assertEquals("hello world", cloudEventCustom.getData());
}
@Test
public void deserializeXML() throws Exception {
String content = "{\n" +
" \"specversion\" : \"1.0\",\n" +
" \"type\" : \"com.github.pull_request.opened\",\n" +
" \"source\" : \"https://github.com/cloudevents/spec/pull\",\n" +
" \"subject\" : \"123\",\n" +
" \"id\" : \"A234-1234-1234\",\n" +
" \"time\" : \"2018-04-05T17:31:00Z\",\n" +
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"text/xml\",\n" +
" \"data\" : \"<root/>\"\n" +
"}";
CloudEventCustom<String> cloudEventCustom = serializer.deserialize(
content.getBytes(), new TypeRef<CloudEventCustom<String>>() {});
assertEquals("text/xml", cloudEventCustom.getDatacontenttype());
assertEquals("<root/>", cloudEventCustom.getData());
}
@Test
public void deserializeBytes() throws Exception {
String content = "{\n" +
" \"specversion\" : \"1.0\",\n" +
" \"type\" : \"com.github.pull_request.opened\",\n" +
" \"source\" : \"https://github.com/cloudevents/spec/pull\",\n" +
" \"subject\" : \"123\",\n" +
" \"id\" : \"A234-1234-1234\",\n" +
" \"time\" : \"2018-04-05T17:31:00Z\",\n" +
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"application/json\",\n" +
" \"data\" : \"AQI=\"\n" +
"}";
byte[] expected = new byte[]{ 0x1, 0x2 };
CloudEventCustom<byte[]> cloudEventCustom = serializer.deserialize(
content.getBytes(), new TypeRef<CloudEventCustom<byte[]>>() {});
assertEquals("application/json", cloudEventCustom.getDatacontenttype());
assertArrayEquals(expected, cloudEventCustom.getData());
}
@Test
public void deserializeBinaryData() throws Exception {
String content = "{\n" +
" \"specversion\" : \"1.0\",\n" +
" \"type\" : \"com.github.pull_request.opened\",\n" +
" \"source\" : \"https://github.com/cloudevents/spec/pull\",\n" +
" \"subject\" : \"123\",\n" +
" \"id\" : \"A234-1234-1234\",\n" +
" \"time\" : \"2018-04-05T17:31:00Z\",\n" +
" \"comexampleextension1\" : \"value\",\n" +
" \"comexampleothervalue\" : 5,\n" +
" \"datacontenttype\" : \"application/octet-stream\",\n" +
" \"data_base64\" : \"AQI=\"\n" +
"}";
byte[] expected = new byte[]{ 0x1, 0x2 };
CloudEventCustom<byte[]> cloudEventCustom = serializer.deserialize(
content.getBytes(), new TypeRef<CloudEventCustom<byte[]>>() {});
assertEquals("application/octet-stream", cloudEventCustom.getDatacontenttype());
assertNull(cloudEventCustom.getData());
assertArrayEquals(expected, cloudEventCustom.getBinaryData());
}
@Test
public void serializeAndDeserialize() throws Exception {
CloudEventCustom<MyClass> cloudEventCustom = new CloudEventCustom();
cloudEventCustom.setId("idVal");
cloudEventCustom.setSource("sourceVal");
cloudEventCustom.setType("typeVal");
cloudEventCustom.setSpecversion("specVal");
cloudEventCustom.setDatacontenttype("contentVal");
cloudEventCustom.setNewValue("specVal");
cloudEventCustom.setNewInt(5);
cloudEventCustom.setNewDouble(323.32323);
cloudEventCustom.setData(new MyClass() {{
this.id = 1;
this.name = "hello world";
}});
byte[] byte_array = serializer.serialize(cloudEventCustom);
CloudEventCustom<MyClass> cloudEventUnserial =
serializer.deserialize(byte_array, new TypeRef<CloudEventCustom<MyClass>>() {});
assertEquals(cloudEventCustom.getDatacontenttype(), cloudEventUnserial.getDatacontenttype());
assertEquals(cloudEventCustom.getData().id, cloudEventUnserial.getData().id);
assertEquals(cloudEventCustom.getData().name, cloudEventUnserial.getData().name);
assertEquals(cloudEventCustom.getId(), cloudEventUnserial.getId());
assertEquals(cloudEventCustom.getSource(), cloudEventUnserial.getSource());
assertEquals(cloudEventCustom.getType(), cloudEventUnserial.getType());
assertEquals(cloudEventCustom.getSpecversion(), cloudEventUnserial.getSpecversion());
assertEquals(cloudEventCustom.getNewValue(), cloudEventUnserial.getNewValue());
assertEquals(cloudEventCustom.getNewInt(), cloudEventUnserial.getNewInt());
assertEquals(cloudEventCustom.getNewDouble(), cloudEventUnserial.getNewDouble(), 0.00001);
}
}