summaryrefslogtreecommitdiffstats
path: root/tests/upgradetest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-02-28 13:52:57 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-02-28 13:52:57 +0100
commit6a73a9c405473725ae7d7159e1f88ad54c10448c (patch)
treee5f8fbf1026382c4111c5cc9c9a2bf213527bed8 /tests/upgradetest.cpp
parent0bcde6de2ecce96a31c0b409481f660bb9e91582 (diff)
downloadsink-6a73a9c405473725ae7d7159e1f88ad54c10448c.tar.gz
sink-6a73a9c405473725ae7d7159e1f88ad54c10448c.zip
Fixed and tested the upgrade from a database without version.
Diffstat (limited to 'tests/upgradetest.cpp')
-rw-r--r--tests/upgradetest.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/tests/upgradetest.cpp b/tests/upgradetest.cpp
new file mode 100644
index 0000000..1060626
--- /dev/null
+++ b/tests/upgradetest.cpp
@@ -0,0 +1,138 @@
1#include <QtTest>
2
3#include <QString>
4
5#include "dummyresource/resourcefactory.h"
6#include "store.h"
7#include "resourceconfig.h"
8#include "resourcecontrol.h"
9#include "log.h"
10#include "test.h"
11#include "testutils.h"
12#include "definitions.h"
13
14using namespace Sink;
15using namespace Sink::ApplicationDomain;
16
17class UpgradeTest : public QObject
18{
19 Q_OBJECT
20
21private slots:
22 void initTestCase()
23 {
24 Sink::Test::initTest();
25 auto factory = Sink::ResourceFactory::load("sink.dummy");
26 QVERIFY(factory);
27 ::DummyResource::removeFromDisk("sink.dummy.instance1");
28 ResourceConfig::addResource("sink.dummy.instance1", "sink.dummy");
29 }
30
31 void init()
32 {
33 }
34
35 void cleanup()
36 {
37 VERIFYEXEC(Sink::Store::removeDataFromDisk(QByteArray("sink.dummy.instance1")));
38 }
39
40 void noUpgradeOnNoDb()
41 {
42 auto upgradeJob = Sink::Store::upgrade()
43 .then([](const Sink::Store::UpgradeResult &result) {
44 ASYNCVERIFY(!result.upgradeExecuted);
45 return KAsync::null();
46 });
47 VERIFYEXEC(upgradeJob);
48 }
49
50 void noUpgradeOnCurrentDb()
51 {
52 Event event("sink.dummy.instance1");
53 event.setProperty("uid", "testuid");
54 event.setProperty("summary", "summaryValue");
55 Sink::Store::create<Event>(event).exec().waitForFinished();
56
57 // Ensure all local data is processed
58 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
59
60 auto upgradeJob = Sink::Store::upgrade()
61 .then([](const Sink::Store::UpgradeResult &result) {
62 ASYNCVERIFY(!result.upgradeExecuted);
63 return KAsync::null();
64 });
65 VERIFYEXEC(upgradeJob);
66 }
67
68 void upgradeFromOldDb()
69 {
70 Event event("sink.dummy.instance1");
71 event.setProperty("uid", "testuid");
72 event.setProperty("summary", "summaryValue");
73 Sink::Store::create<Event>(event).exec().waitForFinished();
74
75 // Ensure all local data is processed
76 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
77
78 //force the db to an old version.
79 {
80 Sink::Storage::DataStore store(Sink::storageLocation(), "sink.dummy.instance1", Sink::Storage::DataStore::ReadWrite);
81 auto t = store.createTransaction();
82 t.openDatabase().write("__internal_databaseVersion", QByteArray::number(1));
83 t.commit();
84 }
85
86 auto upgradeJob = Sink::Store::upgrade()
87 .then([](const Sink::Store::UpgradeResult &result) {
88 ASYNCVERIFY(result.upgradeExecuted);
89 return KAsync::null();
90 });
91 VERIFYEXEC(upgradeJob);
92
93 //FIXME
94 // QTest::qWait(1000);
95 // {
96 // Sink::Storage::DataStore::clearEnv();
97 // Sink::Storage::DataStore store(Sink::storageLocation(), "sink.dummy.instance1", Sink::Storage::DataStore::ReadOnly);
98 // auto version = Sink::Storage::DataStore::databaseVersion(store.createTransaction(Sink::Storage::DataStore::ReadOnly));
99 // QCOMPARE(version, Sink::latestDatabaseVersion());
100 // }
101 }
102
103 void upgradeFromDbWithNoVersion()
104 {
105 Event event("sink.dummy.instance1");
106 event.setProperty("uid", "testuid");
107 event.setProperty("summary", "summaryValue");
108 Sink::Store::create<Event>(event).exec().waitForFinished();
109
110 // Ensure all local data is processed
111 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
112
113 //force the db to an old version.
114 Sink::Storage::DataStore store(Sink::storageLocation(), "sink.dummy.instance1", Sink::Storage::DataStore::ReadWrite);
115 auto t = store.createTransaction();
116 t.openDatabase().remove("__internal_databaseVersion");
117 t.commit();
118
119 auto upgradeJob = Sink::Store::upgrade()
120 .then([](const Sink::Store::UpgradeResult &result) {
121 ASYNCVERIFY(result.upgradeExecuted);
122 return KAsync::null();
123 });
124 VERIFYEXEC(upgradeJob);
125
126 //FIXME
127 // QTest::qWait(1000);
128 // {
129 // Sink::Storage::DataStore::clearEnv();
130 // Sink::Storage::DataStore store(Sink::storageLocation(), "sink.dummy.instance1", Sink::Storage::DataStore::ReadOnly);
131 // auto version = Sink::Storage::DataStore::databaseVersion(store.createTransaction(Sink::Storage::DataStore::ReadOnly));
132 // QCOMPARE(version, Sink::latestDatabaseVersion());
133 // }
134 }
135};
136
137QTEST_MAIN(UpgradeTest)
138#include "upgradetest.moc"