diff --git a/test/persistence/dbschema_test.cpp b/test/persistence/dbschema_test.cpp index 26cb3d884..a0d95638d 100644 --- a/test/persistence/dbschema_test.cpp +++ b/test/persistence/dbschema_test.cpp @@ -21,8 +21,9 @@ #include "src/persistence/dbupgrader.h" #include "src/core/toxfile.h" -#include #include +#include +#include #include #include @@ -84,7 +85,8 @@ class TestDbSchema : public QObject { Q_OBJECT private slots: - void initTestCase(); + void init(); + void cleanup(); void testCreation(); void testIsNewDb(); void test0to1(); @@ -98,12 +100,11 @@ private slots: // test8to9 omitted, data corruption correction upgrade with no schema change void test9to10(); // test suite - void cleanupTestCase() const; private: - bool initSucess{false}; void createSchemaAtVersion(std::shared_ptr db, const std::vector& schema); void verifyDb(std::shared_ptr db, const std::vector& expectedSql); + std::unique_ptr testDatabaseFile; }; const QString testFileList[] = {"testCreation.db", "testIsNewDbTrue.db", "testIsNewDbFalse.db", @@ -208,25 +209,6 @@ const std::vector schema7{ const std::vector schema9 = schema7; const std::vector schema10 = schema9; -void TestDbSchema::initTestCase() -{ - for (const auto& path : testFileList) { - QVERIFY(!QFileInfo{path}.exists()); - } - initSucess = true; -} - -void TestDbSchema::cleanupTestCase() const -{ - if (!initSucess) { - qWarning() << "init failed, skipping cleanup to avoid loss of data"; - return; - } - for (const auto& path : testFileList) { - QFile::remove(path); - } -} - void TestDbSchema::verifyDb(std::shared_ptr db, const std::vector& expectedSql) { QVERIFY(db->execNow(RawDatabase::Query(QStringLiteral( @@ -257,22 +239,36 @@ void TestDbSchema::createSchemaAtVersion(std::shared_ptr db, const QVERIFY(db->execNow(queries)); } +void TestDbSchema::init() +{ + testDatabaseFile = std::unique_ptr(new QTemporaryFile()); + // fileName is only defined once the file is opened. Since RawDatabase + // will be openening the file itself not using QFile, open and close it now. + QVERIFY(testDatabaseFile->open()); + testDatabaseFile->close(); +} + +void TestDbSchema::cleanup() +{ + testDatabaseFile.reset(); +} + void TestDbSchema::testCreation() { QVector queries; - auto db = std::shared_ptr{new RawDatabase{"testCreation.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; QVERIFY(DbUpgrader::createCurrentSchema(*db)); verifyDb(db, schema7); } void TestDbSchema::testIsNewDb() { - auto db = std::shared_ptr{new RawDatabase{"testIsNewDbTrue.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; bool success = false; bool newDb = DbUpgrader::isNewDb(db, success); QVERIFY(success); QVERIFY(newDb == true); - db = std::shared_ptr{new RawDatabase{"testIsNewDbFalse.db", {}, {}}}; + db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; createSchemaAtVersion(db, schema0); newDb = DbUpgrader::isNewDb(db, success); QVERIFY(success); @@ -281,7 +277,7 @@ void TestDbSchema::testIsNewDb() void TestDbSchema::test0to1() { - auto db = std::shared_ptr{new RawDatabase{"test0to1.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; createSchemaAtVersion(db, schema0); QVERIFY(DbUpgrader::dbSchema0to1(*db)); verifyDb(db, schema1); @@ -302,7 +298,7 @@ void TestDbSchema::test1to2() https://github.com/qTox/qTox/issues/5776 */ - auto db = std::shared_ptr{new RawDatabase{"test1to2.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; createSchemaAtVersion(db, schema1); const QString myPk = "AC18841E56CCDEE16E93E10E6AB2765BE54277D67F1372921B5B418A6B330D3D"; @@ -384,7 +380,7 @@ void TestDbSchema::test1to2() void TestDbSchema::test2to3() { - auto db = std::shared_ptr{new RawDatabase{"test2to3.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; createSchemaAtVersion(db, schema2); // since we don't enforce foreign key contraints in the db, we can stick in IDs to other tables @@ -446,7 +442,7 @@ void TestDbSchema::test2to3() void TestDbSchema::test3to4() { - auto db = std::shared_ptr{new RawDatabase{"test3to4.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; createSchemaAtVersion(db, schema3); QVERIFY(DbUpgrader::dbSchema3to4(*db)); verifyDb(db, schema4); @@ -454,7 +450,7 @@ void TestDbSchema::test3to4() void TestDbSchema::test4to5() { - auto db = std::shared_ptr{new RawDatabase{"test4to5.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; createSchemaAtVersion(db, schema4); QVERIFY(DbUpgrader::dbSchema4to5(*db)); verifyDb(db, schema5); @@ -462,7 +458,7 @@ void TestDbSchema::test4to5() void TestDbSchema::test5to6() { - auto db = std::shared_ptr{new RawDatabase{"test5to6.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; createSchemaAtVersion(db, schema5); QVERIFY(DbUpgrader::dbSchema5to6(*db)); verifyDb(db, schema6); @@ -470,7 +466,7 @@ void TestDbSchema::test5to6() void TestDbSchema::test6to7() { - auto db = std::shared_ptr{new RawDatabase{"test6to7.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; // foreign_keys are enabled by History constructor and required for this upgrade to work on older sqlite versions db->execNow( "PRAGMA foreign_keys = ON;"); @@ -481,7 +477,7 @@ void TestDbSchema::test6to7() void TestDbSchema::test9to10() { - auto db = std::shared_ptr{new RawDatabase{"test9to10.db", {}, {}}}; + auto db = std::shared_ptr{new RawDatabase{testDatabaseFile->fileName(), {}, {}}}; createSchemaAtVersion(db, schema9); QVERIFY(insertFileId(*db, 1, true));