Coverage Summary for Class: TestDropStepTruncate (org.umlg.sqlg.test.process.dropstep)
Class |
Method, %
|
Branch, %
|
Line, %
|
TestDropStepTruncate |
100%
(7/7)
|
83.3%
(5/6)
|
100%
(51/51)
|
TestDropStepTruncate$1 |
100%
(3/3)
|
100%
(3/3)
|
TestDropStepTruncate$AbstractMutationListener |
9.1%
(1/11)
|
9.1%
(1/11)
|
Total |
52.4%
(11/21)
|
83.3%
(5/6)
|
84.6%
(55/65)
|
package org.umlg.sqlg.test.process.dropstep;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.MutationListener;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategy;
import org.apache.tinkerpop.gremlin.structure.*;
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.test.BaseTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* @author <a href="https://github.com/pietermartin">Pieter Martin</a>
* Date: 2017/11/23
*/
@RunWith(Parameterized.class)
public class TestDropStepTruncate extends BaseTest {
@Parameterized.Parameter
public Boolean fkOn;
@Parameterized.Parameter(1)
public Boolean mutatingCallback;
private final List<Vertex> removedVertices = new ArrayList<>();
private final List<Edge> removedEdges = new ArrayList<>();
private GraphTraversalSource dropTraversal;
@Parameterized.Parameters(name = "foreign key implement foreign keys: {0}, callback {1}")
public static Collection<Object[]> data() {
return Arrays.asList(new Object[]{Boolean.TRUE, Boolean.FALSE}, new Object[]{Boolean.FALSE, Boolean.FALSE},
new Object[]{Boolean.TRUE, Boolean.TRUE}, new Object[]{Boolean.FALSE, Boolean.TRUE});
// return Collections.singletonList(new Object[]{Boolean.FALSE, Boolean.FALSE});
// return Collections.singletonList(new Object[]{Boolean.TRUE, Boolean.TRUE});
}
@Before
public void before() throws Exception {
super.before();
configuration.setProperty("implement.foreign.keys", this.fkOn);
this.removedVertices.clear();
if (this.mutatingCallback) {
final MutationListener listener = new AbstractMutationListener() {
@Override
public void vertexRemoved(final Vertex vertex) {
removedVertices.add(vertex);
}
@Override
public void edgeRemoved(final Edge edge) {
removedEdges.add(edge);
}
};
final EventStrategy.Builder builder = EventStrategy.build().addListener(listener);
EventStrategy eventStrategy = builder.create();
this.dropTraversal = this.sqlgGraph.traversal();
if (this.mutatingCallback) {
this.dropTraversal = this.dropTraversal.withStrategies(eventStrategy);
}
} else {
this.dropTraversal = this.sqlgGraph.traversal();
}
}
@Test
public void testTruncateVertexOnly() {
this.sqlgGraph.addVertex(T.label, "A");
this.sqlgGraph.addVertex(T.label, "B");
this.sqlgGraph.tx().commit();
this.dropTraversal.V().drop().iterate();
this.sqlgGraph.tx().commit();
Assert.assertFalse(this.sqlgGraph.traversal().V().hasNext());
if (this.mutatingCallback) {
Assert.assertEquals(2, this.removedVertices.size());
Assert.assertEquals(0, this.removedEdges.size());
}
}
@Test
public void testTruncateEdgeOnly() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A");
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B");
a1.addEdge("ab", b1);
a1.addEdge("abb", b1);
this.sqlgGraph.tx().commit();
this.dropTraversal.E().drop().iterate();
this.sqlgGraph.tx().commit();
Assert.assertFalse(this.sqlgGraph.traversal().E().hasNext());
Assert.assertEquals(2, this.sqlgGraph.traversal().V().count().next(), 0);
}
@Test
public void testTruncateVertexWithOnlyOneEdge() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A");
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B");
a1.addEdge("ab", b1);
this.sqlgGraph.tx().commit();
this.sqlgGraph.traversal().V().hasLabel("A").drop().iterate();
this.sqlgGraph.tx().commit();
Assert.assertFalse(this.sqlgGraph.traversal().E().hasNext());
Assert.assertEquals(1, this.sqlgGraph.traversal().V().count().next(), 0);
}
/**
* This does not call TRUNCATE. Truncate is not possible when there are multiple foreign keys.
*/
@Test
public void testTruncateVertexLabelWithMultipleOutEdgeLabels() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A");
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B");
Vertex c1 = this.sqlgGraph.addVertex(T.label, "C");
a1.addEdge("ab", b1);
c1.addEdge("ab", a1);
this.sqlgGraph.tx().commit();
this.dropTraversal.V().hasLabel("A").drop().iterate();
this.sqlgGraph.tx().commit();
Assert.assertFalse(this.sqlgGraph.traversal().E().hasNext());
Assert.assertEquals(2, this.sqlgGraph.traversal().V().count().next(), 0);
}
static abstract class AbstractMutationListener implements MutationListener {
@Override
public void vertexAdded(final Vertex vertex) {
}
@Override
public void vertexRemoved(final Vertex vertex) {
}
@Override
public void vertexPropertyChanged(Vertex element, VertexProperty oldValue, Object setValue, Object... vertexPropertyKeyValues) {
}
@Override
public void vertexPropertyRemoved(final VertexProperty vertexProperty) {
}
@Override
public void edgeAdded(final Edge edge) {
}
@Override
public void edgeRemoved(final Edge edge) {
}
@Override
public void edgePropertyChanged(final Edge element, final Property oldValue, final Object setValue) {
}
@Override
public void edgePropertyRemoved(final Edge element, final Property property) {
}
@Override
public void vertexPropertyPropertyChanged(final VertexProperty element, final Property oldValue, final Object setValue) {
}
@Override
public void vertexPropertyPropertyRemoved(final VertexProperty element, final Property property) {
}
}
}