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/06/30 17:34:18 UTC

[49/50] [abbrv] tinkerpop git commit: Improved typed GraphSON deser tests.

Improved typed GraphSON deser tests.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/16e26b51
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/16e26b51
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/16e26b51

Branch: refs/heads/TINKERPOP-1274
Commit: 16e26b515016f61b96375a334ae45536fb483b8d
Parents: a9bf7ea
Author: Kevin Gallardo <ke...@datastax.com>
Authored: Thu Jun 30 12:02:47 2016 +0100
Committer: Kevin Gallardo <ke...@datastax.com>
Committed: Thu Jun 30 12:02:47 2016 +0100

----------------------------------------------------------------------
 .../TinkerGraphGraphSONSerializerV2d0Test.java  | 167 +++++++++++++++++++
 1 file changed, 167 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/16e26b51/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
index a4c03cb..be7429f 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
@@ -18,7 +18,12 @@
  */
 package org.apache.tinkerpop.gremlin.tinkergraph.structure;
 
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
 import org.apache.tinkerpop.gremlin.structure.io.GraphWriter;
 import org.apache.tinkerpop.gremlin.structure.io.IoTest;
@@ -34,9 +39,12 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.time.Duration;
+import java.util.Iterator;
 import java.util.UUID;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 
 public class TinkerGraphGraphSONSerializerV2d0Test {
@@ -55,6 +63,9 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
             .addRegistry(TinkerIoRegistryV2d0.getInstance())
             .create();
 
+    /**
+     * Checks that the graph has been fully ser/deser with types.
+     */
     @Test
     public void shouldDeserializeGraphSONIntoTinkerGraphWithPartialTypes() throws IOException {
         GraphWriter writer = getWriter(defaultMapperV2d0);
@@ -68,6 +79,9 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
         }
     }
 
+    /**
+     * Checks that the graph has been fully ser/deser without types.
+     */
     @Test
     public void shouldDeserializeGraphSONIntoTinkerGraphWithoutTypes() throws IOException {
         GraphWriter writer = getWriter(noTypesMapperV2d0);
@@ -81,6 +95,104 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
         }
     }
 
+    /**
+     * Thorough types verification for Vertex ids, Vertex props, Edge ids, Edge props
+     */
+    @Test
+    public void shouldDeserializeGraphSONIntoTinkerGraphKeepingTypes() throws IOException {
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+        Vertex v1 = baseModern.addVertex(T.id, 100L, "name", "kevin", "uuid", UUID.randomUUID());
+        v1.addEdge("hello", baseModern.traversal().V().has("name", "marko").next(), T.id, 101L,
+                "uuid", UUID.randomUUID());
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, baseModern);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            assertTrue(approximateGraphsCheck(baseModern, read));
+        }
+    }
+
+    /**
+     * Asserts the approximateGraphsChecks function fails when expected. Vertex ids.
+     */
+    @Test
+    public void shouldLooseTypesWithGraphSONNoTypesForVertexIds() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        baseModern.addVertex(T.id, 100L, "name", "kevin");
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, baseModern);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            // Should fail on deserialized vertex Id.
+            assertFalse(approximateGraphsCheck(baseModern, read));
+        }
+    }
+
+    /**
+     * Asserts the approximateGraphsChecks function fails when expected. Vertex props.
+     */
+    @Test
+    public void shouldLooseTypesWithGraphSONNoTypesForVertexProps() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        baseModern.addVertex(T.id, 100, "name", "kevin", "uuid", UUID.randomUUID());
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, baseModern);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            // Should fail on deserialized vertex prop.
+            assertFalse(approximateGraphsCheck(baseModern, read));
+        }
+    }
+
+    /**
+     * Asserts the approximateGraphsChecks function fails when expected. Edge ids.
+     */
+    @Test
+    public void shouldLooseTypesWithGraphSONNoTypesForEdgeIds() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        Vertex v1 = baseModern.addVertex(T.id, 100, "name", "kevin");
+        v1.addEdge("hello", baseModern.traversal().V().has("name", "marko").next(), T.id, 101L);
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, baseModern);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            // Should fail on deserialized edge Id.
+            assertFalse(approximateGraphsCheck(baseModern, read));
+        }
+    }
+
+    /**
+     * Asserts the approximateGraphsChecks function fails when expected. Edge props.
+     */
+    @Test
+    public void shouldLooseTypesWithGraphSONNoTypesForEdgeProps() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        Vertex v1 = baseModern.addVertex(T.id, 100, "name", "kevin");
+        v1.addEdge("hello", baseModern.traversal().V().has("name", "marko").next(), T.id, 101,
+                "uuid", UUID.randomUUID());
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, baseModern);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            // Should fail on deserialized edge prop.
+            assertFalse(approximateGraphsCheck(baseModern, read));
+        }
+    }
+
+    /**
+     * Those kinds of types are declared differently in the GraphSON type deserializer, check that all are handled
+     * properly.
+     */
     @Test
     public void shouldKeepTypesWhenDeserializingSerializedTinkerGraph() throws IOException {
         TinkerGraph tg = TinkerGraph.open();
@@ -122,4 +234,59 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
     private GraphReader getReader(Mapper paramMapper) {
         return GraphSONReader.build().mapper(paramMapper).create();
     }
+
+    /**
+     * Checks sequentially vertices and egdes of both graphs. Will check sequentially Vertex IDs, Vertex Properties IDs
+     * and values and classes. Then same for edges. To use when serializing a Graph and deserializing the supposedly
+     * same Graph.
+     */
+    private boolean approximateGraphsCheck(Graph g1, Graph g2) {
+        Iterator<Vertex> itV = g1.vertices();
+        Iterator<Vertex> itVRead = g2.vertices();
+
+        while (itV.hasNext()) {
+            Vertex v = itV.next();
+            Vertex vRead = itVRead.next();
+
+            // Will only check IDs but that's 'good' enough.
+            if (!v.equals(vRead)) {
+                return false;
+            }
+
+            Iterator itVP = v.properties();
+            Iterator itVPRead = vRead.properties();
+            while (itVP.hasNext()) {
+                VertexProperty vp = (VertexProperty) itVP.next();
+                VertexProperty vpRead = (VertexProperty) itVPRead.next();
+                if (!vp.value().equals(vpRead.value())
+                        || !vp.equals(vpRead)) {
+                    return false;
+                }
+            }
+        }
+
+        Iterator<Edge> itE = g1.edges();
+        Iterator<Edge> itERead = g2.edges();
+
+        while (itE.hasNext()) {
+            Edge e = itE.next();
+            Edge eRead = itERead.next();
+            // Will only check IDs but that's good enough.
+            if (!e.equals(eRead)) {
+                return false;
+            }
+
+            Iterator itEP = e.properties();
+            Iterator itEPRead = eRead.properties();
+            while (itEP.hasNext()) {
+                Property ep = (Property) itEP.next();
+                Property epRead = (Property) itEPRead.next();
+                if (!ep.value().equals(epRead.value())
+                        || !ep.equals(epRead)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
 }