Warning, file /pim/sink/tests/upgradetest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 #include <QTest> 0002 0003 #include <QString> 0004 0005 #include "dummyresource/resourcefactory.h" 0006 #include "store.h" 0007 #include "resourceconfig.h" 0008 #include "resourcecontrol.h" 0009 #include "log.h" 0010 #include "test.h" 0011 #include "definitions.h" 0012 #include "storage.h" 0013 0014 using namespace Sink; 0015 using namespace Sink::ApplicationDomain; 0016 0017 class UpgradeTest : public QObject 0018 { 0019 Q_OBJECT 0020 0021 private slots: 0022 void initTestCase() 0023 { 0024 Sink::Test::initTest(); 0025 auto factory = Sink::ResourceFactory::load("sink.dummy"); 0026 QVERIFY(factory); 0027 ::DummyResource::removeFromDisk("sink.dummy.instance1"); 0028 ResourceConfig::addResource("sink.dummy.instance1", "sink.dummy"); 0029 } 0030 0031 void init() 0032 { 0033 } 0034 0035 void cleanup() 0036 { 0037 VERIFYEXEC(Sink::Store::removeDataFromDisk(QByteArray("sink.dummy.instance1"))); 0038 } 0039 0040 void noUpgradeOnNoDb() 0041 { 0042 auto upgradeJob = Sink::Store::upgrade() 0043 .then([](const Sink::Store::UpgradeResult &result) { 0044 ASYNCVERIFY(!result.upgradeExecuted); 0045 return KAsync::null(); 0046 }); 0047 VERIFYEXEC(upgradeJob); 0048 } 0049 0050 void noUpgradeOnCurrentDb() 0051 { 0052 Event event("sink.dummy.instance1"); 0053 event.setProperty("uid", "testuid"); 0054 event.setProperty("summary", "summaryValue"); 0055 Sink::Store::create<Event>(event).exec().waitForFinished(); 0056 0057 // Ensure all local data is processed 0058 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); 0059 0060 auto upgradeJob = Sink::Store::upgrade() 0061 .then([](const Sink::Store::UpgradeResult &result) { 0062 ASYNCVERIFY(!result.upgradeExecuted); 0063 return KAsync::null(); 0064 }); 0065 VERIFYEXEC(upgradeJob); 0066 } 0067 0068 void upgradeFromOldDb() 0069 { 0070 Event event("sink.dummy.instance1"); 0071 event.setProperty("uid", "testuid"); 0072 event.setProperty("summary", "summaryValue"); 0073 Sink::Store::create<Event>(event).exec().waitForFinished(); 0074 0075 // Ensure all local data is processed 0076 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); 0077 0078 //force the db to an old version. 0079 { 0080 Sink::Storage::DataStore store(Sink::storageLocation(), "sink.dummy.instance1", Sink::Storage::DataStore::ReadWrite); 0081 auto t = store.createTransaction(); 0082 Sink::Storage::DataStore::setDatabaseVersion(t, 1); 0083 t.commit(); 0084 } 0085 0086 auto upgradeJob = Sink::Store::upgrade() 0087 .then([](const Sink::Store::UpgradeResult &result) { 0088 ASYNCVERIFY(result.upgradeExecuted); 0089 return KAsync::null(); 0090 }); 0091 VERIFYEXEC(upgradeJob); 0092 0093 { 0094 Sink::Storage::DataStore::clearEnv(); 0095 Sink::Storage::DataStore store(Sink::storageLocation(), "sink.dummy.instance1", Sink::Storage::DataStore::ReadOnly); 0096 auto version = Sink::Storage::DataStore::databaseVersion(store.createTransaction(Sink::Storage::DataStore::ReadOnly)); 0097 QCOMPARE(version, Sink::latestDatabaseVersion()); 0098 } 0099 } 0100 }; 0101 0102 QTEST_MAIN(UpgradeTest) 0103 #include "upgradetest.moc"