Merge branch 'tp32'
Conflicts:
gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/SerializationTest.java
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/918d986c
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/918d986c
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/918d986c
Branch: refs/heads/master
Commit: 918d986c0309dbb4a3c9add8d9ad10682c7b82e2
Parents: 2f1a9d0 a94baa0
Author: Stephen Mallette <[email protected]>
Authored: Thu Jan 11 10:26:43 2018 -0500
Committer: Stephen Mallette <[email protected]>
Committed: Thu Jan 11 10:26:43 2018 -0500
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../gremlin/structure/SerializationTest.java | 18 +++++++++---------
2 files changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/918d986c/CHANGELOG.asciidoc
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/918d986c/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/SerializationTest.java
----------------------------------------------------------------------
diff --cc
gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/SerializationTest.java
index 60a42ba,1de30de..4935175
---
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/SerializationTest.java
+++
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/SerializationTest.java
@@@ -571,22 -375,22 +571,22 @@@ public class SerializationTest
@Test
@LoadGraphWith(LoadGraphWith.GraphData.MODERN)
public void shouldSerializeTree() throws Exception {
- final ObjectMapper mapper =
graph.io(GraphSONIo.build()).mapper().create().createMapper();
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V1_0)).mapper().version(GraphSONVersion.V1_0).create().createMapper();
final Tree t =
g.V(convertToVertexId("marko")).out().properties("name").tree().next();
final String json = mapper.writeValueAsString(t);
--
++
final HashMap<String, Object> m = (HashMap<String, Object>)
mapper.readValue(json, mapTypeReference);
--
++
// Check Structure
assertEquals(1, m.size());
assertTrue(m.containsKey(convertToVertexId("marko").toString()));
--
++
// Check Structure n+1
final HashMap<String, Object> branch = (HashMap<String, Object>)
m.get(convertToVertexId("marko").toString());
assertEquals(2, branch.size());
assertTrue(branch.containsKey(GraphSONTokens.KEY));
assertTrue(branch.containsKey(GraphSONTokens.VALUE));
--
++
//Check n+1 key (traversed element)
final HashMap<String, Object> branchKey = (HashMap<String,
Object>) branch.get(GraphSONTokens.KEY);
assertTrue(branchKey.containsKey(GraphSONTokens.ID));
@@@ -599,429 -403,19 +599,429 @@@
final HashMap<String, List<HashMap<String, Object>>>
branchKeyProps = (HashMap<String, List<HashMap<String, Object>>>)
branchKey.get(GraphSONTokens.PROPERTIES);
assertEquals("marko",
branchKeyProps.get("name").get(0).get("value"));
assertEquals(29, branchKeyProps.get("age").get(0).get("value"));
--
++
//Check n+1 value (traversed element)
final HashMap<String, Object> branchValue = (HashMap<String,
Object>) branch.get(GraphSONTokens.VALUE);
assertEquals(3, branchValue.size());
assertTrue(branchValue.containsKey(convertToVertexId("vadas").toString()));
assertTrue(branchValue.containsKey(convertToVertexId("lop").toString()));
assertTrue(branchValue.containsKey(convertToVertexId("josh").toString()));
--
++
// Check that vp[] functioned properly
final HashMap<String, HashMap<String, Object>> branch2 =
(HashMap<String, HashMap<String, Object>>)
branchValue.get(convertToVertexId("vadas").toString());
assertTrue(branch2.containsKey(GraphSONTokens.KEY));
assertTrue(branch2.containsKey(GraphSONTokens.VALUE));
--
++
+ final Map.Entry entry =
branch2.get(GraphSONTokens.VALUE).entrySet().iterator().next();
+ final HashMap<String, HashMap<String, Object>> branch2Prop =
(HashMap<String, HashMap<String, Object>>) entry.getValue();
+
assertTrue(branch2Prop.get(GraphSONTokens.KEY).containsKey(GraphSONTokens.ID));
+
assertTrue(branch2Prop.get(GraphSONTokens.KEY).containsKey(GraphSONTokens.VALUE));
+
assertTrue(branch2Prop.get(GraphSONTokens.KEY).containsKey(GraphSONTokens.LABEL));
+ assertEquals("name",
branch2Prop.get(GraphSONTokens.KEY).get(GraphSONTokens.LABEL));
+ assertEquals("vadas",
branch2Prop.get(GraphSONTokens.KEY).get(GraphSONTokens.VALUE));
+ assertEquals(entry.getKey().toString(),
branch2Prop.get(GraphSONTokens.KEY).get(GraphSONTokens.ID).toString());
+ }
+ }
+
+ public static class GraphSONV2d0Test extends AbstractGremlinTest {
+ private final TypeReference<HashMap<String, Object>> mapTypeReference
= new TypeReference<HashMap<String, Object>>() {
+ };
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeVertex() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().version(GraphSONVersion.V2_0).create().createMapper();
+ final Vertex v =
graph.vertices(convertToVertexId("marko")).next();
+ final String json = mapper.writeValueAsString(v);
+ final Vertex detached = mapper.readValue(json, Vertex.class);
+
+ assertNotNull(detached);
+ assertEquals(v.label(), detached.label());
+ assertEquals(v.id(), detached.id());
+ assertEquals(v.value("name").toString(), detached.value("name"));
+ assertEquals((Integer) v.value("age"), detached.value("age"));
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeEdge() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().version(GraphSONVersion.V2_0).create().createMapper();
+ final Edge e = g.E(convertToEdgeId("marko", "knows",
"vadas")).next();
+ final String json = mapper.writeValueAsString(e);
+ final Edge detached = mapper.readValue(json, Edge.class);
+
+ assertNotNull(detached);
+ assertEquals(e.label(), detached.label());
+ assertEquals(e.id(), detached.id());
+ assertEquals((Double) e.value("weight"),
detached.value("weight"));
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeProperty() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().version(GraphSONVersion.V2_0).create().createMapper();
+ final Property p = g.E(convertToEdgeId("marko", "knows",
"vadas")).next().property("weight");
+ final String json = mapper.writeValueAsString(p);
+ final Property detached = mapper.readValue(json, Property.class);
+
+ assertNotNull(detached);
+ assertEquals(p.key(), detached.key());
+ assertEquals(p.value(), detached.value());
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeVertexProperty() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().version(GraphSONVersion.V2_0).create().createMapper();
+ final VertexProperty vp =
graph.vertices(convertToVertexId("marko")).next().property("name");
+ final String json = mapper.writeValueAsString(vp);
+ final VertexProperty detached = mapper.readValue(json,
VertexProperty.class);
+
+ assertNotNull(detached);
+ assertEquals(vp.label(), detached.label());
+ assertEquals(vp.id(), detached.id());
+ assertEquals(vp.value(), detached.value());
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.CREW)
+ public void shouldSerializeVertexPropertyWithProperties() throws
Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().version(GraphSONVersion.V2_0).create().createMapper();
+ final VertexProperty vp =
IteratorUtils.filter(graph.vertices(convertToVertexId("marko")).next().properties("location"),
p -> p.value().equals("brussels")).next();
+ final String json = mapper.writeValueAsString(vp);
+ final VertexProperty<?> detached = mapper.readValue(json,
VertexProperty.class);
+
+ assertNotNull(detached);
+ assertEquals(vp.label(), detached.label());
+ assertEquals(vp.id(), detached.id());
+ assertEquals(vp.value(), detached.value());
+ assertEquals(vp.values("startTime").next(),
detached.values("startTime").next());
+ assertEquals(((Property)
vp.properties("startTime").next()).key(), ((Property)
detached.properties("startTime").next()).key());
+ assertEquals(vp.values("endTime").next(),
detached.values("endTime").next());
+ assertEquals(((Property) vp.properties("endTime").next()).key(),
((Property) detached.properties("endTime").next()).key());
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializePath() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().version(GraphSONVersion.V2_0).create().createMapper();
+ final Path p =
g.V(convertToVertexId("marko")).as("a").outE().as("b").inV().as("c").path()
+ .filter(t -> ((Vertex)
t.get().objects().get(2)).value("name").equals("lop")).next();
+ final String json = mapper.writeValueAsString(p);
+ final Path detached = mapper.readValue(json, Path.class);
+
+ assertNotNull(detached);
+ assertEquals(p.labels().size(), detached.labels().size());
+ assertEquals(p.labels().get(0).size(),
detached.labels().get(0).size());
+ assertEquals(p.labels().get(1).size(),
detached.labels().get(1).size());
+ assertEquals(p.labels().get(2).size(),
detached.labels().get(2).size());
+
assertTrue(p.labels().stream().flatMap(Collection::stream).allMatch(detached::hasLabel));
+
+ final Vertex vOut = p.get("a");
+ final Vertex detachedVOut = detached.get("a");
+ assertEquals(vOut.label(), detachedVOut.label());
+ assertEquals(vOut.id(), detachedVOut.id());
+
+ // TODO: dunno GraphSON seems to return properties - will make
this more consistent here
+ // this is a SimpleTraverser so no properties are present in
detachment
+ //assertFalse(detachedVOut.properties().hasNext());
+
+ final Edge e = p.get("b");
+ final Edge detachedE = detached.get("b");
+ assertEquals(e.label(), detachedE.label());
+ assertEquals(e.id(), detachedE.id());
+
+ // TODO: dunno GraphSON seems to return properties - will make
this more consistent here
+ // this is a SimpleTraverser so no properties are present in
detachment
+ //assertFalse(detachedE.properties().hasNext());
+
+ final Vertex vIn = p.get("c");
+ final Vertex detachedVIn = detached.get("c");
+ assertEquals(vIn.label(), detachedVIn.label());
+ assertEquals(vIn.id(), detachedVIn.id());
+
+ // TODO: dunno GraphSON seems to return properties - will make
this more consistent here
+ // this is a SimpleTraverser so no properties are present in
detachment
+ //assertFalse(detachedVIn.properties().hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeTraversalMetrics() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().version(GraphSONVersion.V2_0).create().createMapper();
+ final TraversalMetrics before = g.V().both().profile().next();
+ final String json = mapper.writeValueAsString(before);
+ final TraversalMetrics after = mapper.readValue(json,
TraversalMetrics.class);
+
+ assertNotNull(after);
+ assertEquals(before.getMetrics().size(),
after.getMetrics().size());
+ assertEquals(before.getDuration(TimeUnit.MILLISECONDS),
after.getDuration(TimeUnit.MILLISECONDS));
+ assertEquals(before.getMetrics().size(),
after.getMetrics().size());
+
+ before.getMetrics().forEach(b -> {
+ final Optional<? extends Metrics> mFromA =
after.getMetrics().stream().filter(a ->
b.getId().equals(a.getId())).findFirst();
+ if (mFromA.isPresent()) {
+ final Metrics m = mFromA.get();
+ assertEquals(b.getAnnotations(), m.getAnnotations());
+ assertEquals(b.getCounts(), m.getCounts());
+ assertEquals(b.getName(), m.getName());
+ assertEquals(b.getDuration(TimeUnit.MILLISECONDS),
m.getDuration(TimeUnit.MILLISECONDS));
+ } else {
+ fail("Metrics were not present after deserialization");
+ }
+ });
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ @org.junit.Ignore("TINKERPOP-1509")
+ public void shouldSerializeTree() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().version(GraphSONVersion.V2_0).create().createMapper();
+ final Tree t =
g.V(convertToVertexId("marko")).out().properties("name").tree().next();
+ final String json = mapper.writeValueAsString(t);
+
+ final HashMap<String, Object> m = (HashMap<String, Object>)
mapper.readValue(json, mapTypeReference);
+
+ // Check Structure
+ assertEquals(1, m.size());
+ assertTrue(m.containsKey(convertToVertexId("marko").toString()));
+
+ // Check Structure n+1
+ final HashMap<String, Object> branch = (HashMap<String, Object>)
m.get(convertToVertexId("marko").toString());
+ assertEquals(2, branch.size());
+ assertTrue(branch.containsKey(GraphSONTokens.KEY));
+ assertTrue(branch.containsKey(GraphSONTokens.VALUE));
+
+ //Check n+1 key (traversed element)
+ final HashMap<String, Object> branchKey = (HashMap<String,
Object>) branch.get(GraphSONTokens.KEY);
+ assertTrue(branchKey.containsKey(GraphSONTokens.ID));
+ assertTrue(branchKey.containsKey(GraphSONTokens.LABEL));
+ assertTrue(branchKey.containsKey(GraphSONTokens.TYPE));
+ assertTrue(branchKey.containsKey(GraphSONTokens.PROPERTIES));
+ assertEquals(convertToVertexId("marko").toString(),
branchKey.get(GraphSONTokens.ID).toString());
+ assertEquals("person", branchKey.get(GraphSONTokens.LABEL));
+ assertEquals("vertex", branchKey.get(GraphSONTokens.TYPE));
+ final HashMap<String, List<HashMap<String, Object>>>
branchKeyProps = (HashMap<String, List<HashMap<String, Object>>>)
branchKey.get(GraphSONTokens.PROPERTIES);
+ assertEquals("marko",
branchKeyProps.get("name").get(0).get("value"));
+ assertEquals(29, branchKeyProps.get("age").get(0).get("value"));
+
+ //Check n+1 value (traversed element)
+ final HashMap<String, Object> branchValue = (HashMap<String,
Object>) branch.get(GraphSONTokens.VALUE);
+ assertEquals(3, branchValue.size());
+
assertTrue(branchValue.containsKey(convertToVertexId("vadas").toString()));
+
assertTrue(branchValue.containsKey(convertToVertexId("lop").toString()));
+
assertTrue(branchValue.containsKey(convertToVertexId("josh").toString()));
+
+ // Check that vp[] functioned properly
+ final HashMap<String, HashMap<String, Object>> branch2 =
(HashMap<String, HashMap<String, Object>>)
branchValue.get(convertToVertexId("vadas").toString());
+ assertTrue(branch2.containsKey(GraphSONTokens.KEY));
+ assertTrue(branch2.containsKey(GraphSONTokens.VALUE));
+
+ final Map.Entry entry =
branch2.get(GraphSONTokens.VALUE).entrySet().iterator().next();
+ final HashMap<String, HashMap<String, Object>> branch2Prop =
(HashMap<String, HashMap<String, Object>>) entry.getValue();
+
assertTrue(branch2Prop.get(GraphSONTokens.KEY).containsKey(GraphSONTokens.ID));
+
assertTrue(branch2Prop.get(GraphSONTokens.KEY).containsKey(GraphSONTokens.VALUE));
+
assertTrue(branch2Prop.get(GraphSONTokens.KEY).containsKey(GraphSONTokens.LABEL));
+ assertEquals("name",
branch2Prop.get(GraphSONTokens.KEY).get(GraphSONTokens.LABEL));
+ assertEquals("vadas",
branch2Prop.get(GraphSONTokens.KEY).get(GraphSONTokens.VALUE));
+ assertEquals(entry.getKey().toString(),
branch2Prop.get(GraphSONTokens.KEY).get(GraphSONTokens.ID).toString());
+ }
+ }
+
+ public static class GraphSONV3d0Test extends AbstractGremlinTest {
+ private final TypeReference<HashMap<String, Object>> mapTypeReference
= new TypeReference<HashMap<String, Object>>() {
+ };
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeVertex() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().version(GraphSONVersion.V3_0).create().createMapper();
+ final Vertex v =
graph.vertices(convertToVertexId("marko")).next();
+ final String json = mapper.writeValueAsString(v);
+ final Vertex detached = mapper.readValue(json, Vertex.class);
+
+ assertNotNull(detached);
+ assertEquals(v.label(), detached.label());
+ assertEquals(v.id(), detached.id());
+ assertEquals(v.value("name").toString(), detached.value("name"));
+ assertEquals((Integer) v.value("age"), detached.value("age"));
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeEdge() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().version(GraphSONVersion.V3_0).create().createMapper();
+ final Edge e = g.E(convertToEdgeId("marko", "knows",
"vadas")).next();
+ final String json = mapper.writeValueAsString(e);
+ final Edge detached = mapper.readValue(json, Edge.class);
+
+ assertNotNull(detached);
+ assertEquals(e.label(), detached.label());
+ assertEquals(e.id(), detached.id());
+ assertEquals((Double) e.value("weight"),
detached.value("weight"));
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeProperty() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().version(GraphSONVersion.V3_0).create().createMapper();
+ final Property p = g.E(convertToEdgeId("marko", "knows",
"vadas")).next().property("weight");
+ final String json = mapper.writeValueAsString(p);
+ final Property detached = mapper.readValue(json, Property.class);
+
+ assertNotNull(detached);
+ assertEquals(p.key(), detached.key());
+ assertEquals(p.value(), detached.value());
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeVertexProperty() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().version(GraphSONVersion.V3_0).create().createMapper();
+ final VertexProperty vp =
graph.vertices(convertToVertexId("marko")).next().property("name");
+ final String json = mapper.writeValueAsString(vp);
+ final VertexProperty detached = mapper.readValue(json,
VertexProperty.class);
+
+ assertNotNull(detached);
+ assertEquals(vp.label(), detached.label());
+ assertEquals(vp.id(), detached.id());
+ assertEquals(vp.value(), detached.value());
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.CREW)
+ public void shouldSerializeVertexPropertyWithProperties() throws
Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().version(GraphSONVersion.V3_0).create().createMapper();
+ final VertexProperty vp =
IteratorUtils.filter(graph.vertices(convertToVertexId("marko")).next().properties("location"),
p -> p.value().equals("brussels")).next();
+ final String json = mapper.writeValueAsString(vp);
+ final VertexProperty<?> detached = mapper.readValue(json,
VertexProperty.class);
+
+ assertNotNull(detached);
+ assertEquals(vp.label(), detached.label());
+ assertEquals(vp.id(), detached.id());
+ assertEquals(vp.value(), detached.value());
+ assertEquals(vp.values("startTime").next(),
detached.values("startTime").next());
+ assertEquals(((Property)
vp.properties("startTime").next()).key(), ((Property)
detached.properties("startTime").next()).key());
+ assertEquals(vp.values("endTime").next(),
detached.values("endTime").next());
+ assertEquals(((Property) vp.properties("endTime").next()).key(),
((Property) detached.properties("endTime").next()).key());
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializePath() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().version(GraphSONVersion.V3_0).create().createMapper();
+ final Path p =
g.V(convertToVertexId("marko")).as("a").outE().as("b").inV().as("c").path()
+ .filter(t -> ((Vertex)
t.get().objects().get(2)).value("name").equals("lop")).next();
+ final String json = mapper.writeValueAsString(p);
+ final Path detached = mapper.readValue(json, Path.class);
+
+ assertNotNull(detached);
+ assertEquals(p.labels().size(), detached.labels().size());
+ assertEquals(p.labels().get(0).size(),
detached.labels().get(0).size());
+ assertEquals(p.labels().get(1).size(),
detached.labels().get(1).size());
+ assertEquals(p.labels().get(2).size(),
detached.labels().get(2).size());
+
assertTrue(p.labels().stream().flatMap(Collection::stream).allMatch(detached::hasLabel));
+
+ final Vertex vOut = p.get("a");
+ final Vertex detachedVOut = detached.get("a");
+ assertEquals(vOut.label(), detachedVOut.label());
+ assertEquals(vOut.id(), detachedVOut.id());
+
+ // TODO: dunno GraphSON seems to return properties - will make
this more consistent here
+ // this is a SimpleTraverser so no properties are present in
detachment
+ //assertFalse(detachedVOut.properties().hasNext());
+
+ final Edge e = p.get("b");
+ final Edge detachedE = detached.get("b");
+ assertEquals(e.label(), detachedE.label());
+ assertEquals(e.id(), detachedE.id());
+
+ // TODO: dunno GraphSON seems to return properties - will make
this more consistent here
+ // this is a SimpleTraverser so no properties are present in
detachment
+ //assertFalse(detachedE.properties().hasNext());
+
+ final Vertex vIn = p.get("c");
+ final Vertex detachedVIn = detached.get("c");
+ assertEquals(vIn.label(), detachedVIn.label());
+ assertEquals(vIn.id(), detachedVIn.id());
+
+ // TODO: dunno GraphSON seems to return properties - will make
this more consistent here
+ // this is a SimpleTraverser so no properties are present in
detachment
+ //assertFalse(detachedVIn.properties().hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSerializeTraversalMetrics() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().version(GraphSONVersion.V3_0).create().createMapper();
+ final TraversalMetrics before = g.V().both().profile().next();
+ final String json = mapper.writeValueAsString(before);
+ final TraversalMetrics after = mapper.readValue(json,
TraversalMetrics.class);
+
+ assertNotNull(after);
+ assertEquals(before.getMetrics().size(),
after.getMetrics().size());
+ assertEquals(before.getDuration(TimeUnit.MILLISECONDS),
after.getDuration(TimeUnit.MILLISECONDS));
+ assertEquals(before.getMetrics().size(),
after.getMetrics().size());
+
+ before.getMetrics().forEach(b -> {
+ final Optional<? extends Metrics> mFromA =
after.getMetrics().stream().filter(a ->
b.getId().equals(a.getId())).findFirst();
+ if (mFromA.isPresent()) {
+ final Metrics m = mFromA.get();
+ assertEquals(b.getAnnotations(), m.getAnnotations());
+ assertEquals(b.getCounts(), m.getCounts());
+ assertEquals(b.getName(), m.getName());
+ assertEquals(b.getDuration(TimeUnit.MILLISECONDS),
m.getDuration(TimeUnit.MILLISECONDS));
+ } else {
+ fail("Metrics were not present after deserialization");
+ }
+ });
+ }
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ @org.junit.Ignore("TINKERPOP-1509")
+ public void shouldSerializeTree() throws Exception {
+ final ObjectMapper mapper =
graph.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().version(GraphSONVersion.V3_0).create().createMapper();
+ final Tree t =
g.V(convertToVertexId("marko")).out().properties("name").tree().next();
+ final String json = mapper.writeValueAsString(t);
+
+ final HashMap<String, Object> m = (HashMap<String, Object>)
mapper.readValue(json, mapTypeReference);
+
+ // Check Structure
+ assertEquals(1, m.size());
+ assertTrue(m.containsKey(convertToVertexId("marko").toString()));
+
+ // Check Structure n+1
+ final HashMap<String, Object> branch = (HashMap<String, Object>)
m.get(convertToVertexId("marko").toString());
+ assertEquals(2, branch.size());
+ assertTrue(branch.containsKey(GraphSONTokens.KEY));
+ assertTrue(branch.containsKey(GraphSONTokens.VALUE));
+
+ //Check n+1 key (traversed element)
+ final HashMap<String, Object> branchKey = (HashMap<String,
Object>) branch.get(GraphSONTokens.KEY);
+ assertTrue(branchKey.containsKey(GraphSONTokens.ID));
+ assertTrue(branchKey.containsKey(GraphSONTokens.LABEL));
+ assertTrue(branchKey.containsKey(GraphSONTokens.TYPE));
+ assertTrue(branchKey.containsKey(GraphSONTokens.PROPERTIES));
+ assertEquals(convertToVertexId("marko").toString(),
branchKey.get(GraphSONTokens.ID).toString());
+ assertEquals("person", branchKey.get(GraphSONTokens.LABEL));
+ assertEquals("vertex", branchKey.get(GraphSONTokens.TYPE));
+ final HashMap<String, List<HashMap<String, Object>>>
branchKeyProps = (HashMap<String, List<HashMap<String, Object>>>)
branchKey.get(GraphSONTokens.PROPERTIES);
+ assertEquals("marko",
branchKeyProps.get("name").get(0).get("value"));
+ assertEquals(29, branchKeyProps.get("age").get(0).get("value"));
+
+ //Check n+1 value (traversed element)
+ final HashMap<String, Object> branchValue = (HashMap<String,
Object>) branch.get(GraphSONTokens.VALUE);
+ assertEquals(3, branchValue.size());
+
assertTrue(branchValue.containsKey(convertToVertexId("vadas").toString()));
+
assertTrue(branchValue.containsKey(convertToVertexId("lop").toString()));
+
assertTrue(branchValue.containsKey(convertToVertexId("josh").toString()));
+
+ // Check that vp[] functioned properly
+ final HashMap<String, HashMap<String, Object>> branch2 =
(HashMap<String, HashMap<String, Object>>)
branchValue.get(convertToVertexId("vadas").toString());
+ assertTrue(branch2.containsKey(GraphSONTokens.KEY));
+ assertTrue(branch2.containsKey(GraphSONTokens.VALUE));
+
final Map.Entry entry =
branch2.get(GraphSONTokens.VALUE).entrySet().iterator().next();
final HashMap<String, HashMap<String, Object>> branch2Prop =
(HashMap<String, HashMap<String, Object>>) entry.getValue();
assertTrue(branch2Prop.get(GraphSONTokens.KEY).containsKey(GraphSONTokens.ID));