Coverage Summary for Class: TestTopologyEdgeLabelWithIdentifiersRename (org.umlg.sqlg.test.topology)
Class |
Method, %
|
Branch, %
|
Line, %
|
TestTopologyEdgeLabelWithIdentifiersRename |
100%
(4/4)
|
90%
(9/10)
|
100%
(149/149)
|
TestTopologyEdgeLabelWithIdentifiersRename$1 |
100%
(1/1)
|
100%
(4/4)
|
TestTopologyEdgeLabelWithIdentifiersRename$2 |
100%
(1/1)
|
100%
(4/4)
|
TestTopologyEdgeLabelWithIdentifiersRename$3 |
100%
(1/1)
|
100%
(4/4)
|
Total |
100%
(7/7)
|
90%
(9/10)
|
100%
(161/161)
|
package org.umlg.sqlg.test.topology;
import org.apache.commons.collections4.set.ListOrderedSet;
import org.apache.commons.lang3.tuple.Triple;
import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.umlg.sqlg.structure.PropertyDefinition;
import org.umlg.sqlg.structure.PropertyType;
import org.umlg.sqlg.structure.TopologyChangeAction;
import org.umlg.sqlg.structure.TopologyInf;
import org.umlg.sqlg.structure.topology.EdgeLabel;
import org.umlg.sqlg.structure.topology.Schema;
import org.umlg.sqlg.structure.topology.Topology;
import org.umlg.sqlg.structure.topology.VertexLabel;
import org.umlg.sqlg.test.BaseTest;
import java.util.*;
@SuppressWarnings("DuplicatedCode")
@RunWith(Parameterized.class)
public class TestTopologyEdgeLabelWithIdentifiersRename extends BaseTest {
private final List<Triple<TopologyInf, TopologyInf, TopologyChangeAction>> topologyListenerTriple = new ArrayList<>();
@Parameterized.Parameter
public String schema1;
@Parameterized.Parameter(1)
public String schema2;
@Parameterized.Parameter(2)
public boolean rollback;
@Parameterized.Parameters(name = "{index}: schema1:{0}, schema2:{1}, rollback:{2}")
public static Collection<Object[]> data() {
List<Object[]> l = new ArrayList<>();
String[] schema1s = new String[]{"public", "A"};
String[] schema2s = new String[]{"public", "B"};
boolean[] rollback = new boolean[]{true, false};
// String[] schema1s = new String[]{"A"};
// String[] schema2s = new String[]{"public"};
// boolean[] rollback = new boolean[]{false};
for (String s1 : schema1s) {
for (String s2 : schema2s) {
for (boolean r : rollback) {
l.add(new Object[]{s1, s2, r});
}
}
}
return l;
}
@Before
public void before() throws Exception {
super.before();
this.topologyListenerTriple.clear();
}
@Test
public void testEdgeLabelSimple() {
TestTopologyChangeListener.TopologyListenerTest topologyListenerTest = new TestTopologyChangeListener.TopologyListenerTest(topologyListenerTriple);
this.sqlgGraph.getTopology().registerListener(topologyListenerTest);
Schema schema1 = this.sqlgGraph.getTopology().ensureSchemaExist(this.schema1);
Schema schema2 = this.sqlgGraph.getTopology().ensureSchemaExist(this.schema2);
VertexLabel aVertexLabel = schema1.ensureVertexLabelExist("A", new HashMap<>() {{
put("id1", PropertyDefinition.of(PropertyType.varChar(10)));
put("id2", PropertyDefinition.of(PropertyType.varChar(10)));
put("a", PropertyDefinition.of(PropertyType.varChar(10)));
}},
ListOrderedSet.listOrderedSet(List.of("id1", "id2"))
);
VertexLabel bVertexLabel = schema2.ensureVertexLabelExist("B", new HashMap<>() {{
put("id1", PropertyDefinition.of(PropertyType.varChar(10)));
put("id2", PropertyDefinition.of(PropertyType.varChar(10)));
put("a", PropertyDefinition.of(PropertyType.varChar(10)));
}},
ListOrderedSet.listOrderedSet(List.of("id1", "id2"))
);
EdgeLabel abEdgeLabel = aVertexLabel.ensureEdgeLabelExist("ab", bVertexLabel, new HashMap<>() {{
put("id1", PropertyDefinition.of(PropertyType.varChar(10)));
put("id2", PropertyDefinition.of(PropertyType.varChar(10)));
put("a", PropertyDefinition.of(PropertyType.varChar(10)));
}},
ListOrderedSet.listOrderedSet(List.of("id1", "id2"))
);
this.sqlgGraph.tx().commit();
Optional<EdgeLabel> edgeLabelOptional = schema1.getEdgeLabel("AB");
Assert.assertTrue(edgeLabelOptional.isEmpty());
edgeLabelOptional = schema1.getEdgeLabel("ab");
Assert.assertTrue(edgeLabelOptional.isPresent());
EdgeLabel edgeLabel = edgeLabelOptional.get();
Assert.assertEquals(1, edgeLabel.getInVertexLabels().size());
Assert.assertEquals(1, edgeLabel.getOutVertexLabels().size());
Optional<VertexLabel> aVertexLabelOptional = schema1.getVertexLabel("A");
Assert.assertTrue(aVertexLabelOptional.isPresent());
Optional<VertexLabel> bVertexLabelOptional = schema2.getVertexLabel("B");
Assert.assertTrue(bVertexLabelOptional.isPresent());
aVertexLabel = aVertexLabelOptional.get();
bVertexLabel = bVertexLabelOptional.get();
Map<String, EdgeLabel> outEdgeLabels = aVertexLabel.getOutEdgeLabels();
Assert.assertEquals(1, outEdgeLabels.size());
Assert.assertTrue(outEdgeLabels.containsKey(schema1.getName() + ".ab"));
EdgeLabel outEdgeLabel = outEdgeLabels.get(schema1.getName() + ".ab");
Assert.assertSame(outEdgeLabel, edgeLabelOptional.get());
Map<String, EdgeLabel> inEdgeLabels = bVertexLabel.getInEdgeLabels();
Assert.assertTrue(inEdgeLabels.containsKey(schema1.getName() + ".ab"));
EdgeLabel inEdgeLabel = inEdgeLabels.get(schema1.getName() + ".ab");
Assert.assertSame(inEdgeLabel, edgeLabelOptional.get());
List<Vertex> outEdges = this.sqlgGraph.topology().V().hasLabel(Topology.SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_SCHEMA)
.has(Topology.SQLG_SCHEMA_SCHEMA_NAME, this.schema1)
.out(Topology.SQLG_SCHEMA_SCHEMA_VERTEX_EDGE)
.out(Topology.SQLG_SCHEMA_OUT_EDGES_EDGE)
.toList();
Assert.assertEquals(1, outEdges.size());
Assert.assertEquals("ab", outEdges.get(0).<String>property(Topology.SQLG_SCHEMA_VERTEX_LABEL_NAME).value());
List<Vertex> inVertices = this.sqlgGraph.topology().V(outEdges.get(0))
.in(Topology.SQLG_SCHEMA_IN_EDGES_EDGE)
.toList();
Assert.assertEquals(1, inVertices.size());
Vertex a = this.sqlgGraph.addVertex(T.label, this.schema1 + ".A", "id1", "1", "id2", "2", "a", "haloA");
Vertex b = this.sqlgGraph.addVertex(T.label, this.schema2 + ".B", "id1", "1", "id2", "2", "a", "haloB");
a.addEdge("ab", b, "id1", "1", "id2", "2", "a", "halo_ab");
this.sqlgGraph.tx().commit();
List<Vertex> vertices = this.sqlgGraph.traversal().V().hasLabel(this.schema1 + ".A").out("ab").toList();
Assert.assertEquals(1, vertices.size());
abEdgeLabel.rename("AB");
vertices = this.sqlgGraph.traversal().V().hasLabel(this.schema1 + ".A").out("ab").toList();
Assert.assertEquals(0, vertices.size());
vertices = this.sqlgGraph.traversal().V().hasLabel(this.schema1 + ".A").out("AB").toList();
Assert.assertEquals(1, vertices.size());
if (this.sqlgGraph.getSqlDialect().supportsTransactionalSchema() && this.rollback) {
this.sqlgGraph.tx().rollback();
vertices = this.sqlgGraph.traversal().V().hasLabel(this.schema1 + ".A").out("ab").toList();
Assert.assertEquals(1, vertices.size());
vertices = this.sqlgGraph.traversal().V().hasLabel(this.schema1 + ".A").out("AB").toList();
Assert.assertEquals(0, vertices.size());
edgeLabelOptional = schema1.getEdgeLabel("AB");
Assert.assertTrue(edgeLabelOptional.isEmpty());
edgeLabelOptional = schema1.getEdgeLabel("ab");
Assert.assertTrue(edgeLabelOptional.isPresent());
edgeLabel = edgeLabelOptional.get();
aVertexLabelOptional = schema1.getVertexLabel("A");
Assert.assertTrue(aVertexLabelOptional.isPresent());
aVertexLabel = aVertexLabelOptional.get();
bVertexLabelOptional = schema2.getVertexLabel("B");
Assert.assertTrue(bVertexLabelOptional.isPresent());
bVertexLabel = bVertexLabelOptional.get();
Assert.assertEquals(1, edgeLabel.getOutVertexLabels().size());
Assert.assertEquals(1, edgeLabel.getInVertexLabels().size());
Assert.assertSame(edgeLabel.getOutVertexLabels().iterator().next(), aVertexLabel);
Assert.assertSame(edgeLabel.getInVertexLabels().iterator().next(), bVertexLabel);
Assert.assertEquals(1, aVertexLabel.getOutEdgeLabels().size());
Assert.assertEquals(0, aVertexLabel.getInEdgeLabels().size());
Assert.assertEquals(0, bVertexLabel.getOutEdgeLabels().size());
Assert.assertEquals(1, bVertexLabel.getInEdgeLabels().size());
Assert.assertTrue(aVertexLabel.getOutEdgeLabel("AB").isEmpty());
Assert.assertTrue(aVertexLabel.getOutEdgeLabel("ab").isPresent());
Assert.assertSame(edgeLabel, aVertexLabel.getOutEdgeLabel("ab").get());
Assert.assertTrue(bVertexLabel.getInEdgeLabels().containsKey(schema1.getName() + ".ab"));
Assert.assertSame(edgeLabel, bVertexLabel.getInEdgeLabels().get(schema1.getName() + ".ab"));
outEdges = this.sqlgGraph.topology().V().hasLabel(Topology.SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_SCHEMA)
.has(Topology.SQLG_SCHEMA_SCHEMA_NAME, this.schema1)
.out(Topology.SQLG_SCHEMA_SCHEMA_VERTEX_EDGE)
.out(Topology.SQLG_SCHEMA_OUT_EDGES_EDGE)
.toList();
Assert.assertEquals(1, outEdges.size());
Assert.assertEquals("ab", outEdges.get(0).<String>property(Topology.SQLG_SCHEMA_VERTEX_LABEL_NAME).value());
inVertices = this.sqlgGraph.topology().V(outEdges.get(0))
.in(Topology.SQLG_SCHEMA_IN_EDGES_EDGE)
.toList();
Assert.assertEquals(1, inVertices.size());
} else {
this.sqlgGraph.tx().commit();
vertices = this.sqlgGraph.traversal().V().hasLabel(this.schema1 + ".A").out("ab").toList();
Assert.assertEquals(0, vertices.size());
vertices = this.sqlgGraph.traversal().V().hasLabel(this.schema1 + ".A").out("AB").toList();
Assert.assertEquals(1, vertices.size());
edgeLabelOptional = schema1.getEdgeLabel("ab");
Assert.assertTrue(edgeLabelOptional.isEmpty());
edgeLabelOptional = schema1.getEdgeLabel("AB");
Assert.assertTrue(edgeLabelOptional.isPresent());
edgeLabel = edgeLabelOptional.get();
topologyListenerTest.receivedEvent(edgeLabel, TopologyChangeAction.UPDATE);
aVertexLabelOptional = schema1.getVertexLabel("A");
Assert.assertTrue(aVertexLabelOptional.isPresent());
aVertexLabel = aVertexLabelOptional.get();
bVertexLabelOptional = schema2.getVertexLabel("B");
Assert.assertTrue(bVertexLabelOptional.isPresent());
bVertexLabel = bVertexLabelOptional.get();
Assert.assertEquals(1, edgeLabel.getOutVertexLabels().size());
Assert.assertEquals(1, edgeLabel.getInVertexLabels().size());
Assert.assertSame(edgeLabel.getOutVertexLabels().iterator().next(), aVertexLabel);
Assert.assertSame(edgeLabel.getInVertexLabels().iterator().next(), bVertexLabel);
Assert.assertEquals(1, aVertexLabel.getOutEdgeLabels().size());
Assert.assertEquals(0, aVertexLabel.getInEdgeLabels().size());
Assert.assertEquals(0, bVertexLabel.getOutEdgeLabels().size());
Assert.assertEquals(1, bVertexLabel.getInEdgeLabels().size());
Assert.assertTrue(aVertexLabel.getOutEdgeLabel("AB").isPresent());
Assert.assertSame(edgeLabel, aVertexLabel.getOutEdgeLabel("AB").get());
Assert.assertTrue(bVertexLabel.getInEdgeLabels().containsKey(schema1.getName() + ".AB"));
Assert.assertSame(edgeLabel, bVertexLabel.getInEdgeLabels().get(schema1.getName() + ".AB"));
outEdges = this.sqlgGraph.topology().V().hasLabel(Topology.SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_SCHEMA)
.has(Topology.SQLG_SCHEMA_SCHEMA_NAME, this.schema1)
.out(Topology.SQLG_SCHEMA_SCHEMA_VERTEX_EDGE)
.out(Topology.SQLG_SCHEMA_OUT_EDGES_EDGE)
.toList();
Assert.assertEquals(1, outEdges.size());
Assert.assertEquals("AB", outEdges.get(0).<String>property(Topology.SQLG_SCHEMA_VERTEX_LABEL_NAME).value());
inVertices = this.sqlgGraph.topology().V(outEdges.get(0))
.in(Topology.SQLG_SCHEMA_IN_EDGES_EDGE)
.toList();
Assert.assertEquals(1, inVertices.size());
}
}
}