Date: Tuesday, January 30, 2007 @ 15:21:53
Author: gilles
Path: /cvsroot/carob/carob/test/20-Write
Modified: TestExecWriteRequest.cpp (1.6 -> 1.7)
Modified and enabled testThreadedWrite
Now uses its own table and checks the data written
Default is 50 thread doing 10 writes each
--------------------------+
TestExecWriteRequest.cpp | 52 ++++++++++++++++++++++++++++++++++++---------
1 files changed, 42 insertions(+), 10 deletions(-)
Index: carob/test/20-Write/TestExecWriteRequest.cpp
diff -u carob/test/20-Write/TestExecWriteRequest.cpp:1.6
carob/test/20-Write/TestExecWriteRequest.cpp:1.7
--- carob/test/20-Write/TestExecWriteRequest.cpp:1.6 Wed Dec 20 19:38:41 2006
+++ carob/test/20-Write/TestExecWriteRequest.cpp Tue Jan 30 15:21:53 2007
@@ -99,34 +99,66 @@
CPPUNIT_ASSERT(nbRowsAffected == 1);
}
+#define NB_THREADS 50
+#define NB_WRITES 10
+#define THREAD_TABLE L"thread_table"
+#define THREAD_TABLE_TYPE L"(i integer, s varchar(200))"
+
+struct threadArg
+{
+ TestExecWriteRequest* instancePtr;
+ int threadId;
+};
+
void *doThreadedWrites(void *arg)
{
+ threadArg* me = (threadArg*)arg;
const wstring fctName(L"TestExecWriteRequest::testThreadedWrite thread#"
- + toWString((uint64_t)pthread_self()));
- TestExecWriteRequest* instance = (TestExecWriteRequest*) arg;
- instance->doNWrites(fctName, 10);
+ + toWString(me->threadId));
+
+ Statement* statementPtr = me->instancePtr->connectionPtr->createStatement();
+ for (int i = 0; i < NB_WRITES; i++)
+ {
+ int nbRowsAffected = statementPtr->executeUpdate(
+ wstring(L"INSERT INTO ") + THREAD_TABLE + L" VALUES ("
+ + toWString(me->threadId*NB_WRITES+i) + L", '" + fctName+L"')");
+ CPPUNIT_ASSERT(nbRowsAffected == 1);
+ }
+ logInfo(fctName, toWString(NB_WRITES) + L" requests succeeded");
+
+ // check that the writes have been done
+ DriverResultSet* drsPtr = statementPtr->executeQuery(
+ wstring(L"SELECT * FROM ") + THREAD_TABLE + L" WHERE s='" + fctName +
L"'");
+ for (int i = 0; i < NB_WRITES; i++)
+ {
+ CPPUNIT_ASSERT(drsPtr->next());
+ logInfo(fctName, drsPtr->getAsString(1) + L"->" + drsPtr->getAsString(2));
+ }
pthread_exit(0);
return NULL;
}
-#define NB_THREADS 10
-
void TestExecWriteRequest::testThreadedWrite()
{
const wstring fctName(L"TestExecWriteRequest::testThreadedWrite");
+ // create the test table
+ createOrReplaceTable(connectionPtr, THREAD_TABLE, THREAD_TABLE_TYPE);
+
pthread_t threads[NB_THREADS];
int retCode[NB_THREADS];
-
+ threadArg args[NB_THREADS];
/* Create independent threads each of which will execute write function */
for (int i=0; i<NB_THREADS; i++)
{
- retCode[i] = pthread_create( &(threads[i]), NULL, doThreadedWrites,
(void*) this);
+ args[i].instancePtr = this;
+ args[i].threadId = i;
+ retCode[i] = pthread_create( &(threads[i]), NULL, doThreadedWrites,
(void*) &(args[i]));
}
// Wait till threads are complete
for (int i=0; i<NB_THREADS; i++)
{
pthread_join(threads[i], NULL);
- }
+ }
}
#ifndef CAROB_TEST_USE_MYSQL
void TestExecWriteRequest::testWriteThousandGood()
@@ -201,11 +233,11 @@
suiteOfTests->addTest(new CppUnit::TestCaller<TestExecWriteRequest>(
"TestExecWriteRequest::testWriteGood",
&TestExecWriteRequest::testWriteGood));
-/*
+
suiteOfTests->addTest(new CppUnit::TestCaller<TestExecWriteRequest>(
"TestExecWriteRequest::testThreadedWrite",
&TestExecWriteRequest::testThreadedWrite));
- suiteOfTests->addTest(new CppUnit::TestCaller<TestExecWriteRequest>(
+/* suiteOfTests->addTest(new CppUnit::TestCaller<TestExecWriteRequest>(
"TestExecWriteRequest::testWriteThousandGood",
&TestExecWriteRequest::testWriteThousandGood));
suiteOfTests->addTest(new CppUnit::TestCaller<TestExecWriteRequest>(
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits