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 2017/07/10 21:26:08 UTC
[26/50] [abbrv] tinkerpop git commit: TINKERPOP-1698 Refactored gryo
serialization tests
TINKERPOP-1698 Refactored gryo serialization tests
Did a better job parameterizing tests for re-use.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b9e5490b
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b9e5490b
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b9e5490b
Branch: refs/heads/TINKERPOP-1427
Commit: b9e5490b9248392eb57fb6f2e88f9bfddedcc531
Parents: cfcdd26
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Jun 26 11:19:29 2017 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Jul 10 14:14:02 2017 -0400
----------------------------------------------------------------------
.../ser/GryoBaseMessageSerializerTest.java | 617 -------------------
.../ser/GryoMessageSerializerV1d0Test.java | 575 ++++++++++++++++-
.../gremlin/structure/FeatureSupportTest.java | 6 +-
3 files changed, 571 insertions(+), 627 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b9e5490b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoBaseMessageSerializerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoBaseMessageSerializerTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoBaseMessageSerializerTest.java
deleted file mode 100644
index fff95dd..0000000
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoBaseMessageSerializerTest.java
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- * 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.GryoClassResolverV1d0;
-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 GryoBaseMessageSerializerTest {
- @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);
-
- final GryoMessageSerializerV3d0 v3d0Text = new GryoMessageSerializerV3d0();
- v3d0Text.configure(config, null);
-
- return Arrays.asList(new Object[][]{
- {"V1d0", new GryoMessageSerializerV1d0(), v1d0Text},
- {"V1d0Lite", new GryoLiteMessageSerializerV1d0(), v1d0LiteText },
- {"V3d0", new GryoMessageSerializerV3d0(), v3d0Text}});
- }
-
- @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 shouldConfigureIoRegistryInstance() throws Exception {
- final MessageSerializer serializer = new GryoMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Arrays.asList(ColorIoRegistryInstance.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 shouldConfigureIoRegistryGetInstance() throws Exception {
- final MessageSerializer serializer = new GryoMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Arrays.asList(ColorIoRegistryGetInstance.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 shouldConfigureCustomClassResolverFromGetInstance() {
- final MessageSerializer serializer = new GryoMessageSerializerV1d0();
- final Map<String, Object> config = new HashMap<String, Object>() {{
- put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplierAsGetInstance.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);
-
- final 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 instance() {
- return instance;
- }
-
- @Override
- public ClassResolver get() {
- return new ErrorOnlyClassResolver();
- }
- }
-
- public static class ErrorOnlyClassResolverSupplierAsGetInstance implements Supplier<ClassResolver> {
-
- private static final ErrorOnlyClassResolverSupplierAsInstance instance = new ErrorOnlyClassResolverSupplierAsInstance();
-
- private ErrorOnlyClassResolverSupplierAsGetInstance() {}
-
- 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 GryoClassResolverV1d0 {
- @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 ColorIoRegistryInstance extends AbstractIoRegistry {
-
- private static final ColorIoRegistry instance = new ColorIoRegistry();
-
- private ColorIoRegistryInstance() {
- register(GryoIo.class, Color.class, new ColorSerializer());
- }
-
- public static ColorIoRegistry instance() {
- return instance;
- }
- }
-
- public static class ColorIoRegistryGetInstance extends AbstractIoRegistry {
-
- private static final ColorIoRegistry instance = new ColorIoRegistry();
-
- private ColorIoRegistryGetInstance() {
- register(GryoIo.class, Color.class, new ColorSerializer());
- }
-
- public static ColorIoRegistry getInstance() {
- return instance;
- }
- }
-
- 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/tinkerpop/blob/b9e5490b/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 36e17c0..9472033 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
@@ -21,36 +21,79 @@ 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.GryoClassResolverV1d0;
+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 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.Color;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+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.hamcrest.core.IsNot.not;
+import static org.hamcrest.core.StringContains.containsString;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeThat;
/**
* Serializer tests that cover non-lossy serialization/deserialization methods.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
+@RunWith(Parameterized.class)
public class GryoMessageSerializerV1d0Test {
- private static final Map<String, Object> config = new HashMap<String, Object>() {{
+ @Parameterized.Parameters(name = "expect({0})")
+ public static Iterable<Object[]> data() {
+ return Arrays.asList(new Object[][]{
+ {"V1d0", (Supplier<?>) GryoMessageSerializerV1d0::new},
+ {"V1d0Lite", (Supplier<?>) GryoLiteMessageSerializerV1d0::new },
+ {"V3d0", (Supplier<?>) GryoMessageSerializerV3d0::new}});
+ }
+
+ @Parameterized.Parameter(value = 0)
+ public String name;
+
+ @Parameterized.Parameter(value = 1)
+ public Supplier<MessageSerializer> serializerSupplier;
+
+ private static final Map<String, Object> configForText = new HashMap<String, Object>() {{
put(GryoMessageSerializerV1d0.TOKEN_SERIALIZE_RESULT_TO_STRING, true);
}};
@@ -58,10 +101,421 @@ public class GryoMessageSerializerV1d0Test {
private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
- public MessageSerializer binarySerializer = new GryoMessageSerializerV1d0();
+ @Test
+ public void shouldConfigureIoRegistry() throws Exception {
+ final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Collections.singletonList(ColorIoRegistry.class.getName()));
+ }};
+
+ final MessageSerializer serializer = serializerSupplier.get();
+ 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 shouldConfigureIoRegistryInstance() throws Exception {
+ final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Collections.singletonList(ColorIoRegistryInstance.class.getName()));
+ }};
+
+ final MessageSerializer serializer = serializerSupplier.get();
+ 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 shouldConfigureIoRegistryGetInstance() throws Exception {
+ final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Collections.singletonList(ColorIoRegistryGetInstance.class.getName()));
+ }};
+
+ final MessageSerializer serializer = serializerSupplier.get();
+ 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 Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplier.class.getName());
+ }};
+
+ final MessageSerializer serializer = serializerSupplier.get();
+ 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 Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplierAsInstance.class.getName());
+ }};
+
+ final MessageSerializer serializer = serializerSupplier.get();
+ 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 shouldConfigureCustomClassResolverFromGetInstance() {
+ final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplierAsGetInstance.class.getName());
+ }};
+
+ final MessageSerializer serializer = serializerSupplier.get();
+ 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 MessageSerializer serializer = serializerSupplier.get();
+ final ByteBuf bb = serializer.serializeResponseAsBinary(response, allocator);
+ final ResponseMessage deserialized = serializer.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);
+
+ final 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 MessageSerializer serializer = serializerSupplier.get();
+ final ByteBuf bb = serializer.serializeRequestAsBinary(request, allocator);
+ final int mimeLen = bb.readByte();
+ bb.readBytes(new byte[mimeLen]);
+ final RequestMessage deserialized = serializer.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());
+ }
@Test
public void shouldSerializeEdge() throws Exception {
+ assumeThat(name, not(containsString("V1d0Lite")));
+
final Graph g = TinkerGraph.open();
final Vertex v1 = g.addVertex();
final Vertex v2 = g.addVertex();
@@ -73,7 +527,7 @@ public class GryoMessageSerializerV1d0Test {
final ResponseMessage response = convertBinary(iterable);
assertCommon(response);
- final List<DetachedEdge> edgeList = (List<DetachedEdge>) response.getResult().getData();
+ final java.util.List<DetachedEdge> edgeList = (java.util.List<DetachedEdge>) response.getResult().getData();
assertEquals(1, edgeList.size());
final DetachedEdge deserializedEdge = edgeList.get(0);
@@ -90,6 +544,8 @@ public class GryoMessageSerializerV1d0Test {
@Test
public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
+ assumeThat(name, not(containsString("V1d0Lite")));
+
final Graph g = TinkerGraph.open();
final Vertex v = g.addVertex();
final Map<String, Object> map = new HashMap<>();
@@ -103,12 +559,12 @@ public class GryoMessageSerializerV1d0Test {
v.property(VertexProperty.Cardinality.single, "friends", friends);
- final List list = IteratorUtils.list(g.vertices());
+ final java.util.List list = IteratorUtils.list(g.vertices());
final ResponseMessage response = convertBinary(list);
assertCommon(response);
- final List<DetachedVertex> vertexList = (List<DetachedVertex>) response.getResult().getData();
+ final java.util.List<DetachedVertex> vertexList = (java.util.List<DetachedVertex>) response.getResult().getData();
assertEquals(1, vertexList.size());
final DetachedVertex deserializedVertex = vertexList.get(0);
@@ -117,7 +573,7 @@ public class GryoMessageSerializerV1d0Test {
assertEquals(1, IteratorUtils.count(deserializedVertex.properties()));
- final List<Object> deserializedInnerList = (List<Object>) deserializedVertex.values("friends").next();
+ final java.util.List<Object> deserializedInnerList = (java.util.List<Object>) deserializedVertex.values("friends").next();
assertEquals(3, deserializedInnerList.size());
assertEquals("x", deserializedInnerList.get(0));
assertEquals(5, deserializedInnerList.get(1));
@@ -130,6 +586,8 @@ public class GryoMessageSerializerV1d0Test {
@Test
public void shouldSerializeToMapWithElementForKey() throws Exception {
+ assumeThat(name, not(containsString("V1d0Lite")));
+
final TinkerGraph graph = TinkerFactory.createClassic();
final GraphTraversalSource g = graph.traversal();
final Map<Vertex, Integer> map = new HashMap<>();
@@ -151,13 +609,112 @@ public class GryoMessageSerializerV1d0Test {
assertEquals(new Integer(1000), deserializedMap.values().iterator().next());
}
+
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);
+ final MessageSerializer serializer = serializerSupplier.get();
+ final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+ return serializer.deserializeResponse(bb);
+ }
+
+ private ResponseMessage convertText(final Object toSerialize) throws SerializationException {
+ final MessageSerializer serializer = serializerSupplier.get();
+ serializer.configure(configForText, null);
+ final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+ return serializer.deserializeResponse(bb);
+ }
+
+ public static class ErrorOnlyClassResolverSupplierAsInstance implements Supplier<ClassResolver> {
+
+ private static final ErrorOnlyClassResolverSupplierAsInstance instance = new ErrorOnlyClassResolverSupplierAsInstance();
+
+ private ErrorOnlyClassResolverSupplierAsInstance() {}
+
+ public static ErrorOnlyClassResolverSupplierAsInstance instance() {
+ return instance;
+ }
+
+ @Override
+ public ClassResolver get() {
+ return new ErrorOnlyClassResolver();
+ }
+ }
+
+ public static class ErrorOnlyClassResolverSupplierAsGetInstance implements Supplier<ClassResolver> {
+
+ private static final ErrorOnlyClassResolverSupplierAsInstance instance = new ErrorOnlyClassResolverSupplierAsInstance();
+
+ private ErrorOnlyClassResolverSupplierAsGetInstance() {}
+
+ 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 GryoClassResolverV1d0 {
+ @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 ColorIoRegistryInstance extends AbstractIoRegistry {
+
+ private static final ColorIoRegistry instance = new ColorIoRegistry();
+
+ private ColorIoRegistryInstance() {
+ register(GryoIo.class, Color.class, new ColorSerializer());
+ }
+
+ public static ColorIoRegistry instance() {
+ return instance;
+ }
+ }
+
+ public static class ColorIoRegistryGetInstance extends AbstractIoRegistry {
+
+ private static final ColorIoRegistry instance = new ColorIoRegistry();
+
+ private ColorIoRegistryGetInstance() {
+ register(GryoIo.class, Color.class, new ColorSerializer());
+ }
+
+ public static ColorIoRegistry getInstance() {
+ return instance;
+ }
+ }
+
+ 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/tinkerpop/blob/b9e5490b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/FeatureSupportTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/FeatureSupportTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/FeatureSupportTest.java
index 0c8cbdd..f664b1e 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/FeatureSupportTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/FeatureSupportTest.java
@@ -44,7 +44,11 @@ import static org.apache.tinkerpop.gremlin.structure.Graph.Features.GraphFeature
import static org.apache.tinkerpop.gremlin.structure.Graph.Features.VariableFeatures.FEATURE_VARIABLES;
import static org.apache.tinkerpop.gremlin.structure.Graph.Features.VertexFeatures.FEATURE_USER_SUPPLIED_IDS;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeThat;