This is an automated email from the ASF dual-hosted git repository. valentyn pushed a commit to branch valentyn/update-response-format in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 6f8d3a1c96e959c6ee0b77e7e9310e44d46b5dd5 Author: Valentyn Kahamlyk <valentyn.kaham...@improving.com> AuthorDate: Tue Apr 16 18:10:27 2024 -0700 initial implementation --- .../gremlin/util/message/ResponseMessage.java | 31 +++++++++------ .../gremlin/util/message/ResponseStatus.java | 19 +++++++++- .../ser/AbstractGraphSONMessageSerializerV4.java | 7 ++-- .../util/ser/GraphBinaryMessageSerializerV4.java | 33 +++++++--------- .../tinkerpop/gremlin/util/ser/SerTokens.java | 1 + .../util/ser/GraphSONMessageSerializerV4Test.java | 44 ++++++++-------------- .../GraphSONUntypedMessageSerializerV4Test.java | 37 ++++++------------ .../binary/GraphBinaryMessageSerializerV4Test.java | 27 +++++++------ 8 files changed, 99 insertions(+), 100 deletions(-) diff --git a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseMessage.java b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseMessage.java index 0a92190f6f..6dc2780dd5 100644 --- a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseMessage.java +++ b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseMessage.java @@ -103,6 +103,10 @@ public final class ResponseMessage { } } + public static Builder build() { + return new Builder(); + } + public static Builder build(final RequestMessage requestMessage) { return new Builder(requestMessage); } @@ -115,19 +119,24 @@ public final class ResponseMessage { return new Builder(requestId); } - public static Builder buildV4(final UUID requestId) { - return new Builder(requestId, true); + public static Builder buildV4() { + return new Builder(); } public final static class Builder { private final UUID requestId; - private ResponseStatusCode code = ResponseStatusCode.SUCCESS; + private ResponseStatusCode code = null; private Object result = null; - private String statusMessage = ""; + private String statusMessage = null; + private String exception = null; private Map<String, Object> attributes = Collections.emptyMap(); private Map<String, Object> metaData = Collections.emptyMap(); + private Builder() { + requestId = null; + } + private Builder(final RequestMessage requestMessage) { this.requestId = requestMessage.getRequestId(); } @@ -140,13 +149,6 @@ public final class ResponseMessage { this.requestId = requestId; } - // builder for TP4 - private Builder(final UUID requestId, final boolean v4) { - this.requestId = requestId; - this.code = null; - this.statusMessage = null; - } - public Builder code(final ResponseStatusCode code) { this.code = code; return this; @@ -157,6 +159,11 @@ public final class ResponseMessage { return this; } + public Builder exception(final String exception) { + this.exception = exception; + return this; + } + public Builder statusAttributes(final Map<String, Object> attributes) { this.attributes = attributes; return this; @@ -192,7 +199,7 @@ public final class ResponseMessage { if (code == null && statusMessage == null) { return new ResponseMessage(requestId, null, responseResult); } - final ResponseStatus responseStatus = new ResponseStatus(code, statusMessage, attributes); + final ResponseStatus responseStatus = new ResponseStatus(code, statusMessage, exception); return new ResponseMessage(requestId, responseStatus, responseResult); } } diff --git a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatus.java b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatus.java index dbc2995085..4bc2ca6ecb 100644 --- a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatus.java +++ b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatus.java @@ -18,6 +18,7 @@ */ package org.apache.tinkerpop.gremlin.util.message; +import java.util.Collections; import java.util.Map; /** @@ -26,12 +27,21 @@ import java.util.Map; public final class ResponseStatus { private final ResponseStatusCode code; private final String message; + private final String exception; private final Map<String, Object> attributes; public ResponseStatus(final ResponseStatusCode code, final String message, final Map<String, Object> attributes) { this.code = code; this.message = message; this.attributes = attributes; + this.exception = null; + } + + public ResponseStatus(final ResponseStatusCode code, final String message, final String exception) { + this.code = code; + this.message = message; + this.exception = exception; + this.attributes = Collections.emptyMap(); } /** @@ -48,6 +58,13 @@ public final class ResponseStatus { return message; } + /** + * Gets the exception in case of error. + */ + public String getException() { + return exception; + } + /** * Gets the meta-data related to the response. If meta-data is returned it is to be considered specific to the * "op" that is executed. Not all "op" implementations will return meta-data. @@ -61,7 +78,7 @@ public final class ResponseStatus { return "ResponseStatus{" + "code=" + code + ", message='" + message + '\'' + - ", attributes=" + attributes + + ", exception=" + exception + '}'; } } diff --git a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java index dec9fb5b0f..513d8cca80 100644 --- a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java +++ b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java @@ -328,9 +328,6 @@ public abstract class AbstractGraphSONMessageSerializerV4 extends AbstractGraphS GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer); - jsonGenerator.writeStringField(SerTokens.TOKEN_REQUEST, responseMessage.getRequestId() != null ? responseMessage.getRequestId().toString() : null); - // todo: write tx id - jsonGenerator.writeFieldName(SerTokens.TOKEN_RESULT); jsonGenerator.writeObject(Collections.emptyList()); @@ -372,6 +369,7 @@ public abstract class AbstractGraphSONMessageSerializerV4 extends AbstractGraphS GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer); jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, responseMessage.getStatus().getMessage()); jsonGenerator.writeNumberField(SerTokens.TOKEN_CODE, responseMessage.getStatus().getCode().getValue()); + jsonGenerator.writeStringField(SerTokens.TOKEN_EXCEPTION, responseMessage.getStatus().getException()); GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, typeSerializer); GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, typeSerializer); @@ -386,9 +384,10 @@ public abstract class AbstractGraphSONMessageSerializerV4 extends AbstractGraphS @Override public ResponseMessage createObject(final Map<String, Object> data) { final Map<String, Object> status = (Map<String, Object>) data.get(SerTokens.TOKEN_STATUS); - return ResponseMessage.build(UUID.fromString(data.get(SerTokens.TOKEN_REQUEST).toString())) + return ResponseMessage.build() .code(ResponseStatusCode.getFromValue((Integer) status.get(SerTokens.TOKEN_CODE))) .statusMessage(String.valueOf(status.get(SerTokens.TOKEN_MESSAGE))) + .exception(String.valueOf(status.get(SerTokens.TOKEN_EXCEPTION))) .result(data.get(SerTokens.TOKEN_RESULT)) .create(); } diff --git a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java index fc1df1b00e..7a9feb7b87 100644 --- a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java +++ b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java @@ -30,7 +30,7 @@ import org.apache.tinkerpop.gremlin.util.message.ResponseMessage; import org.apache.tinkerpop.gremlin.util.message.ResponseStatus; import org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode; import org.apache.tinkerpop.gremlin.util.ser.binary.RequestMessageSerializerV4; -import org.javatuples.Pair; +import org.javatuples.Triplet; import java.io.IOException; import java.util.ArrayList; @@ -129,11 +129,6 @@ public class GraphBinaryMessageSerializerV4 extends AbstractGraphBinaryMessageSe if (parts.contains(MessageParts.HEADER)) { // Version buffer.writeByte(GraphBinaryWriter.VERSION_BYTE); - - // Nullable request id - writer.writeValue(responseMessage.getRequestId(), buffer, true); - // Nullable tx id, todo: add real value when ready - writer.writeValue((UUID)null, buffer, true); } if (parts.contains(MessageParts.DATA)) { @@ -156,6 +151,8 @@ public class GraphBinaryMessageSerializerV4 extends AbstractGraphBinaryMessageSe writer.writeValue(status.getCode().getValue(), buffer, false); // Nullable status message writer.writeValue(status.getMessage(), buffer, true); + // Nullable exception + writer.writeValue(status.getException(), buffer, true); } } catch (IOException e) { throw new SerializationException(e); @@ -182,9 +179,12 @@ public class GraphBinaryMessageSerializerV4 extends AbstractGraphBinaryMessageSe return result; } - private Pair<ResponseStatusCode, String> readFooter(final Buffer buffer) throws IOException { - return Pair.with(ResponseStatusCode.getFromValue(reader.readValue(buffer, Integer.class, false)), - reader.readValue(buffer, String.class, true)); + private Triplet<ResponseStatusCode, String, String> readFooter(final Buffer buffer) throws IOException { + final ResponseStatusCode statusCode = ResponseStatusCode.getFromValue(reader.readValue(buffer, Integer.class, false)); + final String message = reader.readValue(buffer, String.class, true); + final String exception = reader.readValue(buffer, String.class, true); + + return Triplet.with(statusCode, message, exception); } @Override @@ -194,12 +194,10 @@ public class GraphBinaryMessageSerializerV4 extends AbstractGraphBinaryMessageSe try { // empty input buffer if (buffer.readableBytes() == 0) { - return ResponseMessage.buildV4(null). + return ResponseMessage.buildV4(). code(ResponseStatusCode.NO_CONTENT).result(Collections.emptyList()).create(); } - UUID requestId = null; - if (isFirstChunk) { final int version = buffer.readByte() & 0xff; @@ -208,26 +206,23 @@ public class GraphBinaryMessageSerializerV4 extends AbstractGraphBinaryMessageSe // Or the buffer offsets are wrong throw new SerializationException("The most significant bit should be set according to the format"); } - - requestId = reader.readValue(buffer, UUID.class, true); - // todo: handle tx id - reader.readValue(buffer, UUID.class, true); } final List<Object> result = readPayload(buffer); // no footer if (buffer.readableBytes() == 0) { - return ResponseMessage.buildV4(requestId) + return ResponseMessage.buildV4() .result(result) .create(); } - final Pair<ResponseStatusCode, String> footer = readFooter(buffer); - return ResponseMessage.buildV4(requestId) + final Triplet<ResponseStatusCode, String, String> footer = readFooter(buffer); + return ResponseMessage.buildV4() .result(result) .code(footer.getValue0()) .statusMessage(footer.getValue1()) + .exception(footer.getValue2()) .create(); } catch (IOException ex) { diff --git a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/SerTokens.java b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/SerTokens.java index 1d3fb13c9e..34b98a9a8f 100644 --- a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/SerTokens.java +++ b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/SerTokens.java @@ -30,6 +30,7 @@ public final class SerTokens { public static final String TOKEN_DATA = "data"; public static final String TOKEN_META = "meta"; public static final String TOKEN_CODE = "code"; + public static final String TOKEN_EXCEPTION = "exception"; public static final String TOKEN_REQUEST = "requestId"; public static final String TOKEN_MESSAGE = "message"; public static final String TOKEN_PROCESSOR = "processor"; diff --git a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java index 954fbd0ab0..dadcf91da9 100644 --- a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java +++ b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java @@ -19,8 +19,9 @@ package org.apache.tinkerpop.gremlin.util.ser; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.UnpooledByteBufAllocator; import io.netty.util.CharsetUtil; -import org.apache.tinkerpop.gremlin.util.MessageSerializer; import org.apache.tinkerpop.gremlin.util.message.ResponseMessage; import org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode; import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException; @@ -31,25 +32,26 @@ import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.UUID; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; @SuppressWarnings("unchecked") -public class GraphSONMessageSerializerV4Test extends GraphSONMessageSerializerV3Test { +public class GraphSONMessageSerializerV4Test { + private final static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT; + private final ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(); private final GraphSONMessageSerializerV4 serializer = new GraphSONMessageSerializerV4(); private final ObjectMapper mapper = new ObjectMapper(); @Test public void shouldSerializeChunkedResponseMessage() throws SerializationException, JsonProcessingException { - final UUID id = UUID.randomUUID(); - final ResponseMessage header = ResponseMessage.buildV4(id) + final ResponseMessage header = ResponseMessage.buildV4() .result(Arrays.asList("header", 0)) .create(); - final ResponseMessage footer = ResponseMessage.buildV4(id) + final ResponseMessage footer = ResponseMessage.buildV4() .result(Arrays.asList("footer", 3)) .code(ResponseStatusCode.SUCCESS) .statusMessage("OK") @@ -75,7 +77,7 @@ public class GraphSONMessageSerializerV4Test extends GraphSONMessageSerializerV3 // a message composed of all chunks must be deserialized bbCombined.resetReaderIndex(); final ResponseMessage deserialized = serializer.deserializeResponse(bbCombined); - assertEquals(id, deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); assertEquals(200, deserialized.getStatus().getCode().getValue()); assertEquals("OK", deserialized.getStatus().getMessage()); assertEquals(8, ((List)deserialized.getResult().getData()).size()); @@ -83,8 +85,7 @@ public class GraphSONMessageSerializerV4Test extends GraphSONMessageSerializerV3 @Test public void shouldSerializeResponseMessageWithoutData() throws SerializationException, JsonProcessingException { - final UUID id = UUID.randomUUID(); - final ResponseMessage header = ResponseMessage.buildV4(id) + final ResponseMessage header = ResponseMessage.buildV4() .code(ResponseStatusCode.SUCCESS) .statusMessage("OK") .create(); @@ -101,7 +102,7 @@ public class GraphSONMessageSerializerV4Test extends GraphSONMessageSerializerV3 bb0.resetReaderIndex(); final ResponseMessage deserialized = serializer.deserializeResponse(bb0); - assertEquals(id, deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); assertEquals(200, deserialized.getStatus().getCode().getValue()); assertEquals("OK", deserialized.getStatus().getMessage()); assertEquals(0, ((List)deserialized.getResult().getData()).size()); @@ -109,8 +110,7 @@ public class GraphSONMessageSerializerV4Test extends GraphSONMessageSerializerV3 @Test public void shouldSerializeChunkedResponseMessageWithEmptyData() throws SerializationException, JsonProcessingException { - final UUID id = UUID.randomUUID(); - final ResponseMessage header = ResponseMessage.buildV4(id) + final ResponseMessage header = ResponseMessage.buildV4() .result(new ArrayList<>()) .code(ResponseStatusCode.SUCCESS) .statusMessage("OK") @@ -128,7 +128,7 @@ public class GraphSONMessageSerializerV4Test extends GraphSONMessageSerializerV3 bb0.resetReaderIndex(); final ResponseMessage deserialized = serializer.deserializeResponse(bb0); - assertEquals(id, deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); assertEquals(200, deserialized.getStatus().getCode().getValue()); assertEquals("OK", deserialized.getStatus().getMessage()); assertEquals(0, ((List)deserialized.getResult().getData()).size()); @@ -136,12 +136,11 @@ public class GraphSONMessageSerializerV4Test extends GraphSONMessageSerializerV3 @Test public void shouldSerializeChunkedResponseMessageWithError() throws SerializationException, JsonProcessingException { - final UUID id = UUID.randomUUID(); - final ResponseMessage header = ResponseMessage.buildV4(id) + final ResponseMessage header = ResponseMessage.buildV4() .result(Arrays.asList("header", 0)) .create(); - final ResponseMessage footer = ResponseMessage.buildV4(id) + final ResponseMessage footer = ResponseMessage.buildV4() .result(Arrays.asList("footer", 3)) .code(ResponseStatusCode.SERVER_ERROR) .statusMessage("SERVER_ERROR") @@ -166,20 +165,9 @@ public class GraphSONMessageSerializerV4Test extends GraphSONMessageSerializerV3 bbCombined.resetReaderIndex(); final ResponseMessage deserialized = serializer.deserializeResponse(bbCombined); - assertEquals(id, deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); assertEquals(500, deserialized.getStatus().getCode().getValue()); assertEquals("SERVER_ERROR", deserialized.getStatus().getMessage()); assertEquals(6, ((List)deserialized.getResult().getData()).size()); } - - @Override - protected ResponseMessage convert(final Object toSerialize, MessageSerializer<?> serializer) throws SerializationException { - final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator); - return serializer.deserializeResponse(bb); - } - - @Override - protected ResponseMessage convert(final Object toSerialize) throws SerializationException { - return convert(toSerialize, this.serializer); - } } diff --git a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java index 9314d849ec..4a48ca6f12 100644 --- a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java +++ b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java @@ -36,23 +36,22 @@ import java.util.List; import java.util.UUID; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class GraphSONUntypedMessageSerializerV4Test { - private final UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1"); - private final ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId); + private final ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(); private final GraphSONUntypedMessageSerializerV4 serializer = new GraphSONUntypedMessageSerializerV4(); private final static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT; private final ObjectMapper mapper = new ObjectMapper(); @Test public void shouldSerializeChunkedResponseMessage() throws SerializationException, JsonProcessingException { - final UUID id = UUID.randomUUID(); - final ResponseMessage header = ResponseMessage.buildV4(id) + final ResponseMessage header = ResponseMessage.buildV4() .result(Arrays.asList("header", 0)) .create(); - final ResponseMessage footer = ResponseMessage.buildV4(id) + final ResponseMessage footer = ResponseMessage.buildV4() .result(Arrays.asList("footer", 3)) .code(ResponseStatusCode.SUCCESS) .statusMessage("OK") @@ -78,7 +77,7 @@ public class GraphSONUntypedMessageSerializerV4Test { // a message composed of all chunks must be deserialized bbCombined.resetReaderIndex(); final ResponseMessage deserialized = serializer.deserializeResponse(bbCombined); - assertEquals(id, deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); assertEquals(200, deserialized.getStatus().getCode().getValue()); assertEquals("OK", deserialized.getStatus().getMessage()); assertEquals(8, ((List)deserialized.getResult().getData()).size()); @@ -86,8 +85,7 @@ public class GraphSONUntypedMessageSerializerV4Test { @Test public void shouldSerializeResponseMessageWithoutData() throws SerializationException, JsonProcessingException { - final UUID id = UUID.randomUUID(); - final ResponseMessage header = ResponseMessage.buildV4(id) + final ResponseMessage header = ResponseMessage.buildV4() .code(ResponseStatusCode.SUCCESS) .statusMessage("OK") .create(); @@ -104,7 +102,7 @@ public class GraphSONUntypedMessageSerializerV4Test { bb0.resetReaderIndex(); final ResponseMessage deserialized = serializer.deserializeResponse(bb0); - assertEquals(id, deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); assertEquals(200, deserialized.getStatus().getCode().getValue()); assertEquals("OK", deserialized.getStatus().getMessage()); assertEquals(0, ((List)deserialized.getResult().getData()).size()); @@ -112,8 +110,7 @@ public class GraphSONUntypedMessageSerializerV4Test { @Test public void shouldSerializeChunkedResponseMessageWithEmptyData() throws SerializationException, JsonProcessingException { - final UUID id = UUID.randomUUID(); - final ResponseMessage header = ResponseMessage.buildV4(id) + final ResponseMessage header = ResponseMessage.buildV4() .result(new ArrayList<>()) .code(ResponseStatusCode.SUCCESS) .statusMessage("OK") @@ -131,7 +128,7 @@ public class GraphSONUntypedMessageSerializerV4Test { bb0.resetReaderIndex(); final ResponseMessage deserialized = serializer.deserializeResponse(bb0); - assertEquals(id, deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); assertEquals(200, deserialized.getStatus().getCode().getValue()); assertEquals("OK", deserialized.getStatus().getMessage()); assertEquals(0, ((List)deserialized.getResult().getData()).size()); @@ -139,12 +136,11 @@ public class GraphSONUntypedMessageSerializerV4Test { @Test public void shouldSerializeChunkedResponseMessageWithError() throws SerializationException, JsonProcessingException { - final UUID id = UUID.randomUUID(); - final ResponseMessage header = ResponseMessage.buildV4(id) + final ResponseMessage header = ResponseMessage.buildV4() .result(Arrays.asList("header", 0)) .create(); - final ResponseMessage footer = ResponseMessage.buildV4(id) + final ResponseMessage footer = ResponseMessage.buildV4() .result(Arrays.asList("footer", 3)) .code(ResponseStatusCode.SERVER_ERROR) .statusMessage("SERVER_ERROR") @@ -169,18 +165,9 @@ public class GraphSONUntypedMessageSerializerV4Test { bbCombined.resetReaderIndex(); final ResponseMessage deserialized = serializer.deserializeResponse(bbCombined); - assertEquals(id, deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); assertEquals(500, deserialized.getStatus().getCode().getValue()); assertEquals("SERVER_ERROR", deserialized.getStatus().getMessage()); assertEquals(6, ((List)deserialized.getResult().getData()).size()); } - - private ResponseMessage convert(final Object toSerialize, MessageSerializer<?> serializer) throws SerializationException { - final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator); - return serializer.deserializeResponse(bb); - } - - private ResponseMessage convert(final Object toSerialize) throws SerializationException { - return convert(toSerialize, this.serializer); - } } diff --git a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java index e4e956271f..f73a1d825f 100644 --- a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java +++ b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java @@ -33,6 +33,7 @@ import java.util.UUID; import java.util.stream.Stream; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class GraphBinaryMessageSerializerV4Test { @@ -74,7 +75,7 @@ public class GraphBinaryMessageSerializerV4Test { @Test public void shouldSerializeAndDeserializeResponseInFooterChunk() throws SerializationException { - final ResponseMessage response = ResponseMessage.build((UUID)null) + final ResponseMessage response = ResponseMessage.build() .result(Arrays.asList(1, "test")) .code(ResponseStatusCode.SUCCESS) .statusMessage("OK") @@ -100,7 +101,7 @@ public class GraphBinaryMessageSerializerV4Test { @Test public void shouldSerializeAndDeserializeCompositeResponse() throws SerializationException { final List headerData = Arrays.asList(0, "header"); - final ResponseMessage header = ResponseMessage.buildV4(UUID.randomUUID()) + final ResponseMessage header = ResponseMessage.buildV4() .result(headerData) .create(); @@ -108,7 +109,7 @@ public class GraphBinaryMessageSerializerV4Test { final List chunkData2 = Arrays.asList(2, "data2"); final List footerData = Arrays.asList(0xFF, "footer"); - final ResponseMessage footer = ResponseMessage.build((UUID)null) + final ResponseMessage footer = ResponseMessage.build() .result(footerData) .code(ResponseStatusCode.SUCCESS) .statusMessage("OK") @@ -123,7 +124,7 @@ public class GraphBinaryMessageSerializerV4Test { final ResponseMessage deserialized = serializer.readChunk(bbCombined, true); - assertEquals(header.getRequestId(), deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); // Status assertEquals(footer.getStatus().getCode(), deserialized.getStatus().getCode()); assertEquals(footer.getStatus().getMessage(), deserialized.getStatus().getMessage()); @@ -136,7 +137,7 @@ public class GraphBinaryMessageSerializerV4Test { @Test public void shouldSerializeAndDeserializeCompositeResponseWithError() throws SerializationException { final List headerData = Arrays.asList(0, "header"); - final ResponseMessage header = ResponseMessage.buildV4(UUID.randomUUID()) + final ResponseMessage header = ResponseMessage.buildV4() .result(headerData) .create(); @@ -144,10 +145,11 @@ public class GraphBinaryMessageSerializerV4Test { final List chunkData2 = Arrays.asList(2, "data2"); final List footerData = Arrays.asList(0xFF, "footer"); - final ResponseMessage footer = ResponseMessage.build((UUID)null) + final ResponseMessage footer = ResponseMessage.build() .result(footerData) .code(ResponseStatusCode.SERVER_ERROR) .statusMessage("SERVER_ERROR") + .exception("fire in data center") .create(); final ByteBuf bb0 = serializer.writeHeader(header, allocator); @@ -159,10 +161,11 @@ public class GraphBinaryMessageSerializerV4Test { final ResponseMessage deserialized = serializer.readChunk(bbCombined, true); - assertEquals(header.getRequestId(), deserialized.getRequestId()); + assertNull(deserialized.getRequestId()); // Status assertEquals(footer.getStatus().getCode(), deserialized.getStatus().getCode()); assertEquals(footer.getStatus().getMessage(), deserialized.getStatus().getMessage()); + assertEquals(footer.getStatus().getException(), footer.getStatus().getException()); // Result List<Integer> combinedData = new ArrayList<>(); Stream.of(headerData, chunkData1, chunkData2).forEach(combinedData::addAll); @@ -172,11 +175,13 @@ public class GraphBinaryMessageSerializerV4Test { // copy-paste because response format will be different private static void assertResponseEquals(final ResponseMessage expected, final ResponseMessage actual) { - assertEquals(expected.getRequestId(), actual.getRequestId()); + assertNull(actual.getRequestId()); // Status - assertEquals(expected.getStatus().getCode(), actual.getStatus().getCode()); - assertEquals(expected.getStatus().getMessage(), actual.getStatus().getMessage()); - assertEquals(expected.getStatus().getAttributes(), actual.getStatus().getAttributes()); + if (expected.getStatus() != null && actual.getStatus() != null) { + assertEquals(expected.getStatus().getCode(), actual.getStatus().getCode()); + assertEquals(expected.getStatus().getMessage(), actual.getStatus().getMessage()); + assertEquals(expected.getStatus().getAttributes(), actual.getStatus().getAttributes()); + } // Result // null == empty List if (!isEmptyData(expected) && !isEmptyData(actual)) {