Author: kpvdr
Date: 2007-09-24 14:04:55 -0400 (Mon, 24 Sep 2007)
New Revision: 942
Added:
store/trunk/cpp/tests/jrnl/JournalSystemTests.cpp
store/trunk/cpp/tests/jrnl/JournalUnitTests.cpp
Removed:
store/trunk/cpp/tests/jrnl/JournalTest.cpp
Modified:
store/trunk/cpp/lib/jrnl/wrfc.hpp
store/trunk/cpp/tests/jrnl/Makefile.am
store/trunk/cpp/tests/jrnl/Makefile.rtest
store/trunk/cpp/tests/jrnl/run-journal-tests
Log:
Created framework for journal unit tests, added (trivial) test for jexception class.
Modified: store/trunk/cpp/lib/jrnl/wrfc.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/wrfc.hpp 2007-09-23 17:37:01 UTC (rev 941)
+++ store/trunk/cpp/lib/jrnl/wrfc.hpp 2007-09-24 18:04:55 UTC (rev 942)
@@ -67,15 +67,9 @@
* \param nfiles Number of files in the rotating file group.
* \param fh_arr Pointer to an array of file handles (nlogging_fh or subclasses),
* each of which correspond to one of the physical files.
- * \param fh_index Initial index of journal file. Default = 0.
+ * \param rdp Struct carrying restore information. Optional for non-restore use,
defaults to
+ * NULL.
*/
-// void initialize(u_int32_t nfiles, nlfh** fh_arr, u_int32_t fh_index = 0,
-// #ifdef DRHM_TESTVALS
-// u_int64_t rid = u_int64_t(0xffeeddcc) << 32
-// #else
-// u_int64_t rid = 0
-// #endif
-// ) throw (jexception);
void initialize(u_int32_t nfiles, nlfh** fh_arr, rcvdat* rdp = NULL) throw
(jexception);
/**
Copied: store/trunk/cpp/tests/jrnl/JournalSystemTests.cpp (from rev 941,
store/trunk/cpp/tests/jrnl/JournalTest.cpp)
===================================================================
--- store/trunk/cpp/tests/jrnl/JournalSystemTests.cpp (rev 0)
+++ store/trunk/cpp/tests/jrnl/JournalSystemTests.cpp 2007-09-24 18:04:55 UTC (rev 942)
@@ -0,0 +1,852 @@
+/**
+* \file JournalTest.cpp
+*
+* Red Hat Messaging - Message Journal
+*
+* This file contains the unit tests for the journal.
+*
+* \author Kim van der Riet
+*
+* Copyright 2007 Red Hat, Inc.
+*
+* This file is part of Red Hat Messaging.
+*
+* Red Hat Messaging is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2.1 of the License, or (at your option) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+* USA
+*
+* The GNU Lesser General Public License is available in the file COPYING.
+*/
+
+#include "../test_plugin.h"
+#include "msg_producer.hpp"
+#include "msg_consumer.hpp"
+#include "jtest.hpp"
+
+#define MAX_MSG_SIZE 127
+#define NUM_MSGS 5
+#define MAX_AIO_SLEEPS 500
+#define AIO_SLEEP_TIME 1000
+
+class JournalSystemTests : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(JournalSystemTests);
+ CPPUNIT_TEST(InstantiationTest_Stack);
+ CPPUNIT_TEST(InstantiationTest_Heap);
+ CPPUNIT_TEST(InitializationTest_Stack);
+ CPPUNIT_TEST(InitializationTest_Heap);
+ CPPUNIT_TEST(EmptyRecoverTest_Stack);
+ CPPUNIT_TEST(EmptyRecoverTest_Heap);
+ CPPUNIT_TEST(EnqueueTest_Stack);
+ CPPUNIT_TEST(EnqueueTest_Heap);
+ CPPUNIT_TEST(RecoverReadTest_Stack);
+ CPPUNIT_TEST(RecoverReadTest_Heap);
+ CPPUNIT_TEST(RecoveredReadTest_Stack);
+ CPPUNIT_TEST(RecoveredReadTest_Heap);
+ CPPUNIT_TEST(RecoveredDequeueTest_Stack);
+ CPPUNIT_TEST(RecoveredDequeueTest_Heap);
+ CPPUNIT_TEST(ComplexRecoveryTest1_Stack);
+ CPPUNIT_TEST(ComplexRecoveryTest1_Heap);
+ CPPUNIT_TEST(EncodeTest_000);
+ CPPUNIT_TEST(EncodeTest_001);
+ CPPUNIT_TEST(EncodeTest_002);
+ CPPUNIT_TEST(EncodeTest_003);
+ CPPUNIT_TEST(EncodeTest_004);
+ CPPUNIT_TEST(EncodeTest_005);
+ CPPUNIT_TEST(EncodeTest_006);
+ CPPUNIT_TEST(EncodeTest_007);
+ CPPUNIT_TEST(EncodeTest_008);
+ CPPUNIT_TEST(EncodeTest_009);
+ CPPUNIT_TEST(EncodeTest_010);
+ CPPUNIT_TEST(EncodeTest_011);
+ CPPUNIT_TEST(EncodeTest_012);
+ CPPUNIT_TEST(EncodeTest_013);
+ CPPUNIT_TEST(EncodeTest_014);
+ CPPUNIT_TEST(EncodeTest_015);
+ CPPUNIT_TEST(EncodeTest_016);
+ CPPUNIT_TEST(EncodeTest_017);
+ CPPUNIT_TEST(EncodeTest_018);
+ CPPUNIT_TEST(EncodeTest_019);
+ CPPUNIT_TEST(EncodeTest_020);
+ CPPUNIT_TEST(EncodeTest_021);
+ CPPUNIT_TEST(EncodeTest_022);
+ CPPUNIT_TEST(EncodeTest_023);
+ CPPUNIT_TEST(EncodeTest_024);
+ CPPUNIT_TEST(EncodeTest_025);
+ CPPUNIT_TEST(EncodeTest_026);
+ CPPUNIT_TEST(EncodeTest_027);
+// CPPUNIT_TEST(EncodeTest_028); // Until race condition fixed
+ CPPUNIT_TEST_SUITE_END();
+
+ jtest t;
+ std::string msg;
+ char buff[MAX_MSG_SIZE + 1];
+
+public:
+
+ void InstantiationTest_Stack()
+ {
+ const char* test_name = "InstantiationTest_Stack";
+ try
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void InstantiationTest_Heap()
+ {
+ const char* test_name = "InstantiationTest_Heap";
+ rhm::journal::jcntl* jcp = NULL;
+ try
+ {
+ jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp !=
NULL);
+ delete jcp;
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void InitializationTest_Stack()
+ {
+ const char* test_name = "InitializationTest_Stack";
+ try
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.initialize();
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void InitializationTest_Heap()
+ {
+ const char* test_name = "InitializationTest_Heap";
+ rhm::journal::jcntl* jcp = NULL;
+ try
+ {
+ jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp !=
NULL);
+ jcp->initialize();
+ delete jcp;
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ if (jcp)
+ delete jcp;
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void EmptyRecoverTest_Stack()
+ {
+ const char* test_name = "EmptyRecoverTest_Stack";
+ try
+ {
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.initialize();
+ }
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.recover();
+ }
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.recover();
+ jc.recovered();
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void EmptyRecoverTest_Heap()
+ {
+ const char* test_name = "EmptyRecoverTest_Heap";
+ rhm::journal::jcntl* jcp = NULL;
+ try
+ {
+ {
+ rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->initialize();
+ delete jcp;
+ jcp = NULL;
+ }
+ {
+ rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->recover();
+ delete jcp;
+ jcp = NULL;
+ }
+ {
+ rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->recover();
+ jcp->recovered();
+ delete jcp;
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ if (jcp)
+ delete jcp;
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void EnqueueTest_Stack()
+ {
+ const char* test_name = "EnqueueTest_Stack";
+ try
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.initialize();
+ for (int m=0; m<NUM_MSGS; m++)
+ enq_msg(&jc, create_msg(msg, m));
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void EnqueueTest_Heap()
+ {
+ const char* test_name = "EnqueueTest_Heap";
+ rhm::journal::jcntl* jcp = NULL;
+ try
+ {
+ jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp !=
NULL);
+ jcp->initialize();
+ for (int m=0; m<NUM_MSGS; m++)
+ enq_msg(jcp, create_msg(msg, m));
+ delete jcp;
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ if (jcp)
+ delete jcp;
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void RecoverReadTest_Stack()
+ {
+ const char* test_name = "RecoverReadTest_Stack";
+ try
+ {
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.initialize();
+ for (int m=0; m<NUM_MSGS; m++)
+ enq_msg(&jc, create_msg(msg, m));
+ }
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.recover();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void RecoverReadTest_Heap()
+ {
+ const char* test_name = "RecoverReadTest_Heap";
+ rhm::journal::jcntl* jcp = NULL;
+ try
+ {
+ {
+ jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->initialize();
+ for (int m=0; m<NUM_MSGS; m++)
+ enq_msg(jcp, create_msg(msg, m));
+ delete jcp;
+ jcp = NULL;
+ }
+ {
+ rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->recover();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ delete jcp;
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ if (jcp)
+ delete jcp;
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void RecoveredReadTest_Stack()
+ {
+ const char* test_name = "RecoveredReadTest_Stack";
+ try
+ {
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.initialize();
+ for (int m=0; m<NUM_MSGS; m++)
+ enq_msg(&jc, create_msg(msg, m));
+ }
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.recover();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ jc.recovered();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void RecoveredReadTest_Heap()
+ {
+ const char* test_name = "RecoveredReadTest_Heap";
+ rhm::journal::jcntl* jcp = NULL;
+ try
+ {
+ {
+ jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->initialize();
+ for (int m=0; m<NUM_MSGS; m++)
+ enq_msg(jcp, create_msg(msg, m));
+ delete jcp;
+ jcp = NULL;
+ }
+ {
+ rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->recover();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ jcp->recovered();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ delete jcp;
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ if (jcp)
+ delete jcp;
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void RecoveredDequeueTest_Stack()
+ {
+ const char* test_name = "RecoveredDequeueTest_Stack";
+ try
+ {
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.initialize();
+ for (int m=0; m<NUM_MSGS; m++)
+ enq_msg(&jc, create_msg(msg, m));
+ }
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.recover();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ jc.recovered();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ for (int m=0; m<NUM_MSGS; m++)
+ deq_msg(&jc, m);
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void RecoveredDequeueTest_Heap()
+ {
+ const char* test_name = "RecoveredDequeueTest_Heap";
+ rhm::journal::jcntl* jcp = NULL;
+ try
+ {
+ {
+ jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->initialize();
+ for (int m=0; m<NUM_MSGS; m++)
+ enq_msg(jcp, create_msg(msg, m));
+ delete jcp;
+ jcp = NULL;
+ }
+ {
+ rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->recover();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ jcp->recovered();
+ for (int m=0; m<NUM_MSGS; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ for (int m=0; m<NUM_MSGS; m++)
+ deq_msg(jcp, m);
+ delete jcp;
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ if (jcp)
+ delete jcp;
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void ComplexRecoveryTest1_Stack()
+ {
+ const char* test_name = "ComplexRecoveryTest1_Stack";
+ try
+ {
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.initialize();
+ // rids: 0 to NUM_MSGS*2 - 1
+ for (int m=0; m<NUM_MSGS*2; m++)
+ enq_msg(&jc, create_msg(msg, m));
+ // rids: NUM_MSGS*2 to NUM_MSGS*3 - 1
+ for (int m=0; m<NUM_MSGS; m++)
+ deq_msg(&jc, m);
+ jc.flush();
+ for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ }
+ {
+ rhm::journal::jcntl jc(test_name, "jdata", test_name);
+ jc.recover();
+ for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ jc.recovered();
+ // rids: NUM_MSGS*3 to NUM_MSGS*4 - 1
+ for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
+ enq_msg(&jc, create_msg(msg, m));
+ jc.flush();
+ for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ // rids: NUM_MSGS*4 to NUM_MSGS*6 - 1
+ for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ deq_msg(&jc, m);
+ for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
+ deq_msg(&jc, m);
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void ComplexRecoveryTest1_Heap()
+ {
+ const char* test_name = "RecoveredDequeueTest_Heap";
+ rhm::journal::jcntl* jcp = NULL;
+ try
+ {
+ {
+ jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->initialize();
+ // rids: 0 to NUM_MSGS*2 - 1
+ for (int m=0; m<NUM_MSGS*2; m++)
+ enq_msg(jcp, create_msg(msg, m));
+ // rids: NUM_MSGS*2 to NUM_MSGS*3 - 1
+ for (int m=0; m<NUM_MSGS; m++)
+ deq_msg(jcp, m);
+ jcp->flush();
+ for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ delete jcp;
+ jcp = NULL;
+ }
+ {
+ rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
+ CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
+ jcp->recover();
+ for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ jcp->recovered();
+ // rids: NUM_MSGS*3 to NUM_MSGS*4 - 1
+ for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
+ enq_msg(jcp, create_msg(msg, m));
+ jcp->flush();
+ for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
+ create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ // rids: NUM_MSGS*4 to NUM_MSGS*6 - 1
+ for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ deq_msg(jcp, m);
+ for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
+ deq_msg(jcp, m);
+ delete jcp;
+ }
+ }
+ catch (rhm::journal::jexception& e)
+ {
+ if (jcp)
+ delete jcp;
+ std::stringstream ss;
+ ss << e;
+ CPPUNIT_FAIL(ss.str());
+ }
+ }
+
+ void EncodeTest_000()
+ {
+ runEncodeTest(0, 0, 0, false, 2, "Empty journal");
+ }
+
+ void EncodeTest_001()
+ {
+ runEncodeTest(1, 10, 10, false, 2, "1*(10 bytes)");
+ }
+
+ void EncodeTest_002()
+ {
+ runEncodeTest(1, 10, 10, true, 2, "1*(10 bytes), auto-deq");
+ }
+
+ void EncodeTest_003()
+ {
+ runEncodeTest(10, 10, 10, false, 2, "10*(10 bytes)");
+ }
+
+ void EncodeTest_004()
+ {
+ runEncodeTest(10, 10, 10, true, 2, "10*(10 bytes), auto-deq");
+ }
+
+ void EncodeTest_005()
+ {
+ runEncodeTest(10, 92, 92, false, 2, "10*(1 dblk exact fit)");
+ }
+
+ void EncodeTest_006()
+ {
+ runEncodeTest(10, 92, 92, true, 2, "10*(1 dblk exact fit), auto-deq");
+ }
+
+ void EncodeTest_007()
+ {
+ runEncodeTest(10, 93, 93, false, 2, "10*(1 dblk + 1 byte)");
+ }
+
+ void EncodeTest_008()
+ {
+ runEncodeTest(10, 93, 93, true, 2, "10*(1 dblk + 1 byte), auto-deq");
+ }
+
+ void EncodeTest_009()
+ {
+ runEncodeTest(10, 476, 476, false, 2, "10*(1 sblk exact fit)");
+ }
+
+ void EncodeTest_010()
+ {
+ runEncodeTest(10, 476, 476, true, 2, "10*(1 sblk exact fit),
auto-deq");
+ }
+
+ void EncodeTest_011()
+ {
+ runEncodeTest(10, 477, 477, false, 2, "10*(1 sblk + 1 byte)");
+ }
+
+ void EncodeTest_012()
+ {
+ runEncodeTest(10, 477, 477, true, 2, "10*(1 sblk + 1 byte),
auto-deq");
+ }
+
+ void EncodeTest_013()
+ {
+ runEncodeTest(8, 4060, 4060, false, 2, "8*(1/8 page)");
+ }
+
+ void EncodeTest_014()
+ {
+ runEncodeTest(9, 4060, 4060, false, 2, "9*(1/8 page)");
+ }
+
+ void EncodeTest_015()
+ {
+ runEncodeTest(8, 4061, 4061, false, 2, "8*(1/8 page + 1 byte)");
+ }
+
+ void EncodeTest_016()
+ {
+ runEncodeTest(8, 3932, 3932, true, 2, "8*(1/8 page - 1 dblk for deq record),
auto-deq");
+ }
+
+ void EncodeTest_017()
+ {
+ runEncodeTest(9, 3932, 3932, true, 2, "9*(1/8 page - 1 dblk for deq record),
auto-deq");
+ }
+
+ void EncodeTest_018()
+ {
+ runEncodeTest(8, 3933, 3933, true, 2,
+ "8*(1/8 page - 1 dblk for deq record + 1 byte), auto-deq");
+ }
+
+ void EncodeTest_019()
+ {
+ runEncodeTest(32, 32732, 32732, false, 2, "32*(1 page exact fit)");
+ }
+
+ void EncodeTest_020()
+ {
+ runEncodeTest(33, 32732, 32732, false, 2, "33*(1 page exact fit)");
+ }
+
+ void EncodeTest_021()
+ {
+ runEncodeTest(22, 49116, 49116, false, 2, "22*(1.5 pages)");
+ }
+
+ void EncodeTest_022()
+ {
+ runEncodeTest(22, 48988, 48988, true, 2,
+ "22*(1.5 pages - 1 dblk for deq record), auto-deq");
+ }
+
+ void EncodeTest_023()
+ {
+ runEncodeTest(48, 32732, 32732, false, 2, "48*(1 page exact fit)");
+ }
+
+ void EncodeTest_024()
+ {
+ runEncodeTest(49, 32732, 32732, false, 2, "49*(1 page exact fit)");
+ }
+
+ void EncodeTest_025()
+ {
+ runEncodeTest(20, 81884, 81884, false, 2, "20*(2.5 pages)");
+ }
+
+ void EncodeTest_026()
+ {
+ runEncodeTest(20, 81756, 81756, true, 2,
+ "20*(2.5 pages - 1 dblk for deq record), auto-deq");
+ }
+
+ void EncodeTest_027()
+ {
+ runEncodeTest(16, 786268, 786268, true, 2,
+ "16*(24 pages = 1/2 file); Total = 8 files exactly (full journal
filespace)");
+ }
+
+ void EncodeTest_028()
+ {
+ runEncodeTest(17, 786268, 786268, true, 2,
+ "17*(24 pages = 1/2 file); Total = 8 files + file 0 overwritten by
1/2 file");
+ }
+
+private:
+
+ void enq_msg(rhm::journal::jcntl* jc, const std::string msg)
+ {
+ rhm::journal::data_tok* dtp = new rhm::journal::data_tok;
+ CPPUNIT_ASSERT_MESSAGE("Data Token heap intantiation failed.", dtp !=
NULL);
+
+ unsigned aio_sleep_cnt = 0;
+ while (handle_jcntl_response(jc->enqueue_data(msg.c_str(), msg.size(), dtp),
jc,
+ aio_sleep_cnt, dtp));
+ }
+
+ void deq_msg(rhm::journal::jcntl* jc, u_int64_t rid)
+ {
+ rhm::journal::data_tok* dtp = new rhm::journal::data_tok;
+ CPPUNIT_ASSERT_MESSAGE("Data Token heap intantiation failed.", dtp !=
NULL);
+ dtp->set_wstate(rhm::journal::data_tok::ENQ);
+ dtp->set_rid(rid);
+
+ unsigned aio_sleep_cnt = 0;
+ while (handle_jcntl_response(jc->dequeue_data(dtp), jc, aio_sleep_cnt, dtp));
+ }
+
+ char* read_msg(rhm::journal::jcntl* jc)
+ {
+ memset(buff, '*', MAX_MSG_SIZE);
+ buff[MAX_MSG_SIZE] = '\0';
+
+ rhm::journal::data_tok* dtp = new rhm::journal::data_tok;
+ CPPUNIT_ASSERT_MESSAGE("Data Token heap intantiation failed.", dtp !=
NULL);
+ dtp->set_wstate(rhm::journal::data_tok::ENQ);
+
+ unsigned aio_sleep_cnt = 0;
+ while (handle_jcntl_response(jc->read_data(buff, MAX_MSG_SIZE, dtp), jc,
aio_sleep_cnt,
+ dtp));
+ buff[dtp->dsize()] = '\0';
+ return buff;
+ }
+
+ bool handle_jcntl_response(rhm::journal::iores res, rhm::journal::jcntl* jc,
+ unsigned& aio_sleep_cnt, rhm::journal::data_tok* dtp)
+ {
+ switch (res)
+ {
+ case rhm::journal::RHM_IORES_SUCCESS:
+ buff[dtp->dsize()] = '\0';
+ return false;
+ case rhm::journal::RHM_IORES_AIO_WAIT:
+ if (++aio_sleep_cnt <= MAX_AIO_SLEEPS)
+ {
+ jc->get_wr_events();
+ usleep(AIO_SLEEP_TIME);
+ }
+ else
+ {
+ delete dtp;
+ CPPUNIT_FAIL("dequeue_data(): timeout on
RHM_IORES_AIO_WAIT.");
+ }
+ break;
+ case rhm::journal::RHM_IORES_EMPTY:
+ delete dtp;
+ CPPUNIT_FAIL("dequeue_data(): RHM_IORES_EMPTY.");
+ case rhm::journal::RHM_IORES_FULL:
+ delete dtp;
+ CPPUNIT_FAIL("dequeue_data(): RHM_IORES_FULL.");
+ case rhm::journal::RHM_IORES_BUSY:
+ delete dtp;
+ CPPUNIT_FAIL("dequeue_data(): RHM_IORES_BUSY.");
+ default:
+ delete dtp;
+ CPPUNIT_FAIL("dequeue_data(): unknown return value.");
+ }
+ return true;
+ }
+
+ static std::string& create_msg(std::string& s, int msg_num)
+ {
+ std::stringstream ss;
+ ss << "Message_" << std::setfill('0') <<
std::setw(4) << msg_num;
+ ss << "_4567890123456789012345678901234567890";
+ ss << "12345678901234567890123456789012345678901234567890"; //
100 chars long (2 dblks)
+ s.assign(ss.str());
+ return s;
+ }
+
+ void runEncodeTest(const unsigned num_msgs, const unsigned min_msg_size,
+ const unsigned max_msg_szie, const bool auto_deq, const unsigned iterations,
+ const char* test_descr)
+ {
+ std::cout << " [" << test_descr << "] "
<< std::flush;
+ jtest::targs ta(num_msgs, min_msg_size, max_msg_szie, auto_deq, test_descr);
+ for (unsigned i=0; i<iterations; i++)
+ {
+ std::cout << "." << std::flush;
+ try
+ {
+ t.initialize(ta);
+ t.run();
+ }
+ catch (rhm::journal::jexception e)
+ {
+ t.finalize();
+ std::string s;
+ CPPUNIT_FAIL(e.to_string(s));
+ }
+ t.finalize();
+ }
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(JournalSystemTests);
Deleted: store/trunk/cpp/tests/jrnl/JournalTest.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/JournalTest.cpp 2007-09-23 17:37:01 UTC (rev 941)
+++ store/trunk/cpp/tests/jrnl/JournalTest.cpp 2007-09-24 18:04:55 UTC (rev 942)
@@ -1,851 +0,0 @@
-/**
-* \file JournalTest.cpp
-*
-* Red Hat Messaging - Message Journal
-*
-* This file contains the unit tests for the journal.
-*
-* \author Kim van der Riet
-*
-* Copyright 2007 Red Hat, Inc.
-*
-* This file is part of Red Hat Messaging.
-*
-* Red Hat Messaging is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
-* USA
-*
-* The GNU Lesser General Public License is available in the file COPYING.
-*/
-
-#include "../test_plugin.h"
-#include "msg_producer.hpp"
-#include "msg_consumer.hpp"
-#include "jtest.hpp"
-
-#define MAX_MSG_SIZE 127
-#define NUM_MSGS 5
-#define MAX_AIO_SLEEPS 500
-#define AIO_SLEEP_TIME 1000
-
-class JournalTest : public CppUnit::TestCase
-{
- CPPUNIT_TEST_SUITE(JournalTest);
- CPPUNIT_TEST(InstantiationTest_Stack);
- CPPUNIT_TEST(InstantiationTest_Heap);
- CPPUNIT_TEST(InitializationTest_Stack);
- CPPUNIT_TEST(InitializationTest_Heap);
- CPPUNIT_TEST(EmptyRecoverTest_Stack);
- CPPUNIT_TEST(EmptyRecoverTest_Heap);
- CPPUNIT_TEST(EnqueueTest_Stack);
- CPPUNIT_TEST(EnqueueTest_Heap);
- CPPUNIT_TEST(RecoverReadTest_Stack);
- CPPUNIT_TEST(RecoverReadTest_Heap);
- CPPUNIT_TEST(RecoveredReadTest_Stack);
- CPPUNIT_TEST(RecoveredReadTest_Heap);
- CPPUNIT_TEST(RecoveredDequeueTest_Stack);
- CPPUNIT_TEST(RecoveredDequeueTest_Heap);
- CPPUNIT_TEST(ComplexRecoveryTest1_Stack);
- CPPUNIT_TEST(ComplexRecoveryTest1_Heap);
- CPPUNIT_TEST(EncodeTest_000);
- CPPUNIT_TEST(EncodeTest_001);
- CPPUNIT_TEST(EncodeTest_002);
- CPPUNIT_TEST(EncodeTest_003);
- CPPUNIT_TEST(EncodeTest_004);
- CPPUNIT_TEST(EncodeTest_005);
- CPPUNIT_TEST(EncodeTest_006);
- CPPUNIT_TEST(EncodeTest_007);
- CPPUNIT_TEST(EncodeTest_008);
- CPPUNIT_TEST(EncodeTest_009);
- CPPUNIT_TEST(EncodeTest_010);
- CPPUNIT_TEST(EncodeTest_011);
- CPPUNIT_TEST(EncodeTest_012);
- CPPUNIT_TEST(EncodeTest_013);
- CPPUNIT_TEST(EncodeTest_014);
- CPPUNIT_TEST(EncodeTest_015);
- CPPUNIT_TEST(EncodeTest_016);
- CPPUNIT_TEST(EncodeTest_017);
- CPPUNIT_TEST(EncodeTest_018);
- CPPUNIT_TEST(EncodeTest_019);
- CPPUNIT_TEST(EncodeTest_020);
- CPPUNIT_TEST(EncodeTest_021);
- CPPUNIT_TEST(EncodeTest_022);
- CPPUNIT_TEST(EncodeTest_023);
- CPPUNIT_TEST(EncodeTest_024);
- CPPUNIT_TEST(EncodeTest_025);
- CPPUNIT_TEST(EncodeTest_026);
- CPPUNIT_TEST(EncodeTest_027);
-// CPPUNIT_TEST(EncodeTest_028); // Until race condition fixed
- CPPUNIT_TEST_SUITE_END();
-
- jtest t;
- std::string msg;
- char buff[MAX_MSG_SIZE + 1];
-
-public:
-
- void InstantiationTest_Stack()
- {
- const char* test_name = "InstantiationTest_Stack";
- try
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void InstantiationTest_Heap()
- {
- const char* test_name = "InstantiationTest_Heap";
- rhm::journal::jcntl* jcp = NULL;
- try
- {
- jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp !=
NULL);
- delete jcp;
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void InitializationTest_Stack()
- {
- const char* test_name = "InitializationTest_Stack";
- try
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.initialize();
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void InitializationTest_Heap()
- {
- const char* test_name = "InitializationTest_Heap";
- rhm::journal::jcntl* jcp = NULL;
- try
- {
- jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp !=
NULL);
- jcp->initialize();
- delete jcp;
- }
- catch (rhm::journal::jexception& e)
- {
- if (jcp)
- delete jcp;
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void EmptyRecoverTest_Stack()
- {
- const char* test_name = "EmptyRecoverTest_Stack";
- try
- {
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.initialize();
- }
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.recover();
- }
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.recover();
- jc.recovered();
- }
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void EmptyRecoverTest_Heap()
- {
- const char* test_name = "EmptyRecoverTest_Heap";
- rhm::journal::jcntl* jcp = NULL;
- try
- {
- {
- rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->initialize();
- delete jcp;
- jcp = NULL;
- }
- {
- rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->recover();
- delete jcp;
- jcp = NULL;
- }
- {
- rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->recover();
- jcp->recovered();
- delete jcp;
- }
- }
- catch (rhm::journal::jexception& e)
- {
- if (jcp)
- delete jcp;
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void EnqueueTest_Stack()
- {
- const char* test_name = "EnqueueTest_Stack";
- try
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.initialize();
- for (int m=0; m<NUM_MSGS; m++)
- enq_msg(&jc, create_msg(msg, m));
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void EnqueueTest_Heap()
- {
- const char* test_name = "EnqueueTest_Heap";
- rhm::journal::jcntl* jcp = NULL;
- try
- {
- jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp !=
NULL);
- jcp->initialize();
- for (int m=0; m<NUM_MSGS; m++)
- enq_msg(jcp, create_msg(msg, m));
- delete jcp;
- }
- catch (rhm::journal::jexception& e)
- {
- if (jcp)
- delete jcp;
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void RecoverReadTest_Stack()
- {
- const char* test_name = "RecoverReadTest_Stack";
- try
- {
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.initialize();
- for (int m=0; m<NUM_MSGS; m++)
- enq_msg(&jc, create_msg(msg, m));
- }
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.recover();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- }
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void RecoverReadTest_Heap()
- {
- const char* test_name = "RecoverReadTest_Heap";
- rhm::journal::jcntl* jcp = NULL;
- try
- {
- {
- jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->initialize();
- for (int m=0; m<NUM_MSGS; m++)
- enq_msg(jcp, create_msg(msg, m));
- delete jcp;
- jcp = NULL;
- }
- {
- rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->recover();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- delete jcp;
- }
- }
- catch (rhm::journal::jexception& e)
- {
- if (jcp)
- delete jcp;
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void RecoveredReadTest_Stack()
- {
- const char* test_name = "RecoveredReadTest_Stack";
- try
- {
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.initialize();
- for (int m=0; m<NUM_MSGS; m++)
- enq_msg(&jc, create_msg(msg, m));
- }
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.recover();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- jc.recovered();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- }
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void RecoveredReadTest_Heap()
- {
- const char* test_name = "RecoveredReadTest_Heap";
- rhm::journal::jcntl* jcp = NULL;
- try
- {
- {
- jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->initialize();
- for (int m=0; m<NUM_MSGS; m++)
- enq_msg(jcp, create_msg(msg, m));
- delete jcp;
- jcp = NULL;
- }
- {
- rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->recover();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- jcp->recovered();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- delete jcp;
- }
- }
- catch (rhm::journal::jexception& e)
- {
- if (jcp)
- delete jcp;
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void RecoveredDequeueTest_Stack()
- {
- const char* test_name = "RecoveredDequeueTest_Stack";
- try
- {
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.initialize();
- for (int m=0; m<NUM_MSGS; m++)
- enq_msg(&jc, create_msg(msg, m));
- }
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.recover();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- jc.recovered();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- for (int m=0; m<NUM_MSGS; m++)
- deq_msg(&jc, m);
- }
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void RecoveredDequeueTest_Heap()
- {
- const char* test_name = "RecoveredDequeueTest_Heap";
- rhm::journal::jcntl* jcp = NULL;
- try
- {
- {
- jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->initialize();
- for (int m=0; m<NUM_MSGS; m++)
- enq_msg(jcp, create_msg(msg, m));
- delete jcp;
- jcp = NULL;
- }
- {
- rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->recover();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- jcp->recovered();
- for (int m=0; m<NUM_MSGS; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- for (int m=0; m<NUM_MSGS; m++)
- deq_msg(jcp, m);
- delete jcp;
- }
- }
- catch (rhm::journal::jexception& e)
- {
- if (jcp)
- delete jcp;
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void ComplexRecoveryTest1_Stack()
- {
- const char* test_name = "ComplexRecoveryTest1_Stack";
- try
- {
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.initialize();
- // rids: 0 to NUM_MSGS*2 - 1
- for (int m=0; m<NUM_MSGS*2; m++)
- enq_msg(&jc, create_msg(msg, m));
- // rids: NUM_MSGS*2 to NUM_MSGS*3 - 1
- for (int m=0; m<NUM_MSGS; m++)
- deq_msg(&jc, m);
- jc.flush();
- for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- }
- {
- rhm::journal::jcntl jc(test_name, "jdata", test_name);
- jc.recover();
- for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- jc.recovered();
- // rids: NUM_MSGS*3 to NUM_MSGS*4 - 1
- for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
- enq_msg(&jc, create_msg(msg, m));
- jc.flush();
- for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
- // rids: NUM_MSGS*4 to NUM_MSGS*6 - 1
- for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- deq_msg(&jc, m);
- for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
- deq_msg(&jc, m);
- }
- }
- catch (rhm::journal::jexception& e)
- {
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void ComplexRecoveryTest1_Heap()
- {
- const char* test_name = "RecoveredDequeueTest_Heap";
- rhm::journal::jcntl* jcp = NULL;
- try
- {
- {
- jcp = new rhm::journal::jcntl(test_name, "jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->initialize();
- // rids: 0 to NUM_MSGS*2 - 1
- for (int m=0; m<NUM_MSGS*2; m++)
- enq_msg(jcp, create_msg(msg, m));
- // rids: NUM_MSGS*2 to NUM_MSGS*3 - 1
- for (int m=0; m<NUM_MSGS; m++)
- deq_msg(jcp, m);
- jcp->flush();
- for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- delete jcp;
- jcp = NULL;
- }
- {
- rhm::journal::jcntl* jcp = new rhm::journal::jcntl(test_name,
"jdata", test_name);
- CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.",
jcp != NULL);
- jcp->recover();
- for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- jcp->recovered();
- // rids: NUM_MSGS*3 to NUM_MSGS*4 - 1
- for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
- enq_msg(jcp, create_msg(msg, m));
- jcp->flush();
- for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
- // rids: NUM_MSGS*4 to NUM_MSGS*6 - 1
- for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- deq_msg(jcp, m);
- for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
- deq_msg(jcp, m);
- delete jcp;
- }
- }
- catch (rhm::journal::jexception& e)
- {
- if (jcp)
- delete jcp;
- std::stringstream ss;
- ss << e;
- CPPUNIT_FAIL(ss.str());
- }
- }
-
- void EncodeTest_000()
- {
- runEncodeTest(0, 0, 0, false, 2, "Empty journal");
- }
-
- void EncodeTest_001()
- {
- runEncodeTest(1, 10, 10, false, 2, "1*(10 bytes)");
- }
-
- void EncodeTest_002()
- {
- runEncodeTest(1, 10, 10, true, 2, "1*(10 bytes), auto-deq");
- }
-
- void EncodeTest_003()
- {
- runEncodeTest(10, 10, 10, false, 2, "10*(10 bytes)");
- }
-
- void EncodeTest_004()
- {
- runEncodeTest(10, 10, 10, true, 2, "10*(10 bytes), auto-deq");
- }
-
- void EncodeTest_005()
- {
- runEncodeTest(10, 92, 92, false, 2, "10*(1 dblk exact fit)");
- }
-
- void EncodeTest_006()
- {
- runEncodeTest(10, 92, 92, true, 2, "10*(1 dblk exact fit), auto-deq");
- }
-
- void EncodeTest_007()
- {
- runEncodeTest(10, 93, 93, false, 2, "10*(1 dblk + 1 byte)");
- }
-
- void EncodeTest_008()
- {
- runEncodeTest(10, 93, 93, true, 2, "10*(1 dblk + 1 byte), auto-deq");
- }
-
- void EncodeTest_009()
- {
- runEncodeTest(10, 476, 476, false, 2, "10*(1 sblk exact fit)");
- }
-
- void EncodeTest_010()
- {
- runEncodeTest(10, 476, 476, true, 2, "10*(1 sblk exact fit),
auto-deq");
- }
-
- void EncodeTest_011()
- {
- runEncodeTest(10, 477, 477, false, 2, "10*(1 sblk + 1 byte)");
- }
-
- void EncodeTest_012()
- {
- runEncodeTest(10, 477, 477, true, 2, "10*(1 sblk + 1 byte),
auto-deq");
- }
-
- void EncodeTest_013()
- {
- runEncodeTest(8, 4060, 4060, false, 2, "8*(1/8 page)");
- }
-
- void EncodeTest_014()
- {
- runEncodeTest(9, 4060, 4060, false, 2, "9*(1/8 page)");
- }
-
- void EncodeTest_015()
- {
- runEncodeTest(8, 4061, 4061, false, 2, "8*(1/8 page + 1 byte)");
- }
-
- void EncodeTest_016()
- {
- runEncodeTest(8, 3932, 3932, true, 2, "8*(1/8 page - 1 dblk for deq record),
auto-deq");
- }
-
- void EncodeTest_017()
- {
- runEncodeTest(9, 3932, 3932, true, 2, "9*(1/8 page - 1 dblk for deq record),
auto-deq");
- }
-
- void EncodeTest_018()
- {
- runEncodeTest(8, 3933, 3933, true, 2,
- "8*(1/8 page - 1 dblk for deq record + 1 byte), auto-deq");
- }
-
- void EncodeTest_019()
- {
- runEncodeTest(32, 32732, 32732, false, 2, "32*(1 page exact fit)");
- }
-
- void EncodeTest_020()
- {
- runEncodeTest(33, 32732, 32732, false, 2, "33*(1 page exact fit)");
- }
-
- void EncodeTest_021()
- {
- runEncodeTest(22, 49116, 49116, false, 2, "22*(1.5 pages)");
- }
-
- void EncodeTest_022()
- {
- runEncodeTest(22, 48988, 48988, true, 2,
- "22*(1.5 pages - 1 dblk for deq record), auto-deq");
- }
-
- void EncodeTest_023()
- {
- runEncodeTest(48, 32732, 32732, false, 2, "48*(1 page exact fit)");
- }
-
- void EncodeTest_024()
- {
- runEncodeTest(49, 32732, 32732, false, 2, "49*(1 page exact fit)");
- }
-
- void EncodeTest_025()
- {
- runEncodeTest(20, 81884, 81884, false, 2, "20*(2.5 pages)");
- }
-
- void EncodeTest_026()
- {
- runEncodeTest(20, 81756, 81756, true, 2,
- "20*(2.5 pages - 1 dblk for deq record), auto-deq");
- }
-
- void EncodeTest_027()
- {
- runEncodeTest(16, 786268, 786268, true, 2,
- "16*(24 pages = 1/2 file); Total = 8 files exactly (full journal
filespace)");
- }
-
- void EncodeTest_028()
- {
- runEncodeTest(17, 786268, 786268, true, 2,
- "17*(24 pages = 1/2 file); Total = 8 files + file 0 overwritten by
1/2 file");
- }
-
-private:
-
- void enq_msg(rhm::journal::jcntl* jc, const std::string msg)
- {
- rhm::journal::data_tok* dtp = new rhm::journal::data_tok;
- CPPUNIT_ASSERT_MESSAGE("Data Token heap intantiation failed.", dtp !=
NULL);
-
- unsigned aio_sleep_cnt = 0;
- while (handle_jcntl_response(jc->enqueue_data(msg.c_str(), msg.size(), dtp),
jc,
- aio_sleep_cnt, dtp));
- }
-
- void deq_msg(rhm::journal::jcntl* jc, u_int64_t rid)
- {
- rhm::journal::data_tok* dtp = new rhm::journal::data_tok;
- CPPUNIT_ASSERT_MESSAGE("Data Token heap intantiation failed.", dtp !=
NULL);
- dtp->set_wstate(rhm::journal::data_tok::ENQ);
- dtp->set_rid(rid);
-
- unsigned aio_sleep_cnt = 0;
- while (handle_jcntl_response(jc->dequeue_data(dtp), jc, aio_sleep_cnt, dtp));
- }
-
- char* read_msg(rhm::journal::jcntl* jc)
- {
- memset(buff, '*', MAX_MSG_SIZE);
- buff[MAX_MSG_SIZE] = '\0';
-
- rhm::journal::data_tok* dtp = new rhm::journal::data_tok;
- CPPUNIT_ASSERT_MESSAGE("Data Token heap intantiation failed.", dtp !=
NULL);
- dtp->set_wstate(rhm::journal::data_tok::ENQ);
-
- unsigned aio_sleep_cnt = 0;
- while (handle_jcntl_response(jc->read_data(buff, MAX_MSG_SIZE, dtp), jc,
aio_sleep_cnt, dtp));
- buff[dtp->dsize()] = '\0';
- return buff;
- }
-
- bool handle_jcntl_response(rhm::journal::iores res, rhm::journal::jcntl* jc,
- unsigned& aio_sleep_cnt, rhm::journal::data_tok* dtp)
- {
- switch (res)
- {
- case rhm::journal::RHM_IORES_SUCCESS:
- buff[dtp->dsize()] = '\0';
- return false;
- case rhm::journal::RHM_IORES_AIO_WAIT:
- if (++aio_sleep_cnt <= MAX_AIO_SLEEPS)
- {
- jc->get_wr_events();
- usleep(AIO_SLEEP_TIME);
- }
- else
- {
- delete dtp;
- CPPUNIT_FAIL("dequeue_data(): timeout on
RHM_IORES_AIO_WAIT.");
- }
- break;
- case rhm::journal::RHM_IORES_EMPTY:
- delete dtp;
- CPPUNIT_FAIL("dequeue_data(): RHM_IORES_EMPTY.");
- case rhm::journal::RHM_IORES_FULL:
- delete dtp;
- CPPUNIT_FAIL("dequeue_data(): RHM_IORES_FULL.");
- case rhm::journal::RHM_IORES_BUSY:
- delete dtp;
- CPPUNIT_FAIL("dequeue_data(): RHM_IORES_BUSY.");
- default:
- delete dtp;
- CPPUNIT_FAIL("dequeue_data(): unknown return value.");
- }
- return true;
- }
-
- static std::string& create_msg(std::string& s, int msg_num)
- {
- std::stringstream ss;
- ss << "Message_" << std::setfill('0') <<
std::setw(4) << msg_num;
- ss << "_4567890123456789012345678901234567890";
- ss << "12345678901234567890123456789012345678901234567890"; //
100 chars long (2 dblks)
- s.assign(ss.str());
- return s;
- }
-
- void runEncodeTest(const unsigned num_msgs, const unsigned min_msg_size,
- const unsigned max_msg_szie, const bool auto_deq, const unsigned iterations,
- const char* test_descr)
- {
- std::cout << " [" << test_descr << "] "
<< std::flush;
- jtest::targs ta(num_msgs, min_msg_size, max_msg_szie, auto_deq, test_descr);
- for (unsigned i=0; i<iterations; i++)
- {
- std::cout << "." << std::flush;
- try
- {
- t.initialize(ta);
- t.run();
- }
- catch (rhm::journal::jexception e)
- {
- t.finalize();
- std::string s;
- CPPUNIT_FAIL(e.to_string(s));
- }
- t.finalize();
- }
- }
-};
-
-// Make this test suite a plugin.
-CPPUNIT_PLUGIN_IMPLEMENT();
-CPPUNIT_TEST_SUITE_REGISTRATION(JournalTest);
Added: store/trunk/cpp/tests/jrnl/JournalUnitTests.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/JournalUnitTests.cpp (rev 0)
+++ store/trunk/cpp/tests/jrnl/JournalUnitTests.cpp 2007-09-24 18:04:55 UTC (rev 942)
@@ -0,0 +1,125 @@
+/**
+* \file JournalUnitTests.cpp
+*
+* Red Hat Messaging - Message Journal
+*
+* This file contains the unit tests for the journal.
+*
+* \author Kim van der Riet
+*
+* Copyright 2007 Red Hat, Inc.
+*
+* This file is part of Red Hat Messaging.
+*
+* Red Hat Messaging is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2.1 of the License, or (at your option) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+* USA
+*
+* The GNU Lesser General Public License is available in the file COPYING.
+*/
+
+#include "../test_plugin.h"
+
+#include <jrnl/jexception.hpp>
+
+using namespace rhm::journal;
+using namespace std;
+
+class JournalUnitTests : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(JournalUnitTests);
+ CPPUNIT_TEST(JournalExceptionTest);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+
+ void JournalExceptionTest()
+ {
+ jexception e1(1);
+ CPPUNIT_ASSERT_MESSAGE("e1: Error code bad.", e1.err_code() == 1);
+ CPPUNIT_ASSERT_MESSAGE("e1: Additional information bad.",
e1.additional_info().empty());
+ CPPUNIT_ASSERT_MESSAGE("e1: Throwing class bad.",
e1.throwing_class().empty());
+ CPPUNIT_ASSERT_MESSAGE("e1: Throwing function bad.",
e1.throwing_fn().empty());
+
+ jexception e2("exception2");
+ CPPUNIT_ASSERT_MESSAGE("e2: Error code bad.", e2.err_code() == 0);
+ CPPUNIT_ASSERT_MESSAGE("e2: Additional information bad.",
+ e2.additional_info().compare("exception2") == 0);
+ CPPUNIT_ASSERT_MESSAGE("e2: Throwing class bad.",
e2.throwing_class().empty());
+ CPPUNIT_ASSERT_MESSAGE("e2: Throwing function bad.",
e2.throwing_fn().empty());
+
+ string msg3("exception3");
+ jexception e3(msg3);
+ CPPUNIT_ASSERT_MESSAGE("e3: Error code bad.", e3.err_code() == 0);
+ CPPUNIT_ASSERT_MESSAGE("e3: Additional information bad.",
+ e3.additional_info().compare(msg3) == 0);
+ CPPUNIT_ASSERT_MESSAGE("e3: Throwing class bad.",
e3.throwing_class().empty());
+ CPPUNIT_ASSERT_MESSAGE("e3: Throwing function bad.",
e3.throwing_fn().empty());
+
+ jexception e4(4, "exception4");
+ CPPUNIT_ASSERT_MESSAGE("e4: Error code bad.", e4.err_code() == 4);
+ CPPUNIT_ASSERT_MESSAGE("e4: Additional information bad.",
+ e4.additional_info().compare("exception4") == 0);
+ CPPUNIT_ASSERT_MESSAGE("e4: Throwing class bad.",
e4.throwing_class().empty());
+ CPPUNIT_ASSERT_MESSAGE("e4: Throwing function bad.",
e4.throwing_fn().empty());
+
+ string msg5("exception5");
+ jexception e5(5, msg5);
+ CPPUNIT_ASSERT_MESSAGE("e5: Error code bad.", e5.err_code() == 5);
+ CPPUNIT_ASSERT_MESSAGE("e5: Additional information bad.",
+ e5.additional_info().compare(msg5) == 0);
+ CPPUNIT_ASSERT_MESSAGE("e5: Throwing class bad.",
e5.throwing_class().empty());
+ CPPUNIT_ASSERT_MESSAGE("e5: Throwing function bad.",
e5.throwing_fn().empty());
+
+ jexception e6(6, "class6", "fn6");
+ CPPUNIT_ASSERT_MESSAGE("e6: Error code bad.", e6.err_code() == 6);
+ CPPUNIT_ASSERT_MESSAGE("e6: Additional information bad.",
e6.additional_info().empty());
+ CPPUNIT_ASSERT_MESSAGE("e6: Throwing class bad.",
+ e6.throwing_class().compare("class6") == 0);
+ CPPUNIT_ASSERT_MESSAGE("e6: Throwing function bad.",
e6.throwing_fn().compare("fn6") == 0);
+
+ string cls7("class7");
+ string fn7("fn7");
+ jexception e7(7, cls7, fn7);
+ CPPUNIT_ASSERT_MESSAGE("e7: Error code bad.", e7.err_code() == 7);
+ CPPUNIT_ASSERT_MESSAGE("e7: Additional information bad.",
e7.additional_info().empty());
+ CPPUNIT_ASSERT_MESSAGE("e7: Throwing class bad.",
e7.throwing_class().compare(cls7) == 0);
+ CPPUNIT_ASSERT_MESSAGE("e7: Throwing function bad.",
e7.throwing_fn().compare(fn7) == 0);
+
+ jexception e8(8, "exception8", "class8", "fn8");
+ CPPUNIT_ASSERT_MESSAGE("e8: Error code bad.", e8.err_code() == 8);
+ CPPUNIT_ASSERT_MESSAGE("e8: Additional information bad.",
+ e8.additional_info().compare("exception8") == 0);
+ CPPUNIT_ASSERT_MESSAGE("e8: Throwing class bad.",
+ e8.throwing_class().compare("class8") == 0);
+ CPPUNIT_ASSERT_MESSAGE("e8: Throwing function bad.",
e8.throwing_fn().compare("fn8") == 0);
+
+ string msg9("exception9");
+ string cls9("class9");
+ string fn9("fn9");
+ jexception e9(9, msg9, cls9, fn9);
+ CPPUNIT_ASSERT_MESSAGE("e9: Error code bad.", e9.err_code() == 9);
+ CPPUNIT_ASSERT_MESSAGE("e9: Additional information bad.",
+ e9.additional_info().compare(msg9) == 0);
+ CPPUNIT_ASSERT_MESSAGE("e9: Throwing class bad.",
e9.throwing_class().compare(cls9) == 0);
+ CPPUNIT_ASSERT_MESSAGE("e9: Throwing function bad.",
e9.throwing_fn().compare(fn9) == 0);
+ }
+
+private:
+
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(JournalUnitTests);
Modified: store/trunk/cpp/tests/jrnl/Makefile.am
===================================================================
--- store/trunk/cpp/tests/jrnl/Makefile.am 2007-09-23 17:37:01 UTC (rev 941)
+++ store/trunk/cpp/tests/jrnl/Makefile.am 2007-09-24 18:04:55 UTC (rev 942)
@@ -22,26 +22,30 @@
abs_builddir=@abs_builddir@
AM_CXXFLAGS = $(WARNING_CFLAGS) $(CPPUNIT_CXXFLAGS) $(QPID_CXXFLAGS) -pthread
-#AM_CXXFLAGS = $(WARNING_CFLAGS) $(CPPUNIT_CXXFLAGS) $(QPID_CXXFLAGS) -pthread
-DRHM_CLEAN -DRHM_WRONLY -DRHM_TESTVALS
INCLUDES=-I../../lib
TESTS = run-journal-tests
check_LTLIBRARIES = \
- JournalTest.la \
+ JournalUnitTests.la \
+ JournalSystemTests.la \
libdlclose_noop.la
-JournalTest_la_SOURCES = \
- JournalTest.cpp \
+JournalUnitTests_la_SOURCES = \
+ JournalUnitTests.cpp
+JournalUnitTests_la_LDFLAGS = -module -rpath $(abs_builddir)
+
+JournalSystemTests_la_SOURCES = \
+ JournalSystemTests.cpp \
jtest.cpp \
msg_producer.cpp \
msg_consumer.cpp \
jtest.hpp \
msg_producer.hpp \
msg_consumer.hpp
-JournalTest_la_LDFLAGS = -lpthread -module -rpath $(abs_builddir)
-JournalTest_la_LIBADD = ../../lib/libbdbstore.la $(CPPUNIT_LIBS)
+JournalSystemTests_la_LDFLAGS = -lpthread -module -rpath $(abs_builddir)
+JournalSystemTests_la_LIBADD = ../../lib/libbdbstore.la $(CPPUNIT_LIBS)
libdlclose_noop_la_SOURCES = ../dlclose_noop.c
libdlclose_noop_la_LDFLAGS = -module -rpath $(abs_builddir)
Modified: store/trunk/cpp/tests/jrnl/Makefile.rtest
===================================================================
--- store/trunk/cpp/tests/jrnl/Makefile.rtest 2007-09-23 17:37:01 UTC (rev 941)
+++ store/trunk/cpp/tests/jrnl/Makefile.rtest 2007-09-24 18:04:55 UTC (rev 942)
@@ -122,5 +122,6 @@
clean-data:
@rm -rf jdata
+ @rm -rf rd_test_jrnls
clean-all: clean clean-data
Modified: store/trunk/cpp/tests/jrnl/run-journal-tests
===================================================================
--- store/trunk/cpp/tests/jrnl/run-journal-tests 2007-09-23 17:37:01 UTC (rev 941)
+++ store/trunk/cpp/tests/jrnl/run-journal-tests 2007-09-24 18:04:55 UTC (rev 942)
@@ -4,6 +4,6 @@
fail=0
-LD_PRELOAD=$pwd/.libs/libdlclose_noop.so DllPlugInTester -c -b $pwd/.libs/*Test.so ||
fail=1
+LD_PRELOAD=$pwd/.libs/libdlclose_noop.so DllPlugInTester -c -b
$pwd/.libs/Journal*Tests.so || fail=1
exit $fail