RabbitCommon v2.3.4
Loading...
Searching...
No Matches
UnitTests.cpp
1#include "UnitTests.h"
2#include <QApplication>
3#include <QtTest>
4
5#include "FrmUpdater.h"
6#include "Download.h"
7
8static Q_LOGGING_CATEGORY(log, "RabbitCommon.Test.Updater")
9
10CUnitTests::CUnitTests(QObject *parent)
11 : QObject{parent}
12{}
13
14void CUnitTests::initTestCase()
15{}
16
17void CUnitTests::initTestCase_data()
18{}
19
20void CUnitTests::cleanupTestCase()
21{}
22
23void CUnitTests::init()
24{}
25
26void CUnitTests::cleanup()
27{}
28
29void CUnitTests::testDownloadFileNoExistLocalFile()
30{
31 QString szNoExitFile = "data/nofile";
32 QString szExitFile = "data/redirect.json";
33 QVector<QUrl> urls;
34 urls << QUrl::fromLocalFile(szNoExitFile) << QUrl::fromLocalFile(szExitFile);
36 QObject::connect(&dwonload, &RabbitCommon::CDownload::sigError,
37 [&](int nRet, const QString msg){
38 QVERIFY(tr("The file doesn't exists: ") + szNoExitFile == msg && -6 == nRet);
39 });
40 QObject::connect(&dwonload, &RabbitCommon::CDownload::sigFinished,
41 [&](const QString szPath){
42 QVERIFY(szExitFile == szPath);
43 });
44 dwonload.Start(urls);
45
46 QTest::qWait(100);
47}
48
49void CUnitTests::testDownloadFileExistLocalFile()
50{
51 QString szFile = "data/nofile";
52 QVector<QUrl> urls;
53 urls << szFile;
55 QObject::connect(&dwonload, &RabbitCommon::CDownload::sigError,
56 [&](int nRet, const QString msg){
57 QVERIFY(true);
58 });
59 QObject::connect(&dwonload, &RabbitCommon::CDownload::sigFinished,
60 [&](const QString szFile){
61 QVERIFY(false);
62 });
63 dwonload.Start(urls);
64 QTest::qWait(100);
65}
66
67void CUnitTests::testCFrmUpdaterCompareVersion()
68{
69 CFrmUpdater updater;
70
71 QVERIFY(updater.CompareVersion("", "v0.0.21") < 0);
72 QVERIFY(updater.CompareVersion("", "") == 0);
73 QVERIFY(updater.CompareVersion("v0.0.21", "") > 0);
74
75 QVERIFY(updater.CompareVersion("3b48ef5", "v0.0.21") < 0);
76 QVERIFY(updater.CompareVersion("v0.0.21", "3b48ef5") > 0);
77 QVERIFY(updater.CompareVersion("v0.0.21", "348564") > 0);
78 QVERIFY(updater.CompareVersion("348564", "v0.0.21") < 0);
79 QVERIFY(updater.CompareVersion("3b48ef5", "v1.0.21") < 0);
80 QVERIFY(updater.CompareVersion("v1.0.21", "3b48ef5") > 0);
81
82 QVERIFY(updater.CompareVersion("v0.1.20", "v1.0") < 0);
83 QVERIFY(updater.CompareVersion("v1.0", "v1.0") == 0);
84 QVERIFY(updater.CompareVersion("v1.0", "v0.0.19") > 0);
85
86 QVERIFY(updater.CompareVersion("v0.0.20", "v0.1") < 0);
87 QVERIFY(updater.CompareVersion("v0.1", "v0.1") == 0);
88 QVERIFY(updater.CompareVersion("v0.1", "v0.0.19") > 0);
89
90 QVERIFY(updater.CompareVersion("v0.0.20", "v0.0.21") < 0);
91 QVERIFY(updater.CompareVersion("v0.0.20", "v0.0.20") == 0);
92 QVERIFY(updater.CompareVersion("v0.0.20", "v0.0.19") > 0);
93
94 QVERIFY(updater.CompareVersion("v0.0.20-a", "v0.0.21-b") < 0);
95 QVERIFY(updater.CompareVersion("v0.0.20-d", "v0.0.20-c") == 0);
96 QVERIFY(updater.CompareVersion("v0.0.20-f", "v0.0.19-w") > 0);
97
98 QVERIFY(updater.CompareVersion("va.b.20-f", "vc.0.19-w") > 0);
99
100 QVERIFY(updater.CompareVersion("v1.1.20", "v1.1.20-w") > 0);
101 QVERIFY(updater.CompareVersion("v1.1.20-alpha", "v1.1.20") < 0);
102 QVERIFY(updater.CompareVersion("v1.1.20-alpha", "v1.1.20-alpha") == 0);
103
104 QVERIFY(updater.CompareVersion("v1.1.20", "v1.1.20~w") > 0);
105 QVERIFY(updater.CompareVersion("v1.1.20~alpha", "v1.1.20") < 0);
106 QVERIFY(updater.CompareVersion("v1.1.20~alpha", "v1.1.20~alpha") == 0);
107
108 QVERIFY(updater.CompareVersion("v1.1.20", "v1.1.20_w") > 0);
109 QVERIFY(updater.CompareVersion("v1.1.20_alpha", "v1.1.20") < 0);
110 QVERIFY(updater.CompareVersion("v1.1.20_alpha", "v1.1.20_alpha") == 0);
111
112 QVERIFY(updater.CompareVersion("v1.1.20-alpha", "v1.1.20_alpha") == 0);
113 QVERIFY(updater.CompareVersion("v1.1.20-alpha", "v1.1.20~alpha") == 0);
114 QVERIFY(updater.CompareVersion("v1.1.20_alpha", "v1.1.20~alpha") == 0);
115}
116
117void CUnitTests::test_os()
118{
119 QString szOS = QSysInfo::productType();
120 qDebug(log) << "QSysInfo::productType():" << szOS;
121#if defined(Q_OS_WINDOWS) || defined(Q_OS_CYGWIN)
122 QVERIFY("windows" == szOS);
123#elif defined(Q_OS_ANDROID)
124 QVERIFY("android" == szOS);
125#elif defined(Q_OS_MACOS)
126 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
127 QVERIFY("macos" == szOS);
128 #else
129 QVERIFY("osx" == szOS);
130 #endif
131#elif defined(Q_OS_LINUX)
132 QVERIFY("ubuntu" == szOS || "debian" == szOS);
133#elif defined(Q_OS_UNIX)
134 QVERIFY("osx" == szOS);
135#endif
136}
137
138void CUnitTests::test_architecture()
139{
140 qDebug(log) << "Build architecture:" << QSysInfo::buildCpuArchitecture()
141 << "Current architercture:" << QSysInfo::currentCpuArchitecture();
142 QVERIFY(QSysInfo::buildCpuArchitecture()
143 == QSysInfo::currentCpuArchitecture());
144}
145
146void CUnitTests::test_joson()
147{
148 QJsonArray url_windows;
149 url_windows.append("github.com/windows");
150 url_windows.append("gitlab.com/windows");
151
152 QJsonObject file_windows;
153 file_windows.insert("os", "windows");
154 file_windows.insert("os_min_version", "7");
155 file_windows.insert("arch", "x86");
156 file_windows.insert("arch_version", "1");
157 file_windows.insert("url", url_windows);
158
159 QJsonArray url_linux;
160 url_linux.append("gitlab.com/linux");
161 url_linux.append("github.com/linux");
162
163 QJsonObject file_linux;
164 file_linux.insert("os", "linux");
165 file_linux.insert("arch", "x64");
166 file_linux.insert("url", url_linux);
167
168 QJsonArray files;
169 files.append(file_windows);
170 files.append(file_linux);
171
172 QJsonObject version;
173 version.insert("version", "2.0.0");
174 version.insert("min_update_version", "1.0.0");
175 version.insert("info", "RabbitCommon");
176 version.insert("time", QDateTime::currentDateTime().toString());
177 version.insert("home", "github.com/kanglin/rabbitcommon");
178 version.insert("force", false);
179 version.insert("files", files);
180
181 QJsonDocument updater, doc1;
182
183 updater.setObject(version);
184 qDebug(log) << updater.toJson();
185 QJsonParseError err;
186 doc1 = QJsonDocument::fromJson(updater.toJson(), &err);
187 qDebug(log) << doc1;
188 QVERIFY(updater == doc1);
189}
190
191// See: data/redirect.json
192void CUnitTests::test_redirect_json_file()
193{
194 CFrmUpdater updater;
195 QVector<CFrmUpdater::CONFIG_REDIRECT> conf;
196 int nRet = 0;
197 nRet = updater.GetRedirectFromFile("update.json", conf);
198 QVERIFY(1 == nRet);
199 nRet = updater.GetRedirectFromFile("data/redirect.json", conf);
200 QVERIFY(0 == nRet);
201 QVERIFY(conf.length() == 5);
202
203 QVERIFY(conf[0].szVersion == "v2.0.0");
204 QVERIFY(conf[0].szMinUpdateVersion == "v0.0.26");
205 QVERIFY(conf[0].files.isEmpty());
206
207 QVERIFY(conf[1].szVersion == "v0.0.26");
208 QVERIFY(conf[1].szMinUpdateVersion == "v0.0.20");
209 QVERIFY(conf[1].files.length() == 1);
210 QVERIFY(conf[1].files[0].szSystem.isEmpty());
211 QVERIFY(conf[1].files[0].szArchitecture.isEmpty());
212 QVERIFY(conf[1].files[0].urls.size() == 1);
213 QVERIFY(conf[1].files[0].urls[0] == QUrl::fromLocalFile("data/update_locale.json"));
214
215 QVERIFY(conf[2].szVersion == "v0.0.20");
216 QVERIFY(conf[2].szMinUpdateVersion == "v0.0.10");
217 QVERIFY(conf[2].files.length() == 4);
218 QVERIFY(conf[2].files[0].szSystem == "windows");
219 QVERIFY(conf[2].files[0].szArchitecture.isEmpty());
220 QVERIFY(conf[2].files[0].urls.size() == 1);
221 QVERIFY(conf[2].files[0].urls[0] == QUrl::fromLocalFile("data/update_windows.json"));
222 QVERIFY(conf[2].files[1].szSystem == "ubuntu");
223 QVERIFY(conf[2].files[1].szArchitecture == "x86_64");
224 QVERIFY(conf[2].files[1].urls.size() == 1);
225 QVERIFY(conf[2].files[1].urls[0] == QUrl::fromLocalFile("data/update_ubuntu.json"));
226 QVERIFY(conf[2].files[2].szSystem == "macos");
227 QVERIFY(conf[2].files[2].szArchitecture == "x86_64");
228 QVERIFY(conf[2].files[2].urls.size() == 1);
229 QVERIFY(conf[2].files[2].urls[0] == QUrl::fromLocalFile("data/update_macos.json"));
230 QVERIFY(conf[2].files[3].szSystem == "osx");
231 QVERIFY(conf[2].files[3].szArchitecture == "x86_64");
232 QVERIFY(conf[2].files[3].urls.size() == 1);
233 QVERIFY(conf[2].files[3].urls[0] == QUrl::fromLocalFile("data/update_macos.json"));
234
235 QVERIFY(conf[3].szVersion == "v0.0.10");
236 QVERIFY(conf[3].szMinUpdateVersion == "v0.0.5");
237 QVERIFY(conf[3].files.length() == 1);
238
239 QVERIFY(conf[4].szVersion == "v0.0.5");
240 QVERIFY(conf[4].szMinUpdateVersion.isEmpty());
241 QVERIFY(conf[4].files.length() == 2);
242 QVERIFY(conf[4].files[0].szSystem == "windows");
243 QVERIFY(conf[4].files[0].szArchitecture == "x86");
244 QVERIFY(conf[4].files[0].urls.size() == 2);
245 QVERIFY(conf[4].files[1].szSystem == "ubuntu");
246 QVERIFY(conf[4].files[1].szArchitecture == "x86_64");
247 QVERIFY(conf[4].files[1].urls.size() == 2);
248}
249
250QTEST_MAIN(CUnitTests)
251/*
252int main(int argc, char* argv[])
253{
254 QApplication app(argc, argv);
255 CUnitTests obj;
256 // See: https://doc.qt.io/qt-6/qtest-overview.html#qt-test-command-line-arguments
257 return QTest::qExec(&obj, QStringList() << "UnitTests" << "-xml");
258}//*/
Updater.
Definition FrmUpdater.h:77
int CompareVersion(const QString &newVersion, const QString &currentVersion)
CFrmUpdater::CompareVersion.
int GetRedirectFromFile(const QString &szFile, QVector< CONFIG_REDIRECT > &conf)
Get redirect configure from file.
Download the same file from multiple URLs.
Definition Download.h:48
int Start(QVector< QUrl > urls, QString szFileName=QString(), bool bSequence=false)
Definition Download.cpp:22
void sigFinished(const QString szFile)