package org.vertexium.accumulo.blueprints; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Graph; import com.tinkerpop.blueprints.Vertex; import org.vertexium.accumulo.blueprints.util.AccumuloBlueprintsGraphTestHelper; import org.vertexium.blueprints.VertexiumBlueprintsVertexTestBase; import static com.tinkerpop.blueprints.Direction.*; public class AccumuloVertexTest extends VertexiumBlueprintsVertexTestBase { public AccumuloVertexTest() { super(new AccumuloBlueprintsGraphTestHelper()); } @Override protected void setUp() throws Exception { super.setUp(); ((AccumuloBlueprintsGraphTestHelper) this.graphTest).setUp(); } // TODO fix how we interact with blueprints // see comments in line on why we are overriding blueprints test public void testGettingEdgesAndVertices() { Graph graph = graphTest.generateGraph(); Vertex a = graph.addVertex(null); Vertex b = graph.addVertex(null); Vertex c = graph.addVertex(null); Edge w = graph.addEdge(null, a, b, graphTest.convertLabel("knows")); Edge x = graph.addEdge(null, b, c, graphTest.convertLabel("knows")); Edge y = graph.addEdge(null, a, c, graphTest.convertLabel("hates")); Edge z = graph.addEdge(null, a, b, graphTest.convertLabel("hates")); Edge zz = graph.addEdge(null, c, c, graphTest.convertLabel("hates")); assertEquals(count(a.getEdges(OUT)), 3); assertEquals(count(a.getEdges(OUT, graphTest.convertLabel("hates"))), 2); assertEquals(count(a.getEdges(OUT, graphTest.convertLabel("knows"))), 1); assertEquals(count(a.getVertices(OUT)), 2); // this was previously 3 because blueprints expects duplicate vertices to be returned multiple times assertEquals(count(a.getVertices(OUT, graphTest.convertLabel("hates"))), 2); assertEquals(count(a.getVertices(OUT, graphTest.convertLabel("knows"))), 1); assertEquals(count(a.getVertices(BOTH)), 2); // this was previously 3 because blueprints expects duplicate vertices to be returned multiple times assertEquals(count(a.getVertices(BOTH, graphTest.convertLabel("hates"))), 2); assertEquals(count(a.getVertices(BOTH, graphTest.convertLabel("knows"))), 1); assertTrue(asList(a.getEdges(OUT)).contains(w)); assertTrue(asList(a.getEdges(OUT)).contains(y)); assertTrue(asList(a.getEdges(OUT)).contains(z)); assertTrue(asList(a.getVertices(OUT)).contains(b)); assertTrue(asList(a.getVertices(OUT)).contains(c)); assertTrue(asList(a.getEdges(OUT, graphTest.convertLabel("knows"))).contains(w)); assertFalse(asList(a.getEdges(OUT, graphTest.convertLabel("knows"))).contains(y)); assertFalse(asList(a.getEdges(OUT, graphTest.convertLabel("knows"))).contains(z)); assertTrue(asList(a.getVertices(OUT, graphTest.convertLabel("knows"))).contains(b)); assertFalse(asList(a.getVertices(OUT, graphTest.convertLabel("knows"))).contains(c)); assertFalse(asList(a.getEdges(OUT, graphTest.convertLabel("hates"))).contains(w)); assertTrue(asList(a.getEdges(OUT, graphTest.convertLabel("hates"))).contains(y)); assertTrue(asList(a.getEdges(OUT, graphTest.convertLabel("hates"))).contains(z)); assertTrue(asList(a.getVertices(OUT, graphTest.convertLabel("hates"))).contains(b)); assertTrue(asList(a.getVertices(OUT, graphTest.convertLabel("hates"))).contains(c)); assertEquals(count(a.getVertices(IN)), 0); assertEquals(count(a.getVertices(IN, graphTest.convertLabel("knows"))), 0); assertEquals(count(a.getVertices(IN, graphTest.convertLabel("hates"))), 0); assertTrue(asList(a.getEdges(OUT)).contains(w)); assertTrue(asList(a.getEdges(OUT)).contains(y)); assertTrue(asList(a.getEdges(OUT)).contains(z)); assertEquals(count(b.getEdges(BOTH)), 3); assertEquals(count(b.getEdges(BOTH, graphTest.convertLabel("knows"))), 2); assertTrue(asList(b.getEdges(BOTH, graphTest.convertLabel("knows"))).contains(x)); assertTrue(asList(b.getEdges(BOTH, graphTest.convertLabel("knows"))).contains(w)); assertTrue(asList(b.getVertices(BOTH, graphTest.convertLabel("knows"))).contains(a)); assertTrue(asList(b.getVertices(BOTH, graphTest.convertLabel("knows"))).contains(c)); assertEquals(count(c.getEdges(BOTH, graphTest.convertLabel("hates"))), 2); // this was previously 3 because blueprints expects duplicate vertices to be returned multiple times assertEquals(count(c.getVertices(BOTH, graphTest.convertLabel("hates"))), 2); // this was previously 3 because blueprints expects duplicate vertices to be returned multiple times assertEquals(count(c.getEdges(BOTH, graphTest.convertLabel("knows"))), 1); assertTrue(asList(c.getEdges(BOTH, graphTest.convertLabel("hates"))).contains(y)); assertTrue(asList(c.getEdges(BOTH, graphTest.convertLabel("hates"))).contains(zz)); assertTrue(asList(c.getVertices(BOTH, graphTest.convertLabel("hates"))).contains(a)); assertTrue(asList(c.getVertices(BOTH, graphTest.convertLabel("hates"))).contains(c)); assertEquals(count(c.getEdges(IN, graphTest.convertLabel("hates"))), 2); assertEquals(count(c.getEdges(OUT, graphTest.convertLabel("hates"))), 1); try { x.getVertex(BOTH); fail("Getting edge vertex with direction BOTH should fail"); } catch (IllegalArgumentException e) { } catch (Exception e) { fail("Getting edge vertex with direction BOTH should should throw " + IllegalArgumentException.class.getSimpleName()); } graph.shutdown(); } }