You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/05/23 20:38:31 UTC
incubator-tinkerpop git commit: Refactored gryo serialization tests
to have better re-use.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1308 718f5154f -> f3a555fd6
Refactored gryo serialization tests to have better re-use.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f3a555fd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f3a555fd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f3a555fd
Branch: refs/heads/TINKERPOP-1308
Commit: f3a555fd64c19fb9ebf490caf27ae2fe37246431
Parents: 718f515
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 23 16:37:54 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 23 16:37:54 2016 -0400
----------------------------------------------------------------------
.../ser/GryoBaseMessageSerializerV1d0Test.java | 520 +++++++++++++++++++
.../ser/GryoLiteMessageSerializerV1d0Test.java | 439 ----------------
.../ser/GryoMessageSerializerV1d0Test.java | 445 +---------------
3 files changed, 523 insertions(+), 881 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3a555fd/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoBaseMessageSerializerV1d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoBaseMessageSerializerV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoBaseMessageSerializerV1d0Test.java
new file mode 100644
index 0000000..99bd564
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoBaseMessageSerializerV1d0Test.java
@@ -0,0 +1,520 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.tinkerpop.gremlin.driver.ser;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.UnpooledByteBufAllocator;
+import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
+import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.io.AbstractIoRegistry;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoClassResolver;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.kryo.ClassResolver;
+import org.apache.tinkerpop.shaded.kryo.Kryo;
+import org.apache.tinkerpop.shaded.kryo.KryoException;
+import org.apache.tinkerpop.shaded.kryo.Registration;
+import org.apache.tinkerpop.shaded.kryo.Serializer;
+import org.apache.tinkerpop.shaded.kryo.io.Input;
+import org.apache.tinkerpop.shaded.kryo.io.Output;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import java.util.function.Supplier;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+@RunWith(Parameterized.class)
+public class GryoBaseMessageSerializerV1d0Test {
+ @Parameterized.Parameters(name = "expect({0})")
+ public static Iterable<Object[]> data() {
+ final GryoMessageSerializerV1d0 v1d0Text = new GryoMessageSerializerV1d0();
+ v1d0Text.configure(config, null);
+
+ final GryoMessageSerializerV1d0 v1d0LiteText = new GryoMessageSerializerV1d0();
+ v1d0LiteText.configure(config, null);
+
+ return Arrays.asList(new Object[][]{
+ {"V1d0", new GryoMessageSerializerV1d0(), v1d0Text},
+ {"V1d0Lite", new GryoLiteMessageSerializerV1d0(), v1d0LiteText }});
+ }
+
+ @Parameterized.Parameter(value = 0)
+ public String name;
+
+ @Parameterized.Parameter(value = 1)
+ public MessageSerializer binarySerializer;
+
+ @Parameterized.Parameter(value = 2)
+ public MessageSerializer textSerializer;
+
+ private static final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_SERIALIZE_RESULT_TO_STRING, true);
+ }};
+
+ private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
+ private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
+ private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
+
+ @Test
+ public void shouldConfigureIoRegistry() throws Exception {
+ final MessageSerializer serializer = new GryoMessageSerializerV1d0();
+ final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Arrays.asList(ColorIoRegistry.class.getName()));
+ }};
+
+ serializer.configure(config, null);
+
+ final ResponseMessage toSerialize = ResponseMessage.build(requestId).result(Color.RED).create();
+ final ByteBuf bb = serializer.serializeResponseAsBinary(toSerialize, allocator);
+ final ResponseMessage deserialized = serializer.deserializeResponse(bb);
+
+ assertCommon(deserialized);
+ assertEquals(Color.RED, deserialized.getResult().getData());
+ }
+
+ @Test
+ public void shouldConfigureCustomClassResolver() {
+ final MessageSerializer serializer = new GryoMessageSerializerV1d0();
+ final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplier.class.getName());
+ }};
+
+ serializer.configure(config, null);
+
+ try {
+ serializer.serializeResponseAsBinary(responseMessageBuilder.create(), allocator);
+ fail("Should fail because the ClassResolver used here always generates an error");
+ } catch (Exception ex) {
+ assertEquals("java.lang.RuntimeException: Registration is not allowed with this ClassResolver - it is not a good implementation", ex.getMessage());
+ }
+ }
+
+ @Test
+ public void shouldConfigureCustomClassResolverFromInstance() {
+ final MessageSerializer serializer = new GryoMessageSerializerV1d0();
+ final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplierAsInstance.class.getName());
+ }};
+
+ serializer.configure(config, null);
+
+ try {
+ serializer.serializeResponseAsBinary(responseMessageBuilder.create(), allocator);
+ fail("Should fail because the ClassResolver used here always generates an error");
+ } catch (Exception ex) {
+ assertEquals("java.lang.RuntimeException: Registration is not allowed with this ClassResolver - it is not a good implementation", ex.getMessage());
+ }
+ }
+
+ @Test
+ public void shouldSerializeIterable() throws Exception {
+ final ArrayList<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(100);
+
+ final ResponseMessage response = convertBinary(list);
+ assertCommon(response);
+
+ final java.util.List<Integer> deserializedFunList = (java.util.List<Integer>) response.getResult().getData();
+ assertEquals(2, deserializedFunList.size());
+ assertEquals(new Integer(1), deserializedFunList.get(0));
+ assertEquals(new Integer(100), deserializedFunList.get(1));
+ }
+
+ @Test
+ public void shouldSerializeIterableToString() throws Exception {
+ final ArrayList<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(100);
+
+ final ResponseMessage response = convertText(list);
+ assertCommon(response);
+
+ final java.util.List deserializedFunList = (java.util.List) response.getResult().getData();
+ assertEquals(2, deserializedFunList.size());
+ assertEquals("1", deserializedFunList.get(0));
+ assertEquals("100", deserializedFunList.get(1));
+ }
+
+ @Test
+ public void shouldSerializeIterableToStringWithNull() throws Exception {
+ final ArrayList<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(null);
+ list.add(100);
+
+ final ResponseMessage response = convertText(list);
+ assertCommon(response);
+
+ final java.util.List deserializedFunList = (java.util.List) response.getResult().getData();
+ assertEquals(3, deserializedFunList.size());
+ assertEquals("1", deserializedFunList.get(0).toString());
+ assertEquals("null", deserializedFunList.get(1).toString());
+ assertEquals("100", deserializedFunList.get(2).toString());
+ }
+
+ @Test
+ public void shouldSerializeIterableWithNull() throws Exception {
+ final ArrayList<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(null);
+ list.add(100);
+
+ final ResponseMessage response = convertBinary(list);
+ assertCommon(response);
+
+ final java.util.List<Integer> deserializedFunList = (java.util.List<Integer>) response.getResult().getData();
+ assertEquals(3, deserializedFunList.size());
+ assertEquals(new Integer(1), deserializedFunList.get(0));
+ assertNull(deserializedFunList.get(1));
+ assertEquals(new Integer(100), deserializedFunList.get(2));
+ }
+
+ @Test
+ public void shouldSerializeMap() throws Exception {
+ final Map<String, Object> map = new HashMap<>();
+ final Map<String, String> innerMap = new HashMap<>();
+ innerMap.put("a", "b");
+
+ map.put("x", 1);
+ map.put("y", "some");
+ map.put("z", innerMap);
+
+ final ResponseMessage response = convertBinary(map);
+ assertCommon(response);
+
+ final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
+ assertEquals(3, deserializedMap.size());
+ assertEquals(1, deserializedMap.get("x"));
+ assertEquals("some", deserializedMap.get("y"));
+
+ final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
+ assertEquals(1, deserializedInnerMap.size());
+ assertEquals("b", deserializedInnerMap.get("a"));
+ }
+
+ @Test
+ public void shouldSerializeMapEntry() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v1 = graph.addVertex();
+ final Date d = new Date();
+
+ final Map<Object, Object> map = new HashMap<>();
+ map.put("x", 1);
+ map.put(v1, 100);
+ map.put(d, "test");
+
+ final ResponseMessage response = convertBinary(IteratorUtils.asList(map.entrySet()));
+ assertCommon(response);
+
+ final java.util.List<Map.Entry<Object, Object>> deserializedEntries = (java.util.List<Map.Entry<Object, Object>>) response.getResult().getData();
+ assertEquals(3, deserializedEntries.size());
+ deserializedEntries.forEach(e -> {
+ if (e.getKey().equals("x"))
+ assertEquals(1, e.getValue());
+ else if (e.getKey().equals(v1))
+ assertEquals(100, e.getValue());
+ else if (e.getKey().equals(d))
+ assertEquals("test", e.getValue());
+ else
+ fail("Map entries contains a key that is not part of what was serialized");
+ });
+ }
+
+ @Test
+ public void shouldSerializeTree() throws Exception {
+ final Graph g = TinkerFactory.createModern();
+ final Tree t = g.traversal().V().out().out().tree().by("name").next();
+
+ final ResponseMessage response = convertBinary(t);
+ assertCommon(response);
+
+ final Tree deserialized = (Tree) response.getResult().getData();
+ assertEquals(t, deserialized);
+
+ assertThat(deserialized.containsKey("marko"), is(true));
+ assertEquals(1, deserialized.size());
+
+ final Tree markoChildren = (Tree) deserialized.get("marko");
+ assertThat(markoChildren.containsKey("josh"), is(true));
+ assertEquals(1, markoChildren.size());
+
+ final Tree joshChildren = (Tree) markoChildren.get("josh");
+ assertThat(joshChildren.containsKey("lop"), is(true));
+ assertThat(joshChildren.containsKey("ripple"), is(true));
+ assertEquals(2, joshChildren.size());
+ }
+
+ @Test
+ public void shouldSerializeFullResponseMessage() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final Map<String, Object> metaData = new HashMap<>();
+ metaData.put("test", "this");
+ metaData.put("one", 1);
+
+ final Map<String, Object> attributes = new HashMap<>();
+ attributes.put("test", "that");
+ attributes.put("two", 2);
+
+ final ResponseMessage response = ResponseMessage.build(id)
+ .responseMetaData(metaData)
+ .code(ResponseStatusCode.SUCCESS)
+ .result("some-result")
+ .statusAttributes(attributes)
+ .statusMessage("worked")
+ .create();
+
+ final ByteBuf bb = binarySerializer.serializeResponseAsBinary(response, allocator);
+ final ResponseMessage deserialized = binarySerializer.deserializeResponse(bb);
+
+ assertEquals(id, deserialized.getRequestId());
+ assertEquals("this", deserialized.getResult().getMeta().get("test"));
+ assertEquals(1, deserialized.getResult().getMeta().get("one"));
+ assertEquals("some-result", deserialized.getResult().getData());
+ assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
+ assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
+ assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
+ assertEquals("worked", deserialized.getStatus().getMessage());
+ }
+
+ @Test
+ public void shouldHaveTooSmallBufferToSerializeResponseMessage() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final Map<String, Object> metaData = new HashMap<>();
+ metaData.put("test", "this");
+ metaData.put("one", 1);
+
+ final Map<String, Object> attributes = new HashMap<>();
+ attributes.put("test", "that");
+ attributes.put("two", 2);
+
+ final ResponseMessage response = ResponseMessage.build(id)
+ .responseMetaData(metaData)
+ .code(ResponseStatusCode.SUCCESS)
+ .result("some-result")
+ .statusAttributes(attributes)
+ .statusMessage("worked")
+ .create();
+
+ final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
+ final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
+ put("bufferSize", 1);
+ }};
+ binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
+
+ try {
+ binarySerializerWithSmallBuffer.serializeResponseAsBinary(response, allocator);
+ fail("Should have a buffer size that is too small");
+ } catch (Exception ex) {
+ final Throwable root = ExceptionUtils.getRootCause(ex);
+ assertThat(root, instanceOf(KryoException.class));
+ }
+ }
+
+ @Test
+ public void shouldReturnAllBytesInResponse() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final Map<String, Object> metaData = new HashMap<>();
+ metaData.put("test", "this");
+ metaData.put("one", 1);
+
+ final Map<String, Object> attributes = new HashMap<>();
+ attributes.put("test", "that");
+ attributes.put("two", 2);
+
+ final ResponseMessage response = ResponseMessage.build(id)
+ .responseMetaData(metaData)
+ .code(ResponseStatusCode.SUCCESS)
+ .result("some-result")
+ .statusAttributes(attributes)
+ .statusMessage("worked")
+ .create();
+
+ final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
+ final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
+ // set to bufferSize < total message size but still greater than any individual object requires
+ put("bufferSize", 50);
+ }};
+ binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
+
+ ByteBuf buf = binarySerializerWithSmallBuffer.serializeResponseAsBinary(response, allocator);
+ assertTrue(buf.isReadable());
+ assertEquals(82, buf.readableBytes());
+ }
+
+ @Test
+ public void shouldSerializeFullRequestMessage() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final RequestMessage request = RequestMessage.build("try")
+ .overrideRequestId(id)
+ .processor("pro")
+ .addArg("test", "this")
+ .create();
+ final ByteBuf bb = binarySerializer.serializeRequestAsBinary(request, allocator);
+ final int mimeLen = bb.readByte();
+ bb.readBytes(new byte[mimeLen]);
+ final RequestMessage deserialized = binarySerializer.deserializeRequest(bb);
+
+ assertEquals(id, deserialized.getRequestId());
+ assertEquals("pro", deserialized.getProcessor());
+ assertEquals("try", deserialized.getOp());
+ assertEquals("this", deserialized.getArgs().get("test"));
+ }
+
+ @Test
+ public void shouldHaveTooSmallBufferToSerializeRequestMessage() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final RequestMessage request = RequestMessage.build("try")
+ .overrideRequestId(id)
+ .processor("pro")
+ .addArg("test", "this")
+ .create();
+
+ final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
+ final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
+ put("bufferSize", 1);
+ }};
+ binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
+
+ try {
+ binarySerializerWithSmallBuffer.serializeRequestAsBinary(request, allocator);
+ fail("Should have a buffer size that is too small");
+ } catch (Exception ex) {
+ final Throwable root = ExceptionUtils.getRootCause(ex);
+ assertThat(root, instanceOf(KryoException.class));
+ }
+ }
+
+ @Test
+ public void shouldReturnAllBytesInRequest() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final RequestMessage request = RequestMessage.build("try")
+ .overrideRequestId(id)
+ .processor("pro")
+ .addArg("test", "this")
+ .create();
+
+ final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
+ final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
+ // set to bufferSize < total message size but still greater than any individual object requires
+ put("bufferSize", 50);
+ }};
+ binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
+
+ ByteBuf buf = binarySerializerWithSmallBuffer.serializeRequestAsBinary(request, allocator);
+ assertTrue(buf.isReadable());
+ assertEquals(71, buf.readableBytes());
+ }
+
+ private void assertCommon(final ResponseMessage response) {
+ assertEquals(requestId, response.getRequestId());
+ assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
+ }
+
+ private ResponseMessage convertBinary(final Object toSerialize) throws SerializationException {
+ final ByteBuf bb = binarySerializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+ return binarySerializer.deserializeResponse(bb);
+ }
+
+ private ResponseMessage convertText(final Object toSerialize) throws SerializationException {
+ final ByteBuf bb = textSerializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+ return textSerializer.deserializeResponse(bb);
+ }
+
+ public static class ErrorOnlyClassResolverSupplierAsInstance implements Supplier<ClassResolver> {
+
+ private static final ErrorOnlyClassResolverSupplierAsInstance instance = new ErrorOnlyClassResolverSupplierAsInstance();
+
+ private ErrorOnlyClassResolverSupplierAsInstance() {}
+
+ public static ErrorOnlyClassResolverSupplierAsInstance getInstance() {
+ return instance;
+ }
+
+ @Override
+ public ClassResolver get() {
+ return new ErrorOnlyClassResolver();
+ }
+ }
+
+ public static class ErrorOnlyClassResolverSupplier implements Supplier<ClassResolver> {
+ @Override
+ public ClassResolver get() {
+ return new ErrorOnlyClassResolver();
+ }
+ }
+
+ public static class ErrorOnlyClassResolver extends GryoClassResolver {
+ @Override
+ public Registration getRegistration(Class clazz) {
+ throw new RuntimeException("Registration is not allowed with this ClassResolver - it is not a good implementation");
+ }
+ }
+
+ public static class ColorIoRegistry extends AbstractIoRegistry {
+ public ColorIoRegistry() {
+ register(GryoIo.class, Color.class, new ColorSerializer());
+ }
+ }
+
+ public static class ColorSerializer extends Serializer<Color> {
+ @Override
+ public void write(final Kryo kryo, final Output output, final Color color) {
+ output.write(color.equals(Color.RED) ? 1 : 0);
+ }
+
+ @Override
+ public Color read(final Kryo kryo, final Input input, final Class<Color> aClass) {
+ return input.read() == 1 ? Color.RED : Color.BLACK;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3a555fd/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java
index 0880f5f..2a23d02 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java
@@ -21,51 +21,28 @@ package org.apache.tinkerpop.gremlin.driver.ser;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.UnpooledByteBufAllocator;
-import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
-import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.io.AbstractIoRegistry;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoClassResolver;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.kryo.ClassResolver;
-import org.apache.tinkerpop.shaded.kryo.Kryo;
-import org.apache.tinkerpop.shaded.kryo.KryoException;
-import org.apache.tinkerpop.shaded.kryo.Registration;
-import org.apache.tinkerpop.shaded.kryo.Serializer;
-import org.apache.tinkerpop.shaded.kryo.io.Input;
-import org.apache.tinkerpop.shaded.kryo.io.Output;
import org.junit.Test;
-import java.awt.Color;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
-import java.util.function.Supplier;
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
/**
* Serializer tests that cover non-lossy serialization/deserialization methods.
@@ -83,178 +60,6 @@ public class GryoLiteMessageSerializerV1d0Test {
public MessageSerializer binarySerializer = new GryoLiteMessageSerializerV1d0();
- public MessageSerializer textSerializer = new GryoLiteMessageSerializerV1d0();
-
- public GryoLiteMessageSerializerV1d0Test() {
- textSerializer.configure(config, null);
- }
-
- @Test
- public void shouldConfigureIoRegistry() throws Exception {
- final MessageSerializer serializer = new GryoLiteMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(AbstractGryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Arrays.asList(ColorIoRegistry.class.getName()));
- }};
-
- serializer.configure(config, null);
-
- final ResponseMessage toSerialize = ResponseMessage.build(requestId).result(Color.RED).create();
- final ByteBuf bb = serializer.serializeResponseAsBinary(toSerialize, allocator);
- final ResponseMessage deserialized = serializer.deserializeResponse(bb);
-
- assertCommon(deserialized);
- assertEquals(Color.RED, deserialized.getResult().getData());
- }
-
- @Test
- public void shouldConfigureCustomClassResolver() {
- final MessageSerializer serializer = new GryoLiteMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(AbstractGryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplier.class.getName());
- }};
-
- serializer.configure(config, null);
-
- try {
- serializer.serializeResponseAsBinary(responseMessageBuilder.create(), allocator);
- fail("Should fail because the ClassResolver used here always generates an error");
- } catch (Exception ex) {
- assertEquals("java.lang.RuntimeException: Registration is not allowed with this ClassResolver - it is not a good implementation", ex.getMessage());
- }
- }
-
- @Test
- public void shouldConfigureCustomClassResolverFromInstance() {
- final MessageSerializer serializer = new GryoLiteMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(AbstractGryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplierAsInstance.class.getName());
- }};
-
- serializer.configure(config, null);
-
- try {
- serializer.serializeResponseAsBinary(responseMessageBuilder.create(), allocator);
- fail("Should fail because the ClassResolver used here always generates an error");
- } catch (Exception ex) {
- assertEquals("java.lang.RuntimeException: Registration is not allowed with this ClassResolver - it is not a good implementation", ex.getMessage());
- }
- }
-
- @Test
- public void shouldSerializeIterable() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(100);
-
- final ResponseMessage response = convertBinary(list);
- assertCommon(response);
-
- final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
- assertEquals(2, deserializedFunList.size());
- assertEquals(new Integer(1), deserializedFunList.get(0));
- assertEquals(new Integer(100), deserializedFunList.get(1));
- }
-
- @Test
- public void shouldSerializeIterableToString() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(100);
-
- final ResponseMessage response = convertText(list);
- assertCommon(response);
-
- final List deserializedFunList = (List) response.getResult().getData();
- assertEquals(2, deserializedFunList.size());
- assertEquals("1", deserializedFunList.get(0));
- assertEquals("100", deserializedFunList.get(1));
- }
-
- @Test
- public void shouldSerializeIterableToStringWithNull() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(null);
- list.add(100);
-
- final ResponseMessage response = convertText(list);
- assertCommon(response);
-
- final List deserializedFunList = (List) response.getResult().getData();
- assertEquals(3, deserializedFunList.size());
- assertEquals("1", deserializedFunList.get(0).toString());
- assertEquals("null", deserializedFunList.get(1).toString());
- assertEquals("100", deserializedFunList.get(2).toString());
- }
-
- @Test
- public void shouldSerializeIterableWithNull() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(null);
- list.add(100);
-
- final ResponseMessage response = convertBinary(list);
- assertCommon(response);
-
- final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
- assertEquals(3, deserializedFunList.size());
- assertEquals(new Integer(1), deserializedFunList.get(0));
- assertNull(deserializedFunList.get(1));
- assertEquals(new Integer(100), deserializedFunList.get(2));
- }
-
- @Test
- public void shouldSerializeMap() throws Exception {
- final Map<String, Object> map = new HashMap<>();
- final Map<String, String> innerMap = new HashMap<>();
- innerMap.put("a", "b");
-
- map.put("x", 1);
- map.put("y", "some");
- map.put("z", innerMap);
-
- final ResponseMessage response = convertBinary(map);
- assertCommon(response);
-
- final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
- assertEquals(3, deserializedMap.size());
- assertEquals(1, deserializedMap.get("x"));
- assertEquals("some", deserializedMap.get("y"));
-
- final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
- assertEquals(1, deserializedInnerMap.size());
- assertEquals("b", deserializedInnerMap.get("a"));
- }
-
- @Test
- public void shouldSerializeMapEntry() throws Exception {
- final Graph graph = TinkerGraph.open();
- final Vertex v1 = graph.addVertex();
- final Date d = new Date();
-
- final Map<Object, Object> map = new HashMap<>();
- map.put("x", 1);
- map.put(v1, 100);
- map.put(d, "test");
-
- final ResponseMessage response = convertBinary(IteratorUtils.asList(map.entrySet()));
- assertCommon(response);
-
- final List<Map.Entry<Object, Object>> deserializedEntries = (List<Map.Entry<Object, Object>>) response.getResult().getData();
- assertEquals(3, deserializedEntries.size());
- deserializedEntries.forEach(e -> {
- if (e.getKey().equals("x"))
- assertEquals(1, e.getValue());
- else if (e.getKey().equals(v1))
- assertEquals(100, e.getValue());
- else if (e.getKey().equals(d))
- assertEquals("test", e.getValue());
- else
- fail("Map entries contains a key that is not part of what was serialized");
- });
- }
-
@Test
public void shouldSerializeEdge() throws Exception {
final Graph g = TinkerGraph.open();
@@ -283,30 +88,6 @@ public class GryoLiteMessageSerializerV1d0Test {
}
@Test
- public void shouldSerializeTree() throws Exception {
- final Graph g = TinkerFactory.createModern();
- final Tree t = g.traversal().V().out().out().tree().by("name").next();
-
- final ResponseMessage response = convertBinary(t);
- assertCommon(response);
-
- final Tree deserialized = (Tree) response.getResult().getData();
- assertEquals(t, deserialized);
-
- assertThat(deserialized.containsKey("marko"), is(true));
- assertEquals(1, deserialized.size());
-
- final Tree markoChildren = (Tree) deserialized.get("marko");
- assertThat(markoChildren.containsKey("josh"), is(true));
- assertEquals(1, markoChildren.size());
-
- final Tree joshChildren = (Tree) markoChildren.get("josh");
- assertThat(joshChildren.containsKey("lop"), is(true));
- assertThat(joshChildren.containsKey("ripple"), is(true));
- assertEquals(2, joshChildren.size());
- }
-
- @Test
public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
final Graph g = TinkerGraph.open();
final Vertex v = g.addVertex();
@@ -357,173 +138,6 @@ public class GryoLiteMessageSerializerV1d0Test {
assertEquals(new Integer(1000), deserializedMap.values().iterator().next());
}
- @Test
- public void shouldSerializeFullResponseMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final Map<String, Object> metaData = new HashMap<>();
- metaData.put("test", "this");
- metaData.put("one", 1);
-
- final Map<String, Object> attributes = new HashMap<>();
- attributes.put("test", "that");
- attributes.put("two", 2);
-
- final ResponseMessage response = ResponseMessage.build(id)
- .responseMetaData(metaData)
- .code(ResponseStatusCode.SUCCESS)
- .result("some-result")
- .statusAttributes(attributes)
- .statusMessage("worked")
- .create();
-
- final ByteBuf bb = binarySerializer.serializeResponseAsBinary(response, allocator);
- final ResponseMessage deserialized = binarySerializer.deserializeResponse(bb);
-
- assertEquals(id, deserialized.getRequestId());
- assertEquals("this", deserialized.getResult().getMeta().get("test"));
- assertEquals(1, deserialized.getResult().getMeta().get("one"));
- assertEquals("some-result", deserialized.getResult().getData());
- assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
- assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
- assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
- assertEquals("worked", deserialized.getStatus().getMessage());
- }
-
- @Test
- public void shouldHaveTooSmallBufferToSerializeResponseMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final Map<String, Object> metaData = new HashMap<>();
- metaData.put("test", "this");
- metaData.put("one", 1);
-
- final Map<String, Object> attributes = new HashMap<>();
- attributes.put("test", "that");
- attributes.put("two", 2);
-
- final ResponseMessage response = ResponseMessage.build(id)
- .responseMetaData(metaData)
- .code(ResponseStatusCode.SUCCESS)
- .result("some-result")
- .statusAttributes(attributes)
- .statusMessage("worked")
- .create();
-
- final MessageSerializer binarySerializerWithSmallBuffer = new GryoLiteMessageSerializerV1d0();
- final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
- put("bufferSize", 1);
- }};
- binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
-
- try {
- binarySerializerWithSmallBuffer.serializeResponseAsBinary(response, allocator);
- fail("Should have a buffer size that is too small");
- } catch (Exception ex) {
- final Throwable root = ExceptionUtils.getRootCause(ex);
- assertThat(root, instanceOf(KryoException.class));
- }
- }
-
- @Test
- public void shouldReturnAllBytesInResponse() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final Map<String, Object> metaData = new HashMap<>();
- metaData.put("test", "this");
- metaData.put("one", 1);
-
- final Map<String, Object> attributes = new HashMap<>();
- attributes.put("test", "that");
- attributes.put("two", 2);
-
- final ResponseMessage response = ResponseMessage.build(id)
- .responseMetaData(metaData)
- .code(ResponseStatusCode.SUCCESS)
- .result("some-result")
- .statusAttributes(attributes)
- .statusMessage("worked")
- .create();
-
- final MessageSerializer binarySerializerWithSmallBuffer = new GryoLiteMessageSerializerV1d0();
- final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
- // set to bufferSize < total message size but still greater than any individual object requires
- put("bufferSize", 50);
- }};
- binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
-
- ByteBuf buf = binarySerializerWithSmallBuffer.serializeResponseAsBinary(response, allocator);
- assertTrue(buf.isReadable());
- assertEquals(82, buf.readableBytes());
- }
-
- @Test
- public void shouldSerializeFullRequestMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final RequestMessage request = RequestMessage.build("try")
- .overrideRequestId(id)
- .processor("pro")
- .addArg("test", "this")
- .create();
- final ByteBuf bb = binarySerializer.serializeRequestAsBinary(request, allocator);
- final int mimeLen = bb.readByte();
- bb.readBytes(new byte[mimeLen]);
- final RequestMessage deserialized = binarySerializer.deserializeRequest(bb);
-
- assertEquals(id, deserialized.getRequestId());
- assertEquals("pro", deserialized.getProcessor());
- assertEquals("try", deserialized.getOp());
- assertEquals("this", deserialized.getArgs().get("test"));
- }
-
- @Test
- public void shouldHaveTooSmallBufferToSerializeRequestMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final RequestMessage request = RequestMessage.build("try")
- .overrideRequestId(id)
- .processor("pro")
- .addArg("test", "this")
- .create();
-
- final MessageSerializer binarySerializerWithSmallBuffer = new GryoLiteMessageSerializerV1d0();
- final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
- put("bufferSize", 1);
- }};
- binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
-
- try {
- binarySerializerWithSmallBuffer.serializeRequestAsBinary(request, allocator);
- fail("Should have a buffer size that is too small");
- } catch (Exception ex) {
- final Throwable root = ExceptionUtils.getRootCause(ex);
- assertThat(root, instanceOf(KryoException.class));
- }
- }
-
- @Test
- public void shouldReturnAllBytesInRequest() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final RequestMessage request = RequestMessage.build("try")
- .overrideRequestId(id)
- .processor("pro")
- .addArg("test", "this")
- .create();
-
- final MessageSerializer binarySerializerWithSmallBuffer = new GryoLiteMessageSerializerV1d0();
- final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
- // set to bufferSize < total message size but still greater than any individual object requires
- put("bufferSize", 50);
- }};
- binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
-
- ByteBuf buf = binarySerializerWithSmallBuffer.serializeRequestAsBinary(request, allocator);
- assertTrue(buf.isReadable());
- assertEquals(76, buf.readableBytes());
- }
-
private void assertCommon(final ResponseMessage response) {
assertEquals(requestId, response.getRequestId());
assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
@@ -533,57 +147,4 @@ public class GryoLiteMessageSerializerV1d0Test {
final ByteBuf bb = binarySerializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
return binarySerializer.deserializeResponse(bb);
}
-
- private ResponseMessage convertText(final Object toSerialize) throws SerializationException {
- final ByteBuf bb = textSerializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
- return textSerializer.deserializeResponse(bb);
- }
-
- public static class ErrorOnlyClassResolverSupplierAsInstance implements Supplier<ClassResolver> {
-
- private static final ErrorOnlyClassResolverSupplierAsInstance instance = new ErrorOnlyClassResolverSupplierAsInstance();
-
- private ErrorOnlyClassResolverSupplierAsInstance() {}
-
- public static ErrorOnlyClassResolverSupplierAsInstance getInstance() {
- return instance;
- }
-
- @Override
- public ClassResolver get() {
- return new ErrorOnlyClassResolver();
- }
- }
-
- public static class ErrorOnlyClassResolverSupplier implements Supplier<ClassResolver> {
- @Override
- public ClassResolver get() {
- return new ErrorOnlyClassResolver();
- }
- }
-
- public static class ErrorOnlyClassResolver extends GryoClassResolver {
- @Override
- public Registration getRegistration(Class clazz) {
- throw new RuntimeException("Registration is not allowed with this ClassResolver - it is not a good implementation");
- }
- }
-
- public static class ColorIoRegistry extends AbstractIoRegistry {
- public ColorIoRegistry() {
- register(GryoIo.class, Color.class, new ColorSerializer());
- }
- }
-
- public static class ColorSerializer extends Serializer<Color> {
- @Override
- public void write(final Kryo kryo, final Output output, final Color color) {
- output.write(color.equals(Color.RED) ? 1 : 0);
- }
-
- @Override
- public Color read(final Kryo kryo, final Input input, final Class<Color> aClass) {
- return input.read() == 1 ? Color.RED : Color.BLACK;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f3a555fd/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java
index 4064f49..36e17c0 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java
@@ -18,54 +18,31 @@
*/
package org.apache.tinkerpop.gremlin.driver.ser;
-import org.apache.commons.lang.exception.ExceptionUtils;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.UnpooledByteBufAllocator;
import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
-import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.io.AbstractIoRegistry;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoClassResolver;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.UnpooledByteBufAllocator;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.kryo.ClassResolver;
-import org.apache.tinkerpop.shaded.kryo.Kryo;
-import org.apache.tinkerpop.shaded.kryo.KryoException;
-import org.apache.tinkerpop.shaded.kryo.Registration;
-import org.apache.tinkerpop.shaded.kryo.Serializer;
-import org.apache.tinkerpop.shaded.kryo.io.Input;
-import org.apache.tinkerpop.shaded.kryo.io.Output;
import org.junit.Test;
-import java.awt.Color;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
-import java.util.function.Supplier;
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
/**
* Serializer tests that cover non-lossy serialization/deserialization methods.
@@ -83,178 +60,6 @@ public class GryoMessageSerializerV1d0Test {
public MessageSerializer binarySerializer = new GryoMessageSerializerV1d0();
- public MessageSerializer textSerializer = new GryoMessageSerializerV1d0();
-
- public GryoMessageSerializerV1d0Test() {
- textSerializer.configure(config, null);
- }
-
- @Test
- public void shouldConfigureIoRegistry() throws Exception {
- final MessageSerializer serializer = new GryoMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Arrays.asList(ColorIoRegistry.class.getName()));
- }};
-
- serializer.configure(config, null);
-
- final ResponseMessage toSerialize = ResponseMessage.build(requestId).result(Color.RED).create();
- final ByteBuf bb = serializer.serializeResponseAsBinary(toSerialize, allocator);
- final ResponseMessage deserialized = serializer.deserializeResponse(bb);
-
- assertCommon(deserialized);
- assertEquals(Color.RED, deserialized.getResult().getData());
- }
-
- @Test
- public void shouldConfigureCustomClassResolver() {
- final MessageSerializer serializer = new GryoMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplier.class.getName());
- }};
-
- serializer.configure(config, null);
-
- try {
- serializer.serializeResponseAsBinary(responseMessageBuilder.create(), allocator);
- fail("Should fail because the ClassResolver used here always generates an error");
- } catch (Exception ex) {
- assertEquals("java.lang.RuntimeException: Registration is not allowed with this ClassResolver - it is not a good implementation", ex.getMessage());
- }
- }
-
- @Test
- public void shouldConfigureCustomClassResolverFromInstance() {
- final MessageSerializer serializer = new GryoMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplierAsInstance.class.getName());
- }};
-
- serializer.configure(config, null);
-
- try {
- serializer.serializeResponseAsBinary(responseMessageBuilder.create(), allocator);
- fail("Should fail because the ClassResolver used here always generates an error");
- } catch (Exception ex) {
- assertEquals("java.lang.RuntimeException: Registration is not allowed with this ClassResolver - it is not a good implementation", ex.getMessage());
- }
- }
-
- @Test
- public void shouldSerializeIterable() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(100);
-
- final ResponseMessage response = convertBinary(list);
- assertCommon(response);
-
- final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
- assertEquals(2, deserializedFunList.size());
- assertEquals(new Integer(1), deserializedFunList.get(0));
- assertEquals(new Integer(100), deserializedFunList.get(1));
- }
-
- @Test
- public void shouldSerializeIterableToString() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(100);
-
- final ResponseMessage response = convertText(list);
- assertCommon(response);
-
- final List deserializedFunList = (List) response.getResult().getData();
- assertEquals(2, deserializedFunList.size());
- assertEquals("1", deserializedFunList.get(0));
- assertEquals("100", deserializedFunList.get(1));
- }
-
- @Test
- public void shouldSerializeIterableToStringWithNull() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(null);
- list.add(100);
-
- final ResponseMessage response = convertText(list);
- assertCommon(response);
-
- final List deserializedFunList = (List) response.getResult().getData();
- assertEquals(3, deserializedFunList.size());
- assertEquals("1", deserializedFunList.get(0).toString());
- assertEquals("null", deserializedFunList.get(1).toString());
- assertEquals("100", deserializedFunList.get(2).toString());
- }
-
- @Test
- public void shouldSerializeIterableWithNull() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(null);
- list.add(100);
-
- final ResponseMessage response = convertBinary(list);
- assertCommon(response);
-
- final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
- assertEquals(3, deserializedFunList.size());
- assertEquals(new Integer(1), deserializedFunList.get(0));
- assertNull(deserializedFunList.get(1));
- assertEquals(new Integer(100), deserializedFunList.get(2));
- }
-
- @Test
- public void shouldSerializeMap() throws Exception {
- final Map<String, Object> map = new HashMap<>();
- final Map<String, String> innerMap = new HashMap<>();
- innerMap.put("a", "b");
-
- map.put("x", 1);
- map.put("y", "some");
- map.put("z", innerMap);
-
- final ResponseMessage response = convertBinary(map);
- assertCommon(response);
-
- final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
- assertEquals(3, deserializedMap.size());
- assertEquals(1, deserializedMap.get("x"));
- assertEquals("some", deserializedMap.get("y"));
-
- final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
- assertEquals(1, deserializedInnerMap.size());
- assertEquals("b", deserializedInnerMap.get("a"));
- }
-
- @Test
- public void shouldSerializeMapEntry() throws Exception {
- final Graph graph = TinkerGraph.open();
- final Vertex v1 = graph.addVertex();
- final Date d = new Date();
-
- final Map<Object, Object> map = new HashMap<>();
- map.put("x", 1);
- map.put(v1, 100);
- map.put(d, "test");
-
- final ResponseMessage response = convertBinary(IteratorUtils.asList(map.entrySet()));
- assertCommon(response);
-
- final List<Map.Entry<Object, Object>> deserializedEntries = (List<Map.Entry<Object, Object>>) response.getResult().getData();
- assertEquals(3, deserializedEntries.size());
- deserializedEntries.forEach(e -> {
- if (e.getKey().equals("x"))
- assertEquals(1, e.getValue());
- else if (e.getKey().equals(v1))
- assertEquals(100, e.getValue());
- else if (e.getKey().equals(d))
- assertEquals("test", e.getValue());
- else
- fail("Map entries contains a key that is not part of what was serialized");
- });
- }
-
@Test
public void shouldSerializeEdge() throws Exception {
final Graph g = TinkerGraph.open();
@@ -284,30 +89,6 @@ public class GryoMessageSerializerV1d0Test {
}
@Test
- public void shouldSerializeTree() throws Exception {
- final Graph g = TinkerFactory.createModern();
- final Tree t = g.traversal().V().out().out().tree().by("name").next();
-
- final ResponseMessage response = convertBinary(t);
- assertCommon(response);
-
- final Tree deserialized = (Tree) response.getResult().getData();
- assertEquals(t, deserialized);
-
- assertThat(deserialized.containsKey("marko"), is(true));
- assertEquals(1, deserialized.size());
-
- final Tree markoChildren = (Tree) deserialized.get("marko");
- assertThat(markoChildren.containsKey("josh"), is(true));
- assertEquals(1, markoChildren.size());
-
- final Tree joshChildren = (Tree) markoChildren.get("josh");
- assertThat(joshChildren.containsKey("lop"), is(true));
- assertThat(joshChildren.containsKey("ripple"), is(true));
- assertEquals(2, joshChildren.size());
- }
-
- @Test
public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
final Graph g = TinkerGraph.open();
final Vertex v = g.addVertex();
@@ -370,173 +151,6 @@ public class GryoMessageSerializerV1d0Test {
assertEquals(new Integer(1000), deserializedMap.values().iterator().next());
}
- @Test
- public void shouldSerializeFullResponseMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final Map<String, Object> metaData = new HashMap<>();
- metaData.put("test", "this");
- metaData.put("one", 1);
-
- final Map<String, Object> attributes = new HashMap<>();
- attributes.put("test", "that");
- attributes.put("two", 2);
-
- final ResponseMessage response = ResponseMessage.build(id)
- .responseMetaData(metaData)
- .code(ResponseStatusCode.SUCCESS)
- .result("some-result")
- .statusAttributes(attributes)
- .statusMessage("worked")
- .create();
-
- final ByteBuf bb = binarySerializer.serializeResponseAsBinary(response, allocator);
- final ResponseMessage deserialized = binarySerializer.deserializeResponse(bb);
-
- assertEquals(id, deserialized.getRequestId());
- assertEquals("this", deserialized.getResult().getMeta().get("test"));
- assertEquals(1, deserialized.getResult().getMeta().get("one"));
- assertEquals("some-result", deserialized.getResult().getData());
- assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
- assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
- assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
- assertEquals("worked", deserialized.getStatus().getMessage());
- }
-
- @Test
- public void shouldHaveTooSmallBufferToSerializeResponseMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final Map<String, Object> metaData = new HashMap<>();
- metaData.put("test", "this");
- metaData.put("one", 1);
-
- final Map<String, Object> attributes = new HashMap<>();
- attributes.put("test", "that");
- attributes.put("two", 2);
-
- final ResponseMessage response = ResponseMessage.build(id)
- .responseMetaData(metaData)
- .code(ResponseStatusCode.SUCCESS)
- .result("some-result")
- .statusAttributes(attributes)
- .statusMessage("worked")
- .create();
-
- final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
- final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
- put("bufferSize", 1);
- }};
- binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
-
- try {
- binarySerializerWithSmallBuffer.serializeResponseAsBinary(response, allocator);
- fail("Should have a buffer size that is too small");
- } catch (Exception ex) {
- final Throwable root = ExceptionUtils.getRootCause(ex);
- assertThat(root, instanceOf(KryoException.class));
- }
- }
-
- @Test
- public void shouldReturnAllBytesInResponse() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final Map<String, Object> metaData = new HashMap<>();
- metaData.put("test", "this");
- metaData.put("one", 1);
-
- final Map<String, Object> attributes = new HashMap<>();
- attributes.put("test", "that");
- attributes.put("two", 2);
-
- final ResponseMessage response = ResponseMessage.build(id)
- .responseMetaData(metaData)
- .code(ResponseStatusCode.SUCCESS)
- .result("some-result")
- .statusAttributes(attributes)
- .statusMessage("worked")
- .create();
-
- final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
- final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
- // set to bufferSize < total message size but still greater than any individual object requires
- put("bufferSize", 50);
- }};
- binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
-
- ByteBuf buf = binarySerializerWithSmallBuffer.serializeResponseAsBinary(response, allocator);
- assertTrue(buf.isReadable());
- assertEquals(82, buf.readableBytes());
- }
-
- @Test
- public void shouldSerializeFullRequestMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final RequestMessage request = RequestMessage.build("try")
- .overrideRequestId(id)
- .processor("pro")
- .addArg("test", "this")
- .create();
- final ByteBuf bb = binarySerializer.serializeRequestAsBinary(request, allocator);
- final int mimeLen = bb.readByte();
- bb.readBytes(new byte[mimeLen]);
- final RequestMessage deserialized = binarySerializer.deserializeRequest(bb);
-
- assertEquals(id, deserialized.getRequestId());
- assertEquals("pro", deserialized.getProcessor());
- assertEquals("try", deserialized.getOp());
- assertEquals("this", deserialized.getArgs().get("test"));
- }
-
- @Test
- public void shouldHaveTooSmallBufferToSerializeRequestMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final RequestMessage request = RequestMessage.build("try")
- .overrideRequestId(id)
- .processor("pro")
- .addArg("test", "this")
- .create();
-
- final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
- final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
- put("bufferSize", 1);
- }};
- binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
-
- try {
- binarySerializerWithSmallBuffer.serializeRequestAsBinary(request, allocator);
- fail("Should have a buffer size that is too small");
- } catch (Exception ex) {
- final Throwable root = ExceptionUtils.getRootCause(ex);
- assertThat(root, instanceOf(KryoException.class));
- }
- }
-
- @Test
- public void shouldReturnAllBytesInRequest() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final RequestMessage request = RequestMessage.build("try")
- .overrideRequestId(id)
- .processor("pro")
- .addArg("test", "this")
- .create();
-
- final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
- final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
- // set to bufferSize < total message size but still greater than any individual object requires
- put("bufferSize", 50);
- }};
- binarySerializerWithSmallBuffer.configure(configWithSmallBuffer, null);
-
- ByteBuf buf = binarySerializerWithSmallBuffer.serializeRequestAsBinary(request, allocator);
- assertTrue(buf.isReadable());
- assertEquals(71, buf.readableBytes());
- }
-
private void assertCommon(final ResponseMessage response) {
assertEquals(requestId, response.getRequestId());
assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
@@ -546,57 +160,4 @@ public class GryoMessageSerializerV1d0Test {
final ByteBuf bb = binarySerializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
return binarySerializer.deserializeResponse(bb);
}
-
- private ResponseMessage convertText(final Object toSerialize) throws SerializationException {
- final ByteBuf bb = textSerializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
- return textSerializer.deserializeResponse(bb);
- }
-
- public static class ErrorOnlyClassResolverSupplierAsInstance implements Supplier<ClassResolver> {
-
- private static final ErrorOnlyClassResolverSupplierAsInstance instance = new ErrorOnlyClassResolverSupplierAsInstance();
-
- private ErrorOnlyClassResolverSupplierAsInstance() {}
-
- public static ErrorOnlyClassResolverSupplierAsInstance getInstance() {
- return instance;
- }
-
- @Override
- public ClassResolver get() {
- return new ErrorOnlyClassResolver();
- }
- }
-
- public static class ErrorOnlyClassResolverSupplier implements Supplier<ClassResolver> {
- @Override
- public ClassResolver get() {
- return new ErrorOnlyClassResolver();
- }
- }
-
- public static class ErrorOnlyClassResolver extends GryoClassResolver {
- @Override
- public Registration getRegistration(Class clazz) {
- throw new RuntimeException("Registration is not allowed with this ClassResolver - it is not a good implementation");
- }
- }
-
- public static class ColorIoRegistry extends AbstractIoRegistry {
- public ColorIoRegistry() {
- register(GryoIo.class, Color.class, new ColorSerializer());
- }
- }
-
- public static class ColorSerializer extends Serializer<Color> {
- @Override
- public void write(final Kryo kryo, final Output output, final Color color) {
- output.write(color.equals(Color.RED) ? 1 : 0);
- }
-
- @Override
- public Color read(final Kryo kryo, final Input input, final Class<Color> aClass) {
- return input.read() == 1 ? Color.RED : Color.BLACK;
- }
- }
}