Coverage Summary for Class: TestIoAgain (org.umlg.sqlg.test.io)

Class Method, % Branch, % Line, %
TestIoAgain 0% (0/20) 0% (0/12) 0% (0/119)
TestIoAgain$1 0% (0/1) 0% (0/1)
Total 0% (0/21) 0% (0/12) 0% (0/120)


 package org.umlg.sqlg.test.io;
 
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.TestHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
 import org.apache.tinkerpop.gremlin.structure.*;
 import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
 import org.apache.tinkerpop.gremlin.structure.io.GraphWriter;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONIo;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoVersion;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.umlg.sqlg.test.BaseTest;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
 import static org.junit.Assert.*;
 
 /**
  * @author <a href="https://github.com/pietermartin">Pieter Martin</a>
  * Date: 2018/06/24
  */
 @RunWith(Parameterized.class)
 public class TestIoAgain extends BaseTest  {
 
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
         return Arrays.asList(new Object[][]{
                 {"graphson-v1", false, false,
                         (Function<Graph, GraphReader>) g -> g.io(GraphSONIo.build(GraphSONVersion.V1_0)).reader().create(),
                         (Function<Graph, GraphWriter>) g -> g.io(GraphSONIo.build(GraphSONVersion.V1_0)).writer().create()},
                 {"graphson-v1-embedded", true, false,
                         (Function<Graph, GraphReader>) g -> g.io(GraphSONIo.build(GraphSONVersion.V1_0)).reader().mapper(g.io(GraphSONIo.build(GraphSONVersion.V1_0)).mapper().typeInfo(TypeInfo.PARTIAL_TYPES).create()).create(),
                         (Function<Graph, GraphWriter>) g -> g.io(GraphSONIo.build(GraphSONVersion.V1_0)).writer().mapper(g.io(GraphSONIo.build(GraphSONVersion.V1_0)).mapper().typeInfo(TypeInfo.PARTIAL_TYPES).create()).create()},
                 {"graphson-v2", false, false,
                         (Function<Graph, GraphReader>) g -> g.io(GraphSONIo.build(GraphSONVersion.V2_0)).reader().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
                         (Function<Graph, GraphWriter>) g -> g.io(GraphSONIo.build(GraphSONVersion.V2_0)).writer().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},
                 {"graphson-v2-embedded", true, false,
                         (Function<Graph, GraphReader>) g -> g.io(GraphSONIo.build(GraphSONVersion.V2_0)).reader().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().typeInfo(TypeInfo.PARTIAL_TYPES).create()).create(),
                         (Function<Graph, GraphWriter>) g -> g.io(GraphSONIo.build(GraphSONVersion.V2_0)).writer().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().typeInfo(TypeInfo.PARTIAL_TYPES).create()).create()},
                 {"graphson-v3", true, false,
                         (Function<Graph, GraphReader>) g -> g.io(GraphSONIo.build(GraphSONVersion.V3_0)).reader().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().create()).create(),
                         (Function<Graph, GraphWriter>) g -> g.io(GraphSONIo.build(GraphSONVersion.V3_0)).writer().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().create()).create()},
                 {"gryo-v1", true, true,
                         (Function<Graph, GraphReader>) g -> g.io(GryoIo.build(GryoVersion.V1_0)).reader().create(),
                         (Function<Graph, GraphWriter>) g -> g.io(GryoIo.build(GryoVersion.V1_0)).writer().create()},
                 {"gryo-v3", true, true,
                         (Function<Graph, GraphReader>) g -> g.io(GryoIo.build(GryoVersion.V3_0)).reader().create(),
                         (Function<Graph, GraphWriter>) g -> g.io(GryoIo.build(GryoVersion.V3_0)).writer().create()}
         });
     }
 
     @Parameterized.Parameter()
     public String ioType;
 
     @Parameterized.Parameter(value = 1)
     public boolean assertViaDirectEquality;
 
     @Parameterized.Parameter(value = 2)
     public boolean assertEdgesAtSameTimeAsVertex;
 
     @Parameterized.Parameter(value = 3)
     public Function<Graph, GraphReader> readerMaker;
 
     @Parameterized.Parameter(value = 4)
     public Function<Graph, GraphWriter> writerMaker;
 
 //    @Test
     public void shouldReadWriteVertexWithBOTHEdges() throws Exception {
         Graph graph = this.sqlgGraph;
         final Vertex v1 = graph.addVertex("name", "marko", T.label, "person");
 
         final Vertex v2 = graph.addVertex(T.label, "person");
         final Edge e1 = v2.addEdge("friends", v1, "weight", 0.5d);
         final Edge e2 = v1.addEdge("friends", v2, "weight", 1.0d);
 
         try (final ByteArrayOutputStream os = new ByteArrayOutputStream()) {
             final GraphWriter writer = writerMaker.apply(graph);
             writer.writeVertex(os, v1, Direction.BOTH);
 
             final AtomicBoolean calledVertex = new AtomicBoolean(false);
             final AtomicBoolean calledEdge1 = new AtomicBoolean(false);
             final AtomicBoolean calledEdge2 = new AtomicBoolean(false);
 
             final GraphReader reader = readerMaker.apply(graph);
             try (final ByteArrayInputStream bais = new ByteArrayInputStream(os.toByteArray())) {
                 reader.readVertex(bais, attachable -> {
                     final Vertex detachedVertex = attachable.get();
                     if (assertViaDirectEquality) {
                         TestHelper.validateVertexEquality(v1, detachedVertex, assertEdgesAtSameTimeAsVertex);
                     } else {
                         assertEquals(v1.id(), graph.vertices(detachedVertex.id().toString()).next().id());
                         assertEquals(v1.label(), detachedVertex.label());
                         assertEquals(1, IteratorUtils.count(detachedVertex.properties()));
                         assertEquals("marko", detachedVertex.value("name"));
                     }
                     calledVertex.set(true);
                     return detachedVertex;
                 }, attachable -> {
                     final Edge detachedEdge = attachable.get();
                     final Predicate<Edge> matcher = assertViaDirectEquality ? e -> detachedEdge.id().equals(e.id()) :
                             e -> graph.edges(detachedEdge.id().toString()).next().id().equals(e.id());
                     if (matcher.test(e1)) {
                         if (assertViaDirectEquality) {
                             TestHelper.validateEdgeEquality(e1, detachedEdge);
                         } else {
                             assertEquals(e1.id(), graph.edges(detachedEdge.id().toString()).next().id());
                             assertEquals(v1.id(), graph.vertices(detachedEdge.inVertex().id().toString()).next().id());
                             assertEquals(v2.id(), graph.vertices(detachedEdge.outVertex().id().toString()).next().id());
                             assertEquals(v2.label(), detachedEdge.inVertex().label());
                             assertEquals(e1.label(), detachedEdge.label());
                             assertEquals(1, IteratorUtils.count(detachedEdge.properties()));
                             assertEquals(0.5d, detachedEdge.value("weight"), 0.000001d);
                         }
                         calledEdge1.set(true);
                     } else if (matcher.test(e2)) {
                         if (assertViaDirectEquality) {
                             TestHelper.validateEdgeEquality(e2, detachedEdge);
                         } else {
                             assertEquals(e2.id(), graph.edges(detachedEdge.id().toString()).next().id());
                             assertEquals(v2.id(), graph.vertices(detachedEdge.inVertex().id().toString()).next().id());
                             assertEquals(v1.id(), graph.vertices(detachedEdge.outVertex().id().toString()).next().id());
                             assertEquals(v1.label(), detachedEdge.outVertex().label());
                             assertEquals(e2.label(), detachedEdge.label());
                             assertEquals(1, IteratorUtils.count(detachedEdge.properties()));
                             assertEquals(1.0d, detachedEdge.value("weight"), 0.000001d);
                         }
                         calledEdge2.set(true);
                     } else {
                         fail("An edge id generated that does not exist");
                     }
 
                     return null;
                 }, Direction.BOTH);
             }
 
             assertTrue(calledVertex.get());
             assertTrue(calledEdge1.get());
             assertTrue(calledEdge2.get());
         }
     }
 
     private final org.apache.tinkerpop.shaded.jackson.core.type.TypeReference<HashMap<String, Object>> mapTypeReference = new org.apache.tinkerpop.shaded.jackson.core.type.TypeReference<HashMap<String, Object>>() {
     };
 
     @Test
     @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
     public void shouldSerializeTree() throws Exception {
         loadModern();
         final org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper mapper = this.sqlgGraph.io(GraphSONIo.build(GraphSONVersion.V1_0)).mapper().version(GraphSONVersion.V1_0).create().createMapper();
         Traversal<Vertex, Tree> traversal = this.sqlgGraph.traversal().V(convertToVertexId("marko")).out().properties("name").tree();
         printTraversalForm(traversal);
         Tree t = traversal.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());
     }
 }