Mercurial Hosting > traffic-intelligence
diff trajectorymanagement/test/DBSQLiteAccessTest.cpp @ 1159:e1e7acef8eab
moved trajectory management library into Traffic Intelligence
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 22 Feb 2021 22:09:35 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trajectorymanagement/test/DBSQLiteAccessTest.cpp Mon Feb 22 22:09:35 2021 -0500 @@ -0,0 +1,301 @@ +#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()); +}