From 4ee19a583c59f50f80faf1adfac2a69fd486f660 Mon Sep 17 00:00:00 2001 From: Chris Gioran Date: Tue, 8 Dec 2015 13:37:56 +0200 Subject: [PATCH] Adds test ensuring TRCP commits txs with no commands --- ...actionRepresentationCommitProcessTest.java | 38 +++++++++++++++---- .../impl/transaction/log/FakeCommitment.java | 3 +- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcessTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcessTest.java index 9714b25b994a..1efb3bd35bb5 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcessTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcessTest.java @@ -22,6 +22,7 @@ import org.junit.Test; import java.io.IOException; +import java.util.Collections; import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.exceptions.TransactionFailureException; @@ -31,6 +32,8 @@ import org.neo4j.kernel.impl.storageengine.StorageEngine; import org.neo4j.kernel.impl.store.UnderlyingStorageException; import org.neo4j.kernel.impl.transaction.TransactionRepresentation; +import org.neo4j.kernel.impl.transaction.log.FakeCommitment; +import org.neo4j.kernel.impl.transaction.log.PhysicalTransactionRepresentation; import org.neo4j.kernel.impl.transaction.log.TestableTransactionAppender; import org.neo4j.kernel.impl.transaction.log.TransactionAppender; import org.neo4j.kernel.impl.transaction.log.TransactionIdStore; @@ -59,20 +62,16 @@ public class TransactionRepresentationCommitProcessTest private final CommitEvent commitEvent = CommitEvent.NULL; @Test - public void shouldNotIncrementLastCommittedTxIdIfAppendFails() throws Exception + public void shouldFailWithProperMessageOnAppendException() throws Exception { // GIVEN TransactionAppender appender = mock( TransactionAppender.class ); - long txId = 11; IOException rootCause = new IOException( "Mock exception" ); doThrow( new IOException( rootCause ) ).when( appender ).append( any( TransactionToApply.class ), any( LogAppendEvent.class ) ); - TransactionIdStore transactionIdStore = mock( TransactionIdStore.class ); StorageEngine storageEngine = mock( StorageEngine.class ); TransactionCommitProcess commitProcess = new TransactionRepresentationCommitProcess( - appender, - storageEngine, - mockedIndexUpdatesValidator() ); + appender, storageEngine, mockedIndexUpdatesValidator() ); // WHEN try @@ -85,8 +84,6 @@ public void shouldNotIncrementLastCommittedTxIdIfAppendFails() throws Exception assertThat( e.getMessage(), containsString( "Could not append transaction representation to log" ) ); assertTrue( contains( e, rootCause.getMessage(), rootCause.getClass() ) ); } - - verify( transactionIdStore, times( 0 ) ).transactionCommitted( txId, 0 ); } @Test @@ -150,6 +147,31 @@ public void shouldThrowWhenIndexUpdatesValidationFails() throws IOException } } + @Test + public void shouldSuccessfullyCommitTransactionWithNoCommands() throws Exception + { + // GIVEN + long txId = 11; + TransactionIdStore transactionIdStore = mock( TransactionIdStore.class ); + TransactionAppender appender = new TestableTransactionAppender( transactionIdStore ); + when( transactionIdStore.nextCommittingTransactionId() ).thenReturn( txId ); + + StorageEngine storageEngine = mock( StorageEngine.class ); + + TransactionCommitProcess commitProcess = new TransactionRepresentationCommitProcess( + appender, + storageEngine, + mockedIndexUpdatesValidator() ); + PhysicalTransactionRepresentation noCommandTx = new PhysicalTransactionRepresentation( Collections.emptyList() ); + noCommandTx.setHeader( new byte[0], -1, -1, -1, -1, -1, -1 ); + + // WHEN + + commitProcess.commit( new TransactionToApply( noCommandTx ), commitEvent, INTERNAL ); + + verify( transactionIdStore ).transactionCommitted( txId, FakeCommitment.CHECKSUM ); + } + private TransactionToApply mockedTransaction() { TransactionRepresentation transaction = mock( TransactionRepresentation.class ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/FakeCommitment.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/FakeCommitment.java index 4f0135419254..bb7a4cd9aed1 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/FakeCommitment.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/FakeCommitment.java @@ -21,6 +21,7 @@ public class FakeCommitment implements Commitment { + public static final int CHECKSUM = 3; private final long id; private final TransactionIdStore transactionIdStore; private boolean committed; @@ -42,7 +43,7 @@ public FakeCommitment( long id, TransactionIdStore transactionIdStore, boolean m public void publishAsCommitted() { committed = true; - transactionIdStore.transactionCommitted( id, 3 ); + transactionIdStore.transactionCommitted( id, CHECKSUM ); } @Override