RabbitCommon v2.3.3
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 is not 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}
101
102void CUnitTests::test_os()
103{
104 QString szOS = QSysInfo::productType();
105 qDebug(log) << "QSysInfo::productType():" << szOS;
106#if defined(Q_OS_WINDOWS) || defined(Q_OS_CYGWIN)
107 QVERIFY("windows" == szOS);
108#elif defined(Q_OS_ANDROID)
109 QVERIFY("android" == szOS);
110#elif defined(Q_OS_MACOS)
111 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
112 QVERIFY("macos" == szOS);
113 #else
114 QVERIFY("osx" == szOS);
115 #endif
116#elif defined(Q_OS_LINUX)
117 QVERIFY("ubuntu" == szOS || "debian" == szOS);
118#elif defined(Q_OS_UNIX)
119 QVERIFY("osx" == szOS);
120#endif
121}
122
123void CUnitTests::test_architecture()
124{
125 qDebug(log) << "Build architecture:" << QSysInfo::buildCpuArchitecture()
126 << "Current architercture:" << QSysInfo::currentCpuArchitecture();
127 QVERIFY(QSysInfo::buildCpuArchitecture()
128 == QSysInfo::currentCpuArchitecture());
129}
130
131void CUnitTests::test_joson()
132{
133 QJsonArray url_windows;
134 url_windows.append("github.com/windows");
135 url_windows.append("gitlab.com/windows");
136
137 QJsonObject file_windows;
138 file_windows.insert("os", "windows");
139 file_windows.insert("os_min_version", "7");
140 file_windows.insert("arch", "x86");
141 file_windows.insert("arch_version", "1");
142 file_windows.insert("url", url_windows);
143
144 QJsonArray url_linux;
145 url_linux.append("gitlab.com/linux");
146 url_linux.append("github.com/linux");
147
148 QJsonObject file_linux;
149 file_linux.insert("os", "linux");
150 file_linux.insert("arch", "x64");
151 file_linux.insert("url", url_linux);
152
153 QJsonArray files;
154 files.append(file_windows);
155 files.append(file_linux);
156
157 QJsonObject version;
158 version.insert("version", "2.0.0");
159 version.insert("min_update_version", "1.0.0");
160 version.insert("info", "RabbitCommon");
161 version.insert("time", QDateTime::currentDateTime().toString());
162 version.insert("home", "github.com/kanglin/rabbitcommon");
163 version.insert("force", false);
164 version.insert("files", files);
165
166 QJsonDocument updater, doc1;
167
168 updater.setObject(version);
169 qDebug(log) << updater.toJson();
170 QJsonParseError err;
171 doc1 = QJsonDocument::fromJson(updater.toJson(), &err);
172 qDebug(log) << doc1;
173 QVERIFY(updater == doc1);
174}
175
176// See: data/redirect.json
177void CUnitTests::test_redirect_json_file()
178{
179 CFrmUpdater updater;
180 QVector<CFrmUpdater::CONFIG_REDIRECT> conf;
181 int nRet = 0;
182 nRet = updater.GetRedirectFromFile("update.json", conf);
183 QVERIFY(1 == nRet);
184 nRet = updater.GetRedirectFromFile("data/redirect.json", conf);
185 QVERIFY(0 == nRet);
186 QVERIFY(conf.length() == 5);
187
188 QVERIFY(conf[0].szVersion == "v2.0.0");
189 QVERIFY(conf[0].szMinUpdateVersion == "v0.0.26");
190 QVERIFY(conf[0].files.isEmpty());
191
192 QVERIFY(conf[1].szVersion == "v0.0.26");
193 QVERIFY(conf[1].szMinUpdateVersion == "v0.0.20");
194 QVERIFY(conf[1].files.length() == 1);
195 QVERIFY(conf[1].files[0].szSystem.isEmpty());
196 QVERIFY(conf[1].files[0].szArchitecture.isEmpty());
197 QVERIFY(conf[1].files[0].urls.size() == 1);
198 QVERIFY(conf[1].files[0].urls[0] == QUrl::fromLocalFile("data/update_locale.json"));
199
200 QVERIFY(conf[2].szVersion == "v0.0.20");
201 QVERIFY(conf[2].szMinUpdateVersion == "v0.0.10");
202 QVERIFY(conf[2].files.length() == 4);
203 QVERIFY(conf[2].files[0].szSystem == "windows");
204 QVERIFY(conf[2].files[0].szArchitecture.isEmpty());
205 QVERIFY(conf[2].files[0].urls.size() == 1);
206 QVERIFY(conf[2].files[0].urls[0] == QUrl::fromLocalFile("data/update_windows.json"));
207 QVERIFY(conf[2].files[1].szSystem == "ubuntu");
208 QVERIFY(conf[2].files[1].szArchitecture == "x86_64");
209 QVERIFY(conf[2].files[1].urls.size() == 1);
210 QVERIFY(conf[2].files[1].urls[0] == QUrl::fromLocalFile("data/update_ubuntu.json"));
211 QVERIFY(conf[2].files[2].szSystem == "macos");
212 QVERIFY(conf[2].files[2].szArchitecture == "x86_64");
213 QVERIFY(conf[2].files[2].urls.size() == 1);
214 QVERIFY(conf[2].files[2].urls[0] == QUrl::fromLocalFile("data/update_macos.json"));
215 QVERIFY(conf[2].files[3].szSystem == "osx");
216 QVERIFY(conf[2].files[3].szArchitecture == "x86_64");
217 QVERIFY(conf[2].files[3].urls.size() == 1);
218 QVERIFY(conf[2].files[3].urls[0] == QUrl::fromLocalFile("data/update_macos.json"));
219
220 QVERIFY(conf[3].szVersion == "v0.0.10");
221 QVERIFY(conf[3].szMinUpdateVersion == "v0.0.5");
222 QVERIFY(conf[3].files.length() == 1);
223
224 QVERIFY(conf[4].szVersion == "v0.0.5");
225 QVERIFY(conf[4].szMinUpdateVersion.isEmpty());
226 QVERIFY(conf[4].files.length() == 2);
227 QVERIFY(conf[4].files[0].szSystem == "windows");
228 QVERIFY(conf[4].files[0].szArchitecture == "x86");
229 QVERIFY(conf[4].files[0].urls.size() == 2);
230 QVERIFY(conf[4].files[1].szSystem == "ubuntu");
231 QVERIFY(conf[4].files[1].szArchitecture == "x86_64");
232 QVERIFY(conf[4].files[1].urls.size() == 2);
233}
234
235QTEST_MAIN(CUnitTests)
236/*
237int main(int argc, char* argv[])
238{
239 QApplication app(argc, argv);
240 CUnitTests obj;
241 // See: https://doc.qt.io/qt-6/qtest-overview.html#qt-test-command-line-arguments
242 return QTest::qExec(&obj, QStringList() << "UnitTests" << "-xml");
243}//*/
Updater.
Definition FrmUpdater.h:75
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)