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());
+}