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

Reply via email to