package com.lordofthejars.nosqlunit.graph.parser; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.neo4j.graphdb.DynamicRelationshipType; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.index.Index; import org.neo4j.graphdb.index.IndexManager; import org.neo4j.graphdb.index.RelationshipIndex; import org.neo4j.helpers.collection.MapUtil; public class WhenImportingGraphMLStream { private static final String WELL_FORMED_GRAPH_WITH_ARRAY_VALUES = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float[]\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5, 0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String WELL_FORMED_GRAPH = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String WELL_FORMED_GRAPH_WITH_REFERENCE_NODE = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"0\"/>\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"0\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String MISPLACED_EDGES_GRAPH = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " </graph>\n" + "</graphml>"; private static final String ORPHAN_EDGE_GRAPH = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node>\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " </graph>\n" + "</graphml>"; private static final String NOT_DEFINED_KEY_GRAPH = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " </graph>\n" + "</graphml>"; private static final String NODE_WITH_ID_ATTRIBUTE_DATA_GRAPH = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <key id=\"id\" for=\"node\" attr.name=\"id\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"id\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String EDGE_WITH_LABEL_ATTRIBUTE_DATA_GRAPH = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <key id=\"label\" for=\"edge\" attr.name=\"label\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"label\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String SUBGRAPH_DATA_GRAPH = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " <graph id=\"H\" edgedefault=\"directed\">\n" + " <node id=\"20\">\n" + " <data key=\"name\">Her</data>\n" + " </node>\n" + " </graph>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String WELL_FORMED_GRAPH_WITH_NODE_INDEX = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.autoindexName=\"names\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String WELL_FORMED_GRAPH_WITH_RELATIONSHIP_INDEX = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.autoindexName=\"weights\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String GRAPH_WITH_EDGES_WITH_A_NODE_TYPE_DATA = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"name\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String WELL_FORMED_GRAPH_WITH_MANUAL_INDEX_IN_NODE = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " <index name=\"myindex\" key=\"mykey\">myvalue</index>"+ " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String WELL_FORMED_GRAPH_WITH_MANUAL_INDEX_WITH_CONFIGURATION_IN_NODE = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " <index name=\"myindex\" key=\"mykey\" configuration=\"provider,lucene,type,fulltext\">myvalue</index>"+ " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String WELL_FORMED_GRAPH_WITH_MANUAL_INDEX_IN_EDGES = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " <index name=\"myindex\" key=\"mykey\">myvalue</index>"+ " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; private static final String WELL_FORMED_GRAPH_WITH_MANUAL_INDEX_WITH_CONFIGURATION_IN_EDGES = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n" + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">\n" + " <key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"/>\n" + " <key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>\n" + " <key id=\"age\" for=\"node\" attr.name=\"age\" attr.type=\"int\"/>\n" + " <key id=\"lang\" for=\"node\" attr.name=\"lang\" attr.type=\"string\"/>\n" + " <graph id=\"G\" edgedefault=\"directed\">\n" + " <node id=\"15\">\n" + " <data key=\"name\">I</data>\n" + " </node>\n" + " <node id=\"25\">\n" + " <data key=\"name\">you</data>\n" + " </node>\n" + " <node id=\"3\">\n" + " <data key=\"name\">him</data>\n" + " </node>\n" + " <edge id=\"1\" source=\"15\" target=\"25\" label=\"know\">\n" + " <data key=\"weight\">0.5</data>\n" + " <index name=\"myindex\" key=\"mykey\" configuration=\"type,exact,to_lower_case,true\">myvalue</index>"+ " </edge>\n" + " <edge id=\"2\" source=\"15\" target=\"3\" label=\"know\">\n" + " <data key=\"weight\">0.8</data>\n" + " </edge>\n" + " </graph>\n" + "</graphml>"; @Mock private GraphDatabaseService graphDatabaseService; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test(expected=IllegalArgumentException.class) public void parser_should_throw_an_exception_for_data_types_not_decalred_of_the_same_type() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(GRAPH_WITH_EDGES_WITH_A_NODE_TYPE_DATA.getBytes())); } @Test public void parser_should_create_manual_indexes_for_nodes() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); IndexManager indexManager = mock(IndexManager.class); Index<Node> index = mock(Index.class); when(indexManager.forNodes("myindex")).thenReturn(index); when(graphDatabaseService.index()).thenReturn(indexManager); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH_WITH_MANUAL_INDEX_IN_NODE.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); verify(index, times(1)).add(node15, "mykey", "myvalue"); } @Test public void parser_should_create_manual_indexes_with_configuration_for_nodes() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); IndexManager indexManager = mock(IndexManager.class); Index<Node> index = mock(Index.class); when(indexManager.forNodes("myindex", MapUtil.stringMap("provider", "lucene", "type", "fulltext"))).thenReturn(index); when(graphDatabaseService.index()).thenReturn(indexManager); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH_WITH_MANUAL_INDEX_WITH_CONFIGURATION_IN_NODE.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); verify(index, times(1)).add(node15, "mykey", "myvalue"); } @Test public void parser_should_create_manual_indexes_for_relationships() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); IndexManager indexManager = mock(IndexManager.class); RelationshipIndex index = mock(RelationshipIndex.class); when(indexManager.forRelationships("myindex")).thenReturn(index); when(graphDatabaseService.index()).thenReturn(indexManager); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH_WITH_MANUAL_INDEX_IN_EDGES.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); verify(index, times(1)).add(relationship1, "mykey", "myvalue"); } @Test public void parser_should_create_manual_indexes_with_configuration_for_relationships() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); IndexManager indexManager = mock(IndexManager.class); RelationshipIndex index = mock(RelationshipIndex.class); when(indexManager.forRelationships("myindex", MapUtil.stringMap("type", "exact", "to_lower_case", "true"))).thenReturn(index); when(graphDatabaseService.index()).thenReturn(indexManager); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH_WITH_MANUAL_INDEX_WITH_CONFIGURATION_IN_EDGES.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); verify(index, times(1)).add(relationship1, "mykey", "myvalue"); } @Test public void parser_should_create_autoindexes_for_nodes() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); IndexManager indexManager = mock(IndexManager.class); Index<Node> index = mock(Index.class); when(indexManager.forNodes("names")).thenReturn(index); when(graphDatabaseService.index()).thenReturn(indexManager); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH_WITH_NODE_INDEX.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); verify(index, times(3)).add(any(Node.class), any(String.class), any(Object.class)); } @Test public void parser_should_create_autoindexes_for_relationships() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); IndexManager indexManager = mock(IndexManager.class); RelationshipIndex index = mock(RelationshipIndex.class); when(indexManager.forRelationships("weights")).thenReturn(index); when(graphDatabaseService.index()).thenReturn(indexManager); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH_WITH_RELATIONSHIP_INDEX.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); verify(index, times(2)).add(any(Relationship.class), any(String.class), any(Object.class)); } @Test public void parser_should_insert_array_data_into_neo4j() throws FileNotFoundException { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH_WITH_ARRAY_VALUES.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", new float[] {0.5f, 0.5f}); verify(relationship2, times(1)).setProperty("weight", new float[] {0.8f}); } @Test public void parser_should_insert_data_into_neo4j() throws FileNotFoundException { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); } @Test public void parser_should_work_with_misplaced_edges() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(MISPLACED_EDGES_GRAPH.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); } @Test public void parser_should_ignore_all_subgraphs() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(SUBGRAPH_DATA_GRAPH.getBytes())); verify(graphDatabaseService, times(3)).createNode(); verify(node15, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); } @Test public void parser_should_use_id_0_as_reference_node() { Node referenceNode = mock(Node.class); Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); when(graphDatabaseService.createNode()).thenReturn(referenceNode).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(referenceNode.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(WELL_FORMED_GRAPH_WITH_REFERENCE_NODE.getBytes())); verify(graphDatabaseService, times(4)).createNode(); verify(referenceNode, times(1)).createRelationshipTo(eq(node25), any(DynamicRelationshipType.class)); verify(node15, times(1)).createRelationshipTo(eq(node3), any(DynamicRelationshipType.class)); verify(node15).setProperty("name", "I"); verify(node25).setProperty("name", "you"); verify(node3).setProperty("name", "him"); verify(relationship1, times(1)).setProperty("weight", (Float) 0.5f); verify(relationship2, times(1)).setProperty("weight", (Float) 0.8f); } @Test(expected=IllegalArgumentException.class) public void parser_should_throw_an_exception_if_any_edge_is_orphan() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); Node referenceNode = mock(Node.class); when(graphDatabaseService.getNodeById(eq(0))).thenReturn(referenceNode); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(ORPHAN_EDGE_GRAPH.getBytes())); } @Test(expected=IllegalArgumentException.class) public void parser_should_throw_an_exception_if_key_is_not_defined() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(NOT_DEFINED_KEY_GRAPH.getBytes())); } @Test(expected=IllegalArgumentException.class) public void parser_should_throw_an_Exception_if_id_is_defined_in_node_data_section() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(NODE_WITH_ID_ATTRIBUTE_DATA_GRAPH.getBytes())); } @Test(expected=IllegalArgumentException.class) public void parser_should_throw_an_exception_if_label_is_defined_in_edge_data_section() { Node node15 = mock(Node.class); Node node25 = mock(Node.class); Node node3 = mock(Node.class); when(graphDatabaseService.createNode()).thenReturn(node15).thenReturn(node25).thenReturn(node3); Relationship relationship1 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node25), any(RelationshipType.class))).thenReturn(relationship1); Relationship relationship2 = mock(Relationship.class); when(node15.createRelationshipTo(eq(node3), any(RelationshipType.class))).thenReturn(relationship2); GraphMLReader graphMLReader = new GraphMLReader(graphDatabaseService); graphMLReader.read(new ByteArrayInputStream(EDGE_WITH_LABEL_ATTRIBUTE_DATA_GRAPH.getBytes())); } }