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"