Package com.tinkerpop.blueprints.util.io.graphml

Source Code of com.tinkerpop.blueprints.util.io.graphml.GraphMLReaderTestSuite

package com.tinkerpop.blueprints.util.io.graphml;

import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.TestSuite;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.GraphTest;
import com.tinkerpop.blueprints.impls.tg.TinkerGraph;

import java.util.HashSet;
import java.util.Set;

/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class GraphMLReaderTestSuite extends TestSuite {

    public GraphMLReaderTestSuite() {
    }

    public GraphMLReaderTestSuite(GraphTest graphTest) {
        super(graphTest);
    }

    public void testReadingTinkerGraph() throws Exception {
        Graph graph = graphTest.generateGraph();
        if (!graph.getFeatures().ignoresSuppliedIds) {
            this.stopWatch();
            new GraphMLReader(graph).inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-1.xml"));
            printPerformance(graph.toString(), null, "graph-example-1 loaded", this.stopWatch());

            assertEquals(count(graph.getVertex("1").getEdges(Direction.OUT)), 3);
            assertEquals(count(graph.getVertex("1").getEdges(Direction.IN)), 0);
            Vertex marko = graph.getVertex("1");
            assertEquals(marko.getProperty("name"), "marko");
            assertEquals(marko.getProperty("age"), 29);
            int counter = 0;
            for (Edge e : graph.getVertex("1").getEdges(Direction.OUT)) {
                if (e.getVertex(Direction.IN).getId().equals("2")) {
                    // assertEquals(e.getProperty("weight"), 0.5);
                    assertEquals(e.getLabel(), "knows");
                    assertEquals(e.getId(), "7");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("3")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 0);
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "9");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("4")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 1);
                    assertEquals(e.getLabel(), "knows");
                    assertEquals(e.getId(), "8");
                    counter++;
                }
            }

            assertEquals(count(graph.getVertex("4").getEdges(Direction.OUT)), 2);
            assertEquals(count(graph.getVertex("4").getEdges(Direction.IN)), 1);
            Vertex josh = graph.getVertex("4");
            assertEquals(josh.getProperty("name"), "josh");
            assertEquals(josh.getProperty("age"), 32);
            for (Edge e : graph.getVertex("4").getEdges(Direction.OUT)) {
                if (e.getVertex(Direction.IN).getId().equals("3")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 0);
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "11");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("5")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 1);
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "10");
                    counter++;
                }
            }

            assertEquals(counter, 5);
        }
        graph.shutdown();
    }

    public void testTinkerGraphEdges() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeIteration) {
            this.stopWatch();
            new GraphMLReader(graph).inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-1.xml"));
            printPerformance(graph.toString(), null, "graph-example-1 loaded", this.stopWatch());
            Set<String> edgeIds = new HashSet<String>();
            Set<String> edgeKeys = new HashSet<String>();
            Set<String> edgeValues = new HashSet<String>();
            int count = 0;
            for (Edge e : graph.getEdges()) {
                count++;
                edgeIds.add(e.getId().toString());
                for (String key : e.getPropertyKeys()) {
                    edgeKeys.add(key);
                    edgeValues.add(e.getProperty(key).toString());
                }
            }
            assertEquals(count, 6);
            assertEquals(edgeIds.size(), 6);
            assertEquals(edgeKeys.size(), 1);
            assertEquals(edgeValues.size(), 4);
        }
        graph.shutdown();
    }

    public void testTinkerGraphVertices() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (graph.getFeatures().supportsVertexIteration) {
            this.stopWatch();
            new GraphMLReader(graph).inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-1.xml"));
            printPerformance(graph.toString(), null, "graph-example-1 loaded", this.stopWatch());
            Set<String> vertexNames = new HashSet<String>();
            int count = 0;
            for (Vertex v : graph.getVertices()) {
                count++;
                vertexNames.add(v.getProperty("name").toString());
                // System.out.println(v);
            }
            assertEquals(count, 6);
            assertEquals(vertexNames.size(), 6);
            assertTrue(vertexNames.contains("marko"));
            assertTrue(vertexNames.contains("josh"));
            assertTrue(vertexNames.contains("peter"));
            assertTrue(vertexNames.contains("vadas"));
            assertTrue(vertexNames.contains("ripple"));
            assertTrue(vertexNames.contains("lop"));
        }
        graph.shutdown();
    }

    public void testTinkerGraphSoftwareVertices() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (graph.getFeatures().supportsVertexIteration) {
            this.stopWatch();
            new GraphMLReader(graph).inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-1.xml"));
            printPerformance(graph.toString(), null, "graph-example-1 loaded", this.stopWatch());
            Set<Vertex> softwareVertices = new HashSet<Vertex>();
            int count = 0;
            for (Vertex v : graph.getVertices()) {
                count++;
                String name = v.getProperty("name").toString();
                if (name.equals("lop") || name.equals("ripple")) {
                    softwareVertices.add(v);
                }
            }
            assertEquals(count, 6);
            assertEquals(softwareVertices.size(), 2);
            for (Vertex v : softwareVertices) {
                assertEquals(v.getProperty("lang"), "java");
            }
        }
        graph.shutdown();
    }

    public void testTinkerGraphVertexAndEdges() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (graph.getFeatures().supportsVertexIteration) {
            this.stopWatch();
            new GraphMLReader(graph).inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-1.xml"));
            printPerformance(graph.toString(), null, "graph-example-1 loaded", this.stopWatch());
            Vertex marko = null;
            Vertex peter = null;
            Vertex josh = null;
            Vertex vadas = null;
            Vertex lop = null;
            Vertex ripple = null;
            int count = 0;
            for (Vertex v : graph.getVertices()) {
                count++;
                String name = v.getProperty("name").toString();
                if (name.equals("marko")) {
                    marko = v;
                } else if (name.equals("peter")) {
                    peter = v;
                } else if (name.equals("josh")) {
                    josh = v;
                } else if (name.equals("vadas")) {
                    vadas = v;
                } else if (name.equals("lop")) {
                    lop = v;
                } else if (name.equals("ripple")) {
                    ripple = v;
                } else {
                    assertTrue(false);
                }
            }
            assertEquals(count, 6);
            assertTrue(null != marko);
            assertTrue(null != peter);
            assertTrue(null != josh);
            assertTrue(null != vadas);
            assertTrue(null != lop);
            assertTrue(null != ripple);

            if (graph.getFeatures().supportsEdgeIteration) {
                assertEquals(count(graph.getEdges()), 6);
            }

            // test marko
            Set<Vertex> vertices = new HashSet<Vertex>();
            assertEquals(marko.getProperty("name"), "marko");
            assertEquals(((Number) marko.getProperty("age")).intValue(), 29);
            assertEquals(marko.getPropertyKeys().size(), 2);
            assertEquals(count(marko.getEdges(Direction.OUT)), 3);
            assertEquals(count(marko.getEdges(Direction.IN)), 0);
            for (Edge e : marko.getEdges(Direction.OUT)) {
                vertices.add(e.getVertex(Direction.IN));
            }
            assertEquals(vertices.size(), 3);
            assertTrue(vertices.contains(lop));
            assertTrue(vertices.contains(josh));
            assertTrue(vertices.contains(vadas));
            // test peter
            vertices = new HashSet<Vertex>();
            assertEquals(peter.getProperty("name"), "peter");
            assertEquals(((Number) peter.getProperty("age")).intValue(), 35);
            assertEquals(peter.getPropertyKeys().size(), 2);
            assertEquals(count(peter.getEdges(Direction.OUT)), 1);
            assertEquals(count(peter.getEdges(Direction.IN)), 0);
            for (Edge e : peter.getEdges(Direction.OUT)) {
                vertices.add(e.getVertex(Direction.IN));
            }
            assertEquals(vertices.size(), 1);
            assertTrue(vertices.contains(lop));
            // test josh
            vertices = new HashSet<Vertex>();
            assertEquals(josh.getProperty("name"), "josh");
            assertEquals(((Number) josh.getProperty("age")).intValue(), 32);
            assertEquals(josh.getPropertyKeys().size(), 2);
            assertEquals(count(josh.getEdges(Direction.OUT)), 2);
            assertEquals(count(josh.getEdges(Direction.IN)), 1);
            for (Edge e : josh.getEdges(Direction.OUT)) {
                vertices.add(e.getVertex(Direction.IN));
            }
            assertEquals(vertices.size(), 2);
            assertTrue(vertices.contains(lop));
            assertTrue(vertices.contains(ripple));
            vertices = new HashSet<Vertex>();
            for (Edge e : josh.getEdges(Direction.IN)) {
                vertices.add(e.getVertex(Direction.OUT));
            }
            assertEquals(vertices.size(), 1);
            assertTrue(vertices.contains(marko));
            // test vadas
            vertices = new HashSet<Vertex>();
            assertEquals(vadas.getProperty("name"), "vadas");
            assertEquals(((Number) vadas.getProperty("age")).intValue(), 27);
            assertEquals(vadas.getPropertyKeys().size(), 2);
            assertEquals(count(vadas.getEdges(Direction.OUT)), 0);
            assertEquals(count(vadas.getEdges(Direction.IN)), 1);
            for (Edge e : vadas.getEdges(Direction.IN)) {
                vertices.add(e.getVertex(Direction.OUT));
            }
            assertEquals(vertices.size(), 1);
            assertTrue(vertices.contains(marko));
            // test lop
            vertices = new HashSet<Vertex>();
            assertEquals(lop.getProperty("name"), "lop");
            assertEquals(lop.getProperty("lang"), "java");
            assertEquals(lop.getPropertyKeys().size(), 2);
            assertEquals(count(lop.getEdges(Direction.OUT)), 0);
            assertEquals(count(lop.getEdges(Direction.IN)), 3);
            for (Edge e : lop.getEdges(Direction.IN)) {
                vertices.add(e.getVertex(Direction.OUT));
            }
            assertEquals(vertices.size(), 3);
            assertTrue(vertices.contains(marko));
            assertTrue(vertices.contains(josh));
            assertTrue(vertices.contains(peter));
            // test ripple
            vertices = new HashSet<Vertex>();
            assertEquals(ripple.getProperty("name"), "ripple");
            assertEquals(ripple.getProperty("lang"), "java");
            assertEquals(ripple.getPropertyKeys().size(), 2);
            assertEquals(count(ripple.getEdges(Direction.OUT)), 0);
            assertEquals(count(ripple.getEdges(Direction.IN)), 1);
            for (Edge e : ripple.getEdges(Direction.IN)) {
                vertices.add(e.getVertex(Direction.OUT));
            }
            assertEquals(vertices.size(), 1);
            assertTrue(vertices.contains(josh));
        }
        graph.shutdown();
    }

    public void testReadingTinkerGraphExample3() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (!graph.getFeatures().ignoresSuppliedIds && graph.getFeatures().supportsEdgeIteration && graph.getFeatures().supportsVertexIteration) {

            this.stopWatch();
            new GraphMLReader(graph).inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-3.xml"), 1000);
            printPerformance(graph.toString(), null, "graph-example-3 loaded", this.stopWatch());

            // Specific Graph Characteristics

            assertEquals(count(graph.getVertex("1").getEdges(Direction.OUT)), 3);
            assertEquals(count(graph.getVertex("1").getEdges(Direction.IN)), 0);
            Vertex marko = graph.getVertex("1");
            assertEquals(marko.getProperty("name"), "marko");
            assertEquals(marko.getProperty("age"), 29);
            assertEquals(marko.getProperty("_id"), 2);
            int counter = 0;
            for (Edge e : graph.getVertex("1").getEdges(Direction.OUT)) {
                if (e.getVertex(Direction.IN).getId().equals("2")) {
                    // assertEquals(e.getProperty("weight"), 0.5);
                    assertEquals(e.getProperty("_id"), 8);
                    assertEquals(e.getProperty("_label"), "has high fived");
                    assertEquals(e.getLabel(), "knows");
                    assertEquals(e.getId(), "7");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("3")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 0);
                    assertEquals(e.getProperty("_id"), 10);
                    assertEquals(e.getProperty("_label"), "has high fived");
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "9");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("4")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 1);
                    assertEquals(e.getProperty("_id"), 9);
                    assertEquals(e.getProperty("_label"), "has high fived");
                    assertEquals(e.getLabel(), "knows");
                    assertEquals(e.getId(), "8");
                    counter++;
                }
            }

            assertEquals(count(graph.getVertex("2").getEdges(Direction.OUT)), 0);
            assertEquals(count(graph.getVertex("2").getEdges(Direction.IN)), 1);
            Vertex vadas = graph.getVertex("2");
            assertEquals(vadas.getProperty("name"), "vadas");
            assertEquals(vadas.getProperty("age"), 27);
            assertEquals(vadas.getProperty("_id"), 3);

            assertEquals(count(graph.getVertex("3").getEdges(Direction.OUT)), 0);
            assertEquals(count(graph.getVertex("3").getEdges(Direction.IN)), 3);
            Vertex lop = graph.getVertex("3");
            assertEquals(lop.getProperty("name"), "lop");
            assertEquals(lop.getProperty("lang"), "java");
            assertEquals(lop.getProperty("_id"), 4);

            assertEquals(count(graph.getVertex("4").getEdges(Direction.OUT)), 2);
            assertEquals(count(graph.getVertex("4").getEdges(Direction.IN)), 1);
            Vertex josh = graph.getVertex("4");
            assertEquals(josh.getProperty("name"), "josh");
            assertEquals(josh.getProperty("age"), 32);
            for (Edge e : graph.getVertex("4").getEdges(Direction.OUT)) {
                if (e.getVertex(Direction.IN).getId().equals("3")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 0);
                    assertEquals(e.getProperty("_id"), 13);
                    assertEquals(e.getProperty("_label"), null);
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "11");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("5")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 1);
                    assertEquals(e.getProperty("_id"), 11);
                    assertEquals(e.getProperty("_label"), "has high fived");
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "10");
                    counter++;
                }
            }

            assertEquals(count(graph.getVertex("5").getEdges(Direction.OUT)), 0);
            assertEquals(count(graph.getVertex("5").getEdges(Direction.IN)), 1);
            Vertex ripple = graph.getVertex("5");
            assertEquals(ripple.getProperty("name"), "ripple");
            assertEquals(ripple.getProperty("lang"), "java");
            assertEquals(ripple.getProperty("_id"), 7);

            assertEquals(count(graph.getVertex("6").getEdges(Direction.OUT)), 1);
            assertEquals(count(graph.getVertex("6").getEdges(Direction.IN)), 0);
            Vertex peter = graph.getVertex("6");
            assertEquals(peter.getProperty("name"), "peter");
            assertEquals(peter.getProperty("age"), 35);

            for (Edge e : graph.getVertex("6").getEdges(Direction.OUT)) {
                if (e.getVertex(Direction.IN).getId().equals("3")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 0);
                    assertEquals(e.getProperty("_id"), null);
                    assertEquals(e.getProperty("_label"), null);
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "12");
                    counter++;
                }
            }

            assertEquals(counter, 6);

            // General Graph Characteristics

            Set<String> vertexIds = new HashSet<String>();
            Set<String> vertexKeys = new HashSet<String>();
            Set<String> vertexNames = new HashSet<String>();
            int vertexCount = 0;
            for (Vertex v : graph.getVertices()) {
                vertexCount++;
                vertexIds.add(v.getId().toString());
                vertexNames.add(v.getProperty("name").toString());
                for (String key : v.getPropertyKeys())
                    vertexKeys.add(key);
            }

            Set<String> edgeIds = new HashSet<String>();
            Set<String> edgeKeys = new HashSet<String>();
            int edgeCount = 0;
            for (Edge e : graph.getEdges()) {
                edgeCount++;
                edgeIds.add(e.getId().toString());
                for (String key : e.getPropertyKeys())
                    edgeKeys.add(key);
            }

            assertEquals(vertexCount, 6);
            assertEquals(vertexIds.size(), 6);
            assertEquals(vertexKeys.contains("name"), true);
            assertEquals(vertexKeys.contains("age"), true);
            assertEquals(vertexKeys.contains("lang"), true);
            assertEquals(vertexKeys.contains("_id"), true);
            assertEquals(vertexKeys.size(), 4);

            assertEquals(edgeCount, 6);
            assertEquals(edgeIds.size(), 6);
            assertEquals(edgeKeys.contains("weight"), true);
            assertEquals(edgeKeys.contains("_id"), true);
            assertEquals(edgeKeys.contains("_label"), true);
            assertEquals(edgeKeys.size(), 3);
        }
        graph.shutdown();
    }

    public void testReadingTinkerGraphExample3MappingLabels() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeIteration && graph.getFeatures().supportsVertexIteration) {
            this.stopWatch();
            GraphMLReader r = new GraphMLReader(graph);
            r.setEdgeLabelKey("_label");
            r.inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-3.xml"), 1000);
            printPerformance(graph.toString(), null, "graph-example-3 loaded", this.stopWatch());

            Set<String> vertexIds = new HashSet<String>();
            Set<String> vertexKeys = new HashSet<String>();
            Set<String> vertexNames = new HashSet<String>();
            int vertexCount = 0;
            for (Vertex v : graph.getVertices()) {
                vertexCount++;
                vertexIds.add(v.getId().toString());
                vertexNames.add(v.getProperty("name").toString());
                for (String key : v.getPropertyKeys())
                    vertexKeys.add(key);
            }

            Set<String> edgeIds = new HashSet<String>();
            Set<String> edgeKeys = new HashSet<String>();
            Set<String> edgeLabels = new HashSet<String>();
            int edgeCount = 0;
            for (Edge e : graph.getEdges()) {
                edgeCount++;
                edgeIds.add(e.getId().toString());
                edgeLabels.add(e.getLabel());
                for (String key : e.getPropertyKeys())
                    edgeKeys.add(key);
            }

            assertEquals(vertexCount, 6);
            assertEquals(vertexIds.size(), 6);
            assertEquals(vertexKeys.contains("name"), true);
            assertEquals(vertexKeys.contains("age"), true);
            assertEquals(vertexKeys.contains("lang"), true);
            assertEquals(vertexKeys.contains("_id"), true);
            assertEquals(vertexKeys.size(), 4);
            assertTrue(vertexNames.contains("marko"));
            assertTrue(vertexNames.contains("josh"));
            assertTrue(vertexNames.contains("peter"));
            assertTrue(vertexNames.contains("vadas"));
            assertTrue(vertexNames.contains("ripple"));
            assertTrue(vertexNames.contains("lop"));

            assertEquals(edgeCount, 6);
            assertEquals(edgeIds.size(), 6);
            assertEquals(edgeKeys.contains("weight"), true);
            assertEquals(edgeKeys.contains("_id"), true);
            assertEquals(edgeKeys.contains("_label"), false);
            assertEquals(edgeKeys.size(), 2);
            assertEquals(edgeLabels.size(), 2);
            assertEquals(edgeLabels.contains("has high fived"), true);
            assertEquals(edgeLabels.contains("knows"), false);
            assertEquals(edgeLabels.contains("created"), true);
        }
        graph.shutdown();
    }

    public void testReadingTinkerGraphExample3MappingIDs() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeIteration && graph.getFeatures().supportsVertexIteration) {
            this.stopWatch();
            GraphMLReader r = new GraphMLReader(graph);
            r.setVertexIdKey("_id");
            r.setEdgeIdKey("_id");
            r.inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-3.xml"), 1000);
            printPerformance(graph.toString(), null, "graph-example-3 loaded", this.stopWatch());

            Set<String> vertexIds = new HashSet<String>();
            Set<String> vertexKeys = new HashSet<String>();
            Set<String> vertexNames = new HashSet<String>();
            int vertexCount = 0;
            for (Vertex v : graph.getVertices()) {
                vertexCount++;
                vertexIds.add(v.getId().toString());
                vertexNames.add(v.getProperty("name").toString());
                for (String key : v.getPropertyKeys())
                    vertexKeys.add(key);
            }

            Set<String> edgeIds = new HashSet<String>();
            Set<String> edgeKeys = new HashSet<String>();
            Set<String> edgeLabels = new HashSet<String>();
            int edgeCount = 0;
            for (Edge e : graph.getEdges()) {
                edgeCount++;
                edgeIds.add(e.getId().toString());
                edgeLabels.add(e.getLabel());
                for (String key : e.getPropertyKeys())
                    edgeKeys.add(key);
            }

            assertEquals(vertexCount, 6);
            assertEquals(vertexIds.size(), 6);
            assertEquals(vertexKeys.contains("name"), true);
            assertEquals(vertexKeys.contains("age"), true);
            assertEquals(vertexKeys.contains("lang"), true);
            assertEquals(vertexKeys.contains("_id"), false);
            assertEquals(vertexKeys.size(), 3);
            assertTrue(vertexNames.contains("marko"));
            assertTrue(vertexNames.contains("josh"));
            assertTrue(vertexNames.contains("peter"));
            assertTrue(vertexNames.contains("vadas"));
            assertTrue(vertexNames.contains("ripple"));
            assertTrue(vertexNames.contains("lop"));

            assertEquals(edgeCount, 6);
            assertEquals(edgeIds.size(), 6);
            assertEquals(edgeKeys.contains("weight"), true);
            assertEquals(edgeKeys.contains("_id"), false);
            assertEquals(edgeKeys.contains("_label"), true);
            assertEquals(edgeKeys.size(), 2);
            assertEquals(edgeLabels.size(), 2);
            assertEquals(edgeLabels.contains("has high fived"), false);
            assertEquals(edgeLabels.contains("knows"), true);
            assertEquals(edgeLabels.contains("created"), true);
        }
        graph.shutdown();
    }

    public void testReadingTinkerGraphExample3MappingAll() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeIteration && graph.getFeatures().supportsVertexIteration) {
            this.stopWatch();
            GraphMLReader r = new GraphMLReader(graph);
            r.setVertexIdKey("_id");
            r.setEdgeIdKey("_id");
            r.setEdgeLabelKey("_label");
            r.inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-3.xml"), 1000);
            printPerformance(graph.toString(), null, "graph-example-3 loaded", this.stopWatch());

            Set<String> vertexIds = new HashSet<String>();
            Set<String> vertexKeys = new HashSet<String>();
            Set<String> vertexNames = new HashSet<String>();
            int vertexCount = 0;
            for (Vertex v : graph.getVertices()) {
                vertexCount++;
                vertexIds.add(v.getId().toString());
                vertexNames.add(v.getProperty("name").toString());
                for (String key : v.getPropertyKeys())
                    vertexKeys.add(key);
            }

            Set<String> edgeIds = new HashSet<String>();
            Set<String> edgeKeys = new HashSet<String>();
            Set<String> edgeLabels = new HashSet<String>();
            int edgeCount = 0;
            for (Edge e : graph.getEdges()) {
                edgeCount++;
                edgeIds.add(e.getId().toString());
                edgeLabels.add(e.getLabel());
                for (String key : e.getPropertyKeys())
                    edgeKeys.add(key);
            }

            assertEquals(vertexCount, 6);
            assertEquals(vertexIds.size(), 6);
            assertEquals(vertexKeys.contains("name"), true);
            assertEquals(vertexKeys.contains("age"), true);
            assertEquals(vertexKeys.contains("lang"), true);
            assertEquals(vertexKeys.contains("_id"), false);
            assertEquals(vertexKeys.size(), 3);
            assertTrue(vertexNames.contains("marko"));
            assertTrue(vertexNames.contains("josh"));
            assertTrue(vertexNames.contains("peter"));
            assertTrue(vertexNames.contains("vadas"));
            assertTrue(vertexNames.contains("ripple"));
            assertTrue(vertexNames.contains("lop"));

            assertEquals(edgeCount, 6);
            assertEquals(edgeIds.size(), 6);
            assertEquals(edgeKeys.contains("weight"), true);
            assertEquals(edgeKeys.contains("_id"), false);
            assertEquals(edgeKeys.contains("_label"), false);
            assertEquals(edgeKeys.size(), 1);
            assertEquals(edgeLabels.size(), 2);
            assertEquals(edgeLabels.contains("has high fived"), true);
            assertEquals(edgeLabels.contains("knows"), false);
            assertEquals(edgeLabels.contains("created"), true);
        }
        graph.shutdown();
    }

    public void testMigratingTinkerGraphExample3() throws Exception {
        Graph graph = this.graphTest.generateGraph();
        if (!graph.getFeatures().ignoresSuppliedIds && graph.getFeatures().supportsEdgeIteration && graph.getFeatures().supportsVertexIteration) {

            this.stopWatch();
            new GraphMLReader(graph).inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-3.xml"), 1000);
            printPerformance(graph.toString(), null, "graph-example-3 loaded", this.stopWatch());

            this.stopWatch();
            // FIXME Should not explicitly define the Graph type (TinkerGraph)
            // here. Need to accept 2 graphs as input params?
            Graph toGraph = new TinkerGraph();
            GraphMigrator.migrateGraph(graph, toGraph);
            printPerformance(toGraph.toString(), null, "graph-example-3 migrated", this.stopWatch());

            // Specific Graph Characteristics

            assertEquals(count(toGraph.getVertex("1").getEdges(Direction.OUT)), 3);
            assertEquals(count(toGraph.getVertex("1").getEdges(Direction.IN)), 0);
            Vertex marko = toGraph.getVertex("1");
            assertEquals(marko.getProperty("name"), "marko");
            assertEquals(marko.getProperty("age"), 29);
            assertEquals(marko.getProperty("_id"), 2);
            int counter = 0;
            for (Edge e : toGraph.getVertex("1").getEdges(Direction.OUT)) {
                if (e.getVertex(Direction.IN).getId().equals("2")) {
                    // assertEquals(e.getProperty("weight"), 0.5);
                    assertEquals(e.getProperty("_id"), 8);
                    assertEquals(e.getProperty("_label"), "has high fived");
                    assertEquals(e.getLabel(), "knows");
                    assertEquals(e.getId(), "7");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("3")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 0);
                    assertEquals(e.getProperty("_id"), 10);
                    assertEquals(e.getProperty("_label"), "has high fived");
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "9");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("4")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 1);
                    assertEquals(e.getProperty("_id"), 9);
                    assertEquals(e.getProperty("_label"), "has high fived");
                    assertEquals(e.getLabel(), "knows");
                    assertEquals(e.getId(), "8");
                    counter++;
                }
            }

            assertEquals(count(toGraph.getVertex("2").getEdges(Direction.OUT)), 0);
            assertEquals(count(toGraph.getVertex("2").getEdges(Direction.IN)), 1);
            Vertex vadas = toGraph.getVertex("2");
            assertEquals(vadas.getProperty("name"), "vadas");
            assertEquals(vadas.getProperty("age"), 27);
            assertEquals(vadas.getProperty("_id"), 3);

            assertEquals(count(toGraph.getVertex("3").getEdges(Direction.OUT)), 0);
            assertEquals(count(toGraph.getVertex("3").getEdges(Direction.IN)), 3);
            Vertex lop = toGraph.getVertex("3");
            assertEquals(lop.getProperty("name"), "lop");
            assertEquals(lop.getProperty("lang"), "java");
            assertEquals(lop.getProperty("_id"), 4);

            assertEquals(count(toGraph.getVertex("4").getEdges(Direction.OUT)), 2);
            assertEquals(count(toGraph.getVertex("4").getEdges(Direction.IN)), 1);
            Vertex josh = toGraph.getVertex("4");
            assertEquals(josh.getProperty("name"), "josh");
            assertEquals(josh.getProperty("age"), 32);
            for (Edge e : toGraph.getVertex("4").getEdges(Direction.OUT)) {
                if (e.getVertex(Direction.IN).getId().equals("3")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 0);
                    assertEquals(e.getProperty("_id"), 13);
                    assertEquals(e.getProperty("_label"), null);
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "11");
                    counter++;
                } else if (e.getVertex(Direction.IN).getId().equals("5")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 1);
                    assertEquals(e.getProperty("_id"), 11);
                    assertEquals(e.getProperty("_label"), "has high fived");
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "10");
                    counter++;
                }
            }

            assertEquals(count(toGraph.getVertex("5").getEdges(Direction.OUT)), 0);
            assertEquals(count(toGraph.getVertex("5").getEdges(Direction.IN)), 1);
            Vertex ripple = toGraph.getVertex("5");
            assertEquals(ripple.getProperty("name"), "ripple");
            assertEquals(ripple.getProperty("lang"), "java");
            assertEquals(ripple.getProperty("_id"), 7);

            assertEquals(count(toGraph.getVertex("6").getEdges(Direction.OUT)), 1);
            assertEquals(count(toGraph.getVertex("6").getEdges(Direction.IN)), 0);
            Vertex peter = toGraph.getVertex("6");
            assertEquals(peter.getProperty("name"), "peter");
            assertEquals(peter.getProperty("age"), 35);

            for (Edge e : toGraph.getVertex("6").getEdges(Direction.OUT)) {
                if (e.getVertex(Direction.IN).getId().equals("3")) {
                    assertEquals(Math.round((Float) e.getProperty("weight")), 0);
                    assertEquals(e.getProperty("_id"), null);
                    assertEquals(e.getProperty("_label"), null);
                    assertEquals(e.getLabel(), "created");
                    assertEquals(e.getId(), "12");
                    counter++;
                }
            }

            assertEquals(counter, 6);

            // General Graph Characteristics

            Set<String> vertexIds = new HashSet<String>();
            Set<String> vertexKeys = new HashSet<String>();
            int vertexCount = 0;
            for (Vertex v : toGraph.getVertices()) {
                vertexCount++;
                vertexIds.add(v.getId().toString());
                for (String key : v.getPropertyKeys())
                    vertexKeys.add(key);
            }

            Set<String> edgeIds = new HashSet<String>();
            Set<String> edgeKeys = new HashSet<String>();
            int edgeCount = 0;
            for (Edge e : toGraph.getEdges()) {
                edgeCount++;
                edgeIds.add(e.getId().toString());
                for (String key : e.getPropertyKeys())
                    edgeKeys.add(key);
            }

            assertEquals(vertexCount, 6);
            assertEquals(vertexIds.size(), 6);
            assertEquals(vertexKeys.contains("name"), true);
            assertEquals(vertexKeys.contains("age"), true);
            assertEquals(vertexKeys.contains("lang"), true);
            assertEquals(vertexKeys.contains("_id"), true);
            assertEquals(vertexKeys.size(), 4);

            assertEquals(edgeCount, 6);
            assertEquals(edgeIds.size(), 6);
            assertEquals(edgeKeys.contains("weight"), true);
            assertEquals(edgeKeys.contains("_id"), true);
            assertEquals(edgeKeys.contains("_label"), true);
            assertEquals(edgeKeys.size(), 3);
        }
        graph.shutdown();
    }

    public void testAllGraphMLTypeCastsAndDataMappings() throws Exception {
        // the "key" in the <data> element should map back to the "id" in the "key" element
        Graph graph = graphTest.generateGraph();
        if (!graph.getFeatures().ignoresSuppliedIds) {
            this.stopWatch();
            new GraphMLReader(graph).inputGraph(GraphMLReader.class.getResourceAsStream("graph-example-4.xml"));
            printPerformance(graph.toString(), null, "graph-example-4 loaded", this.stopWatch());

            Vertex onlyOne = graph.getVertex("1");
            assertNotNull(onlyOne);
            assertEquals(123.45d, onlyOne.getProperty("d"));
            assertEquals("some-string", onlyOne.getProperty("s"));
            assertEquals(29, onlyOne.getProperty("i"));
            assertEquals(true, onlyOne.getProperty("b"));
            assertEquals(10000000l, onlyOne.getProperty("l"));
            assertEquals(123.54f, onlyOne.getProperty("f"));
            assertEquals("junk", onlyOne.getProperty("n"));
        }

        graph.shutdown();
    }
}
TOP

Related Classes of com.tinkerpop.blueprints.util.io.graphml.GraphMLReaderTestSuite

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.