fixing timing issue in test script
[csql.git] / test / dbapi / Connection / isotest26.c
blobefbf1f5d810d6285a9c939179620f3e0e9e00a40
1 #include "common.h"
2 //READ_REPEATABLE
3 //T1 doing delete and T2 doing insert for same tuple
4 //Insert should fail
5 int deleteDone=0, insertDone=0;
6 void* runTest1(void *p);
7 void* runTest2(void *p);
8 int *p1RetVal = NULL;
9 int *p2RetVal = NULL;
10 int main()
13 Connection conn;
14 DbRetVal rv = conn.open("root", "manager");
15 if (rv != OK) { printf("Error during connection %d\n", rv); return 1; }
16 DatabaseManager *dbMgr = conn.getDatabaseManager();
17 int ret = createTable(dbMgr);
18 if (ret != 0) { return 1; }
20 rv = conn.startTransaction();
21 if (rv != OK) {printf ("Unable to start trans\n"); return 1; }
22 rv = insert(dbMgr, 100, false);
23 if (rv != OK) { printf("Unable to insert\n"); return 2; }
24 conn.commit();
25 printf("Tuple inserted\n");
27 pthread_t thr[2];
28 int *status1, *status2;
29 pthread_create (&thr[0], NULL, &runTest1, NULL);
30 pthread_create (&thr[1], NULL, &runTest2, NULL);
31 printf("All threads started\n");
33 pthread_join(thr[0], (void**)&status1);
34 pthread_join(thr[1], (void**)&status2);
35 ret = 0;
36 if (*status1 != 0 || *status2 != 0) ret = 1;
37 dbMgr->dropTable("t1");
38 conn.close();
39 if (p1RetVal) { delete p1RetVal; p1RetVal = NULL; }
40 if (p2RetVal) { delete p2RetVal; p2RetVal = NULL; }
41 return ret;
43 void* runTest1(void *message)
45 Connection conn;
46 DbRetVal rv = conn.open("root", "manager");
47 if (rv != OK) { printf("Error during connection %d\n", rv); return NULL; }
48 DatabaseManager *dbMgr = conn.getDatabaseManager();
49 if (dbMgr == NULL) { printf("Auth failed\n"); return NULL;}
50 rv = conn.startTransaction(READ_REPEATABLE);
51 if (rv != OK) return NULL;
52 printf("Thread and pid is %d %lu\n", os::getpid(), os::getthrid());
53 p1RetVal = new int();
54 *p1RetVal = 0;
55 rv = remove(dbMgr, 100, true);
56 if (rv != OK) { printf("Test Failed:first thread failed to delete\n"); *p1RetVal = 1; }
57 deleteDone =1;
58 while(insertDone !=1) ::sleep(1);
59 conn.commit();
60 rv = conn.close();
61 pthread_exit(p1RetVal);
63 void* runTest2(void *message)
65 os::sleep(1);
66 Connection conn;
67 DbRetVal rv = conn.open("root", "manager");
68 if (rv != OK) { printf("Error during connection %d\n", rv); return NULL; }
69 DatabaseManager *dbMgr = conn.getDatabaseManager();
70 if (dbMgr == NULL) { printf("Auth failed\n"); return NULL;}
71 rv = conn.startTransaction(READ_REPEATABLE);
72 if (rv != OK) return NULL;
73 printf("Thread and pid is %d %lu\n", os::getpid(), os::getthrid());
74 while(deleteDone !=1) ::sleep(1);
75 p2RetVal = new int();
76 *p2RetVal = 0;
77 rv = insert(dbMgr, 100, false);
78 if (rv != OK) { printf("Test Passed:second thread did not insert\n"); *p2RetVal = 0; }
79 if (rv == OK) { printf("Test Failed:second thread inserted\n"); *p2RetVal = 1; }
80 insertDone = 1;
81 conn.commit();
82 conn.close();
83 pthread_exit(p2RetVal);