Coverage Summary for Class: TestRollback (org.umlg.sqlg.test.rollback)

Class Class, % Method, % Branch, % Line, %
TestRollback 100% (1/1) 100% (5/5) 50% (1/2) 93% (40/43)


 package org.umlg.sqlg.test.rollback;
 
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Transaction;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 import org.umlg.sqlg.test.BaseTest;
 
 import static org.apache.tinkerpop.gremlin.AbstractGremlinTest.assertVertexEdgeCounts;
 import static org.junit.Assert.*;
 
 /**
  * Date: 2014/09/24
  * Time: 2:15 PM
  */
 public class TestRollback extends BaseTest {
 
     @Test
     public void shouldRollbackElementAutoTransactionByDefault() {
         assertVertexEdgeCounts(this.sqlgGraph, 0, 0);
         Vertex v1 = this.sqlgGraph.addVertex();
         @SuppressWarnings("UnusedAssignment")
         Edge e1 = v1.addEdge("l", v1);
         this.sqlgGraph.tx().commit();
         assertVertexEdgeCounts(this.sqlgGraph, 1, 1);
         v1.remove();
         this.sqlgGraph.tx().commit();
         assertVertexEdgeCounts(this.sqlgGraph, 0, 0);
 
         v1 = this.sqlgGraph.addVertex();
         e1 = v1.addEdge("l", v1);
         assertVertexEdgeCounts(this.sqlgGraph, 1, 1);
         assertEquals(v1.id(), this.sqlgGraph.vertices(v1.id()).next().id());
         assertEquals(e1.id(), this.sqlgGraph.edges(e1.id()).next().id());
         this.sqlgGraph.traversal().tx().rollback();
         assertVertexEdgeCounts(this.sqlgGraph, 0, 0);
     }
 
     /**
      * This test is for HSQLDB in particular.
      * HSQLDB auto commits transactions that execute schema creation commands.
      * This invalidates the rollback logic that the test is trying to tests.
      * So first createVertexLabel, commit delete and then test rollback.
      */
     @Test
     public void shouldRollbackByDefault() {
         Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
         Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "name", "b1");
         a1.addEdge("ab", b1);
         this.sqlgGraph.tx().commit();
         a1.remove();
         b1.remove();
         this.sqlgGraph.tx().commit();
         assertFalse(this.sqlgGraph.edges().hasNext());
         assertFalse(this.sqlgGraph.vertices().hasNext());
 
         a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
         b1 = this.sqlgGraph.addVertex(T.label, "B", "name", "b1");
         a1.addEdge("ab", b1);
         this.sqlgGraph.tx().rollback();
         assertFalse(this.sqlgGraph.edges().hasNext());
         assertFalse(this.sqlgGraph.vertices().hasNext());
     }
 
     @Test
     public void shouldHaveExceptionConsistencyWhenUsingManualTransactionOnRollback() {
         this.sqlgGraph.tx().onReadWrite(Transaction.READ_WRITE_BEHAVIOR.MANUAL);
         try {
             this.sqlgGraph.tx().rollback();
             fail("An exception should be thrown when read/write behavior is manual and no transaction is opened");
         } catch (Exception ignore) {
         }
     }
 
     @Test
     public void testRollback() {
         Vertex v1 = this.sqlgGraph.addVertex(T.label, "Person");
         this.sqlgGraph.tx().commit();
         v1.property("name", "john");
         this.sqlgGraph.tx().rollback();
         if (this.sqlgGraph.getSqlDialect().supportsTransactionalSchema()) {
             assertFalse(v1.property("name").isPresent());
         } else {
             assertTrue(v1.property("name").isPresent());
             assertNull(v1.property("name").value());
         }
     }
 
 }