Mercurial Hosting > traffic-intelligence
view trajectorymanagement/test/DBSQLiteAccessTest.cpp @ 1192:606817bc31e8
bug correction
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 29 Jun 2022 23:02:47 +0200 |
parents | e1e7acef8eab |
children |
line wrap: on
line source
#include "DBSQLiteAccessTest.h" void DBSQLiteAccessTest::setUp(void) { db = new DBSQLiteAccess(); dbName = "XXXXXX.sqlite"; int res = mkstemps((char*) dbName.c_str(), 7); CPPUNIT_ASSERT(res != -1); } void DBSQLiteAccessTest::tearDown(void) { delete db; remove(dbName.c_str()); } void DBSQLiteAccessTest::testConnect1(void) { CPPUNIT_ASSERT_EQUAL(db->connect(dbName.c_str()), true); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); CPPUNIT_ASSERT_EQUAL(db->connect(dbName.c_str()), false); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); } void DBSQLiteAccessTest::testConnect2(void) { CPPUNIT_ASSERT_EQUAL(db->connect(dbName.c_str()), true); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); string dbName2 = "XXXXXX.sqlite"; int res = mkstemps((char*) dbName2.c_str(), 7); CPPUNIT_ASSERT(res != -1); CPPUNIT_ASSERT_EQUAL(db->connect(dbName2.c_str()), false); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); remove(dbName2.c_str()); } void DBSQLiteAccessTest::testConnect3(void) { CPPUNIT_ASSERT_EQUAL(db->connect("TestRunner/"), false); CPPUNIT_ASSERT_EQUAL(db->isConnected(), false); CPPUNIT_ASSERT_EQUAL(db->connect("TestRunner/"), false); CPPUNIT_ASSERT_EQUAL(db->isConnected(), false); } void DBSQLiteAccessTest::testConnect4(void) { CPPUNIT_ASSERT_EQUAL(db->connect(dbName.c_str()), true); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); CPPUNIT_ASSERT_EQUAL(db->connect("TestRunner/"), false); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); } void DBSQLiteAccessTest::testConnect5(void) { CPPUNIT_ASSERT_EQUAL(db->connect("TestRunner/"), false); CPPUNIT_ASSERT_EQUAL(db->isConnected(), false); CPPUNIT_ASSERT_EQUAL(db->connect(dbName.c_str()), true); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); } void DBSQLiteAccessTest::testDisconnect1(void) { CPPUNIT_ASSERT_EQUAL(false, db->isConnected()); CPPUNIT_ASSERT_EQUAL(true, db->disconnect()); CPPUNIT_ASSERT_EQUAL(false, db->isConnected()); } void DBSQLiteAccessTest::testDisconnect2(void) { CPPUNIT_ASSERT_EQUAL(db->connect(dbName.c_str()), true); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); CPPUNIT_ASSERT_EQUAL(db->disconnect(), true); CPPUNIT_ASSERT_EQUAL(db->isConnected(), false); CPPUNIT_ASSERT_EQUAL(db->connect(dbName.c_str()), true); CPPUNIT_ASSERT_EQUAL(db->isConnected(), true); CPPUNIT_ASSERT_EQUAL(db->disconnect(), true); CPPUNIT_ASSERT_EQUAL(db->isConnected(), false); } void DBSQLiteAccessTest::testDisconnect3(void) { string dbName2 = "XXXXXX.sqlite"; int res = mkstemps((char*) dbName2.c_str(), 7); CPPUNIT_ASSERT(res != -1); CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->isConnected()); CPPUNIT_ASSERT_EQUAL(false, db->connect(dbName2.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->isConnected()); CPPUNIT_ASSERT_EQUAL(true, db->disconnect()); CPPUNIT_ASSERT_EQUAL(false, db->isConnected()); CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName2.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->isConnected()); CPPUNIT_ASSERT_EQUAL(true, db->disconnect()); CPPUNIT_ASSERT_EQUAL(false, db->isConnected()); remove(dbName2.c_str()); } void DBSQLiteAccessTest::testSqliteErrCodeMsg1(void) { CPPUNIT_ASSERT_EQUAL(false, db->connect("TestRunner/")); CPPUNIT_ASSERT_EQUAL(SQLITE_MISUSE, db->sqliteErrCode()); CPPUNIT_ASSERT_EQUAL(*"library routine called out of sequence", *db->sqliteErrMsg()); } void DBSQLiteAccessTest::testSqliteErrCodeMsg2(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(false, db->executeStatement("create table A ();")); CPPUNIT_ASSERT_EQUAL(SQLITE_ERROR, db->sqliteErrCode()); CPPUNIT_ASSERT_EQUAL(*"near \")\": syntax error", *db->sqliteErrMsg()); } void DBSQLiteAccessTest::testSqliteErrCodeMsg3(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("create table A ( A INTEGER );")); CPPUNIT_ASSERT_EQUAL(false, db->executeStatement("create table A ( A INTEGER );")); CPPUNIT_ASSERT_EQUAL(SQLITE_ERROR, db->sqliteErrCode()); CPPUNIT_ASSERT_EQUAL(*"table A already exists", *db->sqliteErrMsg()); } void DBSQLiteAccessTest::testSqliteErrCodeMsg4(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(false, db->executeStatement("select * from A;")); CPPUNIT_ASSERT_EQUAL(SQLITE_ERROR, db->sqliteErrCode()); CPPUNIT_ASSERT_EQUAL(*"no such table: A", *db->sqliteErrMsg()); } void DBSQLiteAccessTest::testExecuteStatement1(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); int size; CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("create table A ( a INTEGER, b INTEGER );")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(0, size); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(1, 2);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(1, size); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(1, 2);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(2, size); } void DBSQLiteAccessTest::testExecuteStatement2(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); string size; CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("create table A ( a INTEGER, b INTEGER );")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(*"0", *size.c_str()); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(1, 2);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(*"1", *size.c_str()); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(1, 2);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(*"2", *size.c_str()); } void DBSQLiteAccessTest::testExecuteStatementGetMatrix(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("create table A ( a INTEGER, b INTEGER, c INTEGER );")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(1, 2, 3);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(4, 5, 6);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(7, 8, 9);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(10, 11, 12);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(13, 14, 15);")); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(16, 17, 18);")); const string correctResult[6][3] = { { "1", "2", "3" }, { "4", "5", "6" }, { "7", "8", "9" }, { "10", "11", "12" }, { "13", "14", "15" }, { "16", "17", "18" } }; vector<vector<string> > returnedData; CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetMatrix("select * from A;", returnedData)); for (unsigned int row = 0; row < 6; ++row) { for (unsigned int col = 0; col < 3; ++col) { CPPUNIT_ASSERT_EQUAL(correctResult[row][col], returnedData[row][col]); } } } void DBSQLiteAccessTest::testTransaction1(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(false, db->begin()); CPPUNIT_ASSERT_EQUAL(false, db->begin()); } void DBSQLiteAccessTest::testTransaction2(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(false, db->rollback()); CPPUNIT_ASSERT_EQUAL(false, db->rollback()); } void DBSQLiteAccessTest::testTransaction3(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->rollback()); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->rollback()); } void DBSQLiteAccessTest::testTransaction4(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->commit()); CPPUNIT_ASSERT_EQUAL(false, db->rollback()); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->commit()); CPPUNIT_ASSERT_EQUAL(false, db->rollback()); } void DBSQLiteAccessTest::testTransaction5(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(false, db->commit()); CPPUNIT_ASSERT_EQUAL(false, db->commit()); } void DBSQLiteAccessTest::testTransaction6(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->commit()); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->commit()); } void DBSQLiteAccessTest::testTransaction7(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->rollback()); CPPUNIT_ASSERT_EQUAL(false, db->commit()); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->rollback()); CPPUNIT_ASSERT_EQUAL(false, db->commit()); } void DBSQLiteAccessTest::testTransaction8(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("create table A ( a INTEGER, b INTEGER );")); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(1, 2);")); int size; CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(1, size); CPPUNIT_ASSERT_EQUAL(true, db->rollback()); CPPUNIT_ASSERT_EQUAL(false, db->commit()); CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(0, size); CPPUNIT_ASSERT_EQUAL(true, db->begin()); } void DBSQLiteAccessTest::testTransaction9(void) { CPPUNIT_ASSERT_EQUAL(true, db->connect(dbName.c_str())); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("create table A ( a INTEGER, b INTEGER );")); CPPUNIT_ASSERT_EQUAL(true, db->begin()); CPPUNIT_ASSERT_EQUAL(true, db->executeStatement("insert into A values(1, 2);")); int size; CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(1, size); CPPUNIT_ASSERT_EQUAL(true, db->commit()); CPPUNIT_ASSERT_EQUAL(false, db->rollback()); CPPUNIT_ASSERT_EQUAL(true, db->executeStatementGetSingleValue("select count(*) from A;", size)); CPPUNIT_ASSERT_EQUAL(1, size); CPPUNIT_ASSERT_EQUAL(true, db->begin()); }