summaryrefslogtreecommitdiff
path: root/cpp/src/tests/TxBufferTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/tests/TxBufferTest.cpp')
-rw-r--r--cpp/src/tests/TxBufferTest.cpp57
1 files changed, 48 insertions, 9 deletions
diff --git a/cpp/src/tests/TxBufferTest.cpp b/cpp/src/tests/TxBufferTest.cpp
index bd43691235..f58d6e356f 100644
--- a/cpp/src/tests/TxBufferTest.cpp
+++ b/cpp/src/tests/TxBufferTest.cpp
@@ -161,7 +161,9 @@ class TxBufferTest : public CppUnit::TestCase
};
CPPUNIT_TEST_SUITE(TxBufferTest);
- CPPUNIT_TEST(testPrepareAndCommit);
+ CPPUNIT_TEST(testCommitLocal);
+ CPPUNIT_TEST(testFailOnCommitLocal);
+ CPPUNIT_TEST(testPrepare);
CPPUNIT_TEST(testFailOnPrepare);
CPPUNIT_TEST(testRollback);
CPPUNIT_TEST(testBufferIsClearedAfterRollback);
@@ -170,14 +172,14 @@ class TxBufferTest : public CppUnit::TestCase
public:
- void testPrepareAndCommit(){
+ void testCommitLocal(){
MockTransactionalStore store;
store.expectBegin().expectCommit();
MockTxOp::shared_ptr opA(new MockTxOp());
opA->expectPrepare().expectCommit();
MockTxOp::shared_ptr opB(new MockTxOp());
- opB->expectPrepare().expectPrepare().expectCommit().expectCommit();//opB enlisted twice to test reative order
+ opB->expectPrepare().expectPrepare().expectCommit().expectCommit();//opB enlisted twice to test relative order
MockTxOp::shared_ptr opC(new MockTxOp());
opC->expectPrepare().expectCommit();
@@ -187,8 +189,7 @@ class TxBufferTest : public CppUnit::TestCase
buffer.enlist(static_pointer_cast<TxOp>(opB));//opB enlisted twice
buffer.enlist(static_pointer_cast<TxOp>(opC));
- CPPUNIT_ASSERT(buffer.prepare(&store));
- buffer.commit();
+ CPPUNIT_ASSERT(buffer.commitLocal(&store));
store.check();
CPPUNIT_ASSERT(store.isCommitted());
opA->check();
@@ -196,11 +197,51 @@ class TxBufferTest : public CppUnit::TestCase
opC->check();
}
- void testFailOnPrepare(){
+ void testFailOnCommitLocal(){
MockTransactionalStore store;
store.expectBegin().expectAbort();
MockTxOp::shared_ptr opA(new MockTxOp());
+ opA->expectPrepare().expectRollback();
+ MockTxOp::shared_ptr opB(new MockTxOp(true));
+ opB->expectPrepare().expectRollback();
+ MockTxOp::shared_ptr opC(new MockTxOp());//will never get prepare as b will fail
+ opC->expectRollback();
+
+ TxBuffer buffer;
+ buffer.enlist(static_pointer_cast<TxOp>(opA));
+ buffer.enlist(static_pointer_cast<TxOp>(opB));
+ buffer.enlist(static_pointer_cast<TxOp>(opC));
+
+ CPPUNIT_ASSERT(!buffer.commitLocal(&store));
+ CPPUNIT_ASSERT(store.isAborted());
+ store.check();
+ opA->check();
+ opB->check();
+ opC->check();
+ }
+
+ void testPrepare(){
+ MockTxOp::shared_ptr opA(new MockTxOp());
+ opA->expectPrepare();
+ MockTxOp::shared_ptr opB(new MockTxOp());
+ opB->expectPrepare();
+ MockTxOp::shared_ptr opC(new MockTxOp());
+ opC->expectPrepare();
+
+ TxBuffer buffer;
+ buffer.enlist(static_pointer_cast<TxOp>(opA));
+ buffer.enlist(static_pointer_cast<TxOp>(opB));
+ buffer.enlist(static_pointer_cast<TxOp>(opC));
+
+ CPPUNIT_ASSERT(buffer.prepare(0));
+ opA->check();
+ opB->check();
+ opC->check();
+ }
+
+ void testFailOnPrepare(){
+ MockTxOp::shared_ptr opA(new MockTxOp());
opA->expectPrepare();
MockTxOp::shared_ptr opB(new MockTxOp(true));
opB->expectPrepare();
@@ -211,9 +252,7 @@ class TxBufferTest : public CppUnit::TestCase
buffer.enlist(static_pointer_cast<TxOp>(opB));
buffer.enlist(static_pointer_cast<TxOp>(opC));
- CPPUNIT_ASSERT(!buffer.prepare(&store));
- store.check();
- CPPUNIT_ASSERT(store.isAborted());
+ CPPUNIT_ASSERT(!buffer.prepare(0));
opA->check();
opB->check();
opC->check();