Unit tests for the DownloadUpdateTask class
This commit is contained in:
		| @@ -21,6 +21,7 @@ endmacro() | ||||
| add_unit_test(pathutils tst_pathutils.cpp) | ||||
| add_unit_test(userutils tst_userutils.cpp) | ||||
| add_unit_test(UpdateChecker tst_UpdateChecker.cpp) | ||||
| add_unit_test(DownloadUpdateTask tst_DownloadUpdateTask.cpp) | ||||
|  | ||||
| # Tests END # | ||||
| 	 | ||||
|   | ||||
| @@ -15,9 +15,14 @@ struct TestsInternal | ||||
|                 f.open(QFile::ReadOnly); | ||||
|                 return f.readAll(); | ||||
|         } | ||||
| 		static QString readFileUtf8(const QString &fileName) | ||||
| 		{ | ||||
| 			return QString::fromUtf8(readFile(fileName)); | ||||
| 		} | ||||
| }; | ||||
|  | ||||
| #define MULTIMC_GET_TEST_FILE(file) TestsInternal::readFile(QFINDTESTDATA( file )) | ||||
| #define MULTIMC_GET_TEST_FILE_UTF8(file) TestsInternal::readFileUtf8(QFINDTESTDATA( file )) | ||||
|  | ||||
| #define QTEST_GUILESS_MAIN_MULTIMC(TestObject) \ | ||||
| int main(int argc, char *argv[]) \ | ||||
|   | ||||
							
								
								
									
										43
									
								
								tests/data/1.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								tests/data/1.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| { | ||||
| 	"ApiVersion": 0, | ||||
| 	"Id": 1, | ||||
| 	"Name": "1.0.1", | ||||
| 	"Files": [ | ||||
| 		{ | ||||
| 			"Path": "fileOne", | ||||
| 			"Sources": [ | ||||
| 				{ | ||||
| 					"SourceType": "http", | ||||
| 					"Url": "file://$PWD/tests/data/fileOneA" | ||||
| 				} | ||||
| 			], | ||||
| 			"Executable": true, | ||||
| 			"Perms": 493, | ||||
| 			"MD5": "9eb84090956c484e32cb6c08455a667b" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"Path": "fileTwo", | ||||
| 			"Sources": [ | ||||
| 				{ | ||||
| 					"SourceType": "http", | ||||
| 					"Url": "file://$PWD/tests/data/fileTwo" | ||||
| 				} | ||||
| 			], | ||||
| 			"Executable": false, | ||||
| 			"Perms": 644, | ||||
| 			"MD5": "38f94f54fa3eb72b0ea836538c10b043" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"Path": "fileThree", | ||||
| 			"Sources": [ | ||||
| 				{ | ||||
| 					"SourceType": "http", | ||||
| 					"Url": "file://$PWD/tests/data/fileThree" | ||||
| 				} | ||||
| 			], | ||||
| 			"Executable": false, | ||||
| 			"Perms": "750", | ||||
| 			"MD5": "f12df554b21e320be6471d7154130e70" | ||||
| 		} | ||||
| 	] | ||||
| } | ||||
							
								
								
									
										31
									
								
								tests/data/2.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tests/data/2.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| { | ||||
| 	"ApiVersion": 0, | ||||
| 	"Id": 1, | ||||
| 	"Name": "1.0.1", | ||||
| 	"Files": [ | ||||
| 		{ | ||||
| 			"Path": "fileOne", | ||||
| 			"Sources": [ | ||||
| 				{ | ||||
| 					"SourceType": "http", | ||||
| 					"Url": "file://$PWD/tests/data/fileOneB" | ||||
| 				} | ||||
| 			], | ||||
| 			"Executable": true, | ||||
| 			"Perms": 493, | ||||
| 			"MD5": "42915a71277c9016668cce7b82c6b577" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"Path": "fileTwo", | ||||
| 			"Sources": [ | ||||
| 				{ | ||||
| 					"SourceType": "http", | ||||
| 					"Url": "file://$PWD/tests/data/fileTwo" | ||||
| 				} | ||||
| 			], | ||||
| 			"Executable": false, | ||||
| 			"Perms": 644, | ||||
| 			"MD5": "38f94f54fa3eb72b0ea836538c10b043" | ||||
| 		} | ||||
| 	] | ||||
| } | ||||
| @@ -5,7 +5,7 @@ | ||||
| 			"id": "develop", | ||||
| 			"name": "Develop", | ||||
| 			"description": "The channel called \"develop\"", | ||||
| 			"url": "http://example.org/stuff" | ||||
| 			"url": "file://$PWD/tests/data/" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"id": "stable", | ||||
|   | ||||
							
								
								
									
										1
									
								
								tests/data/fileOneA
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests/data/fileOneA
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| stuff | ||||
							
								
								
									
										3
									
								
								tests/data/fileOneB
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								tests/data/fileOneB
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| stuff | ||||
|  | ||||
| more stuff that came in the new version | ||||
							
								
								
									
										1
									
								
								tests/data/fileThree
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests/data/fileThree
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| this is yet another file | ||||
							
								
								
									
										1
									
								
								tests/data/fileTwo
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests/data/fileTwo
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| some other stuff | ||||
| @@ -0,0 +1,17 @@ | ||||
| <update version="3"> | ||||
|  <install> | ||||
|   <file> | ||||
|    <source>sourceOne</source> | ||||
|    <dest>destOne</dest> | ||||
|    <mode>0777</mode> | ||||
|   </file> | ||||
|   <file> | ||||
|    <source>MultiMC.exe</source> | ||||
|    <dest>M/u/l/t/i/M/C/e/x/e</dest> | ||||
|    <mode>0644</mode> | ||||
|   </file> | ||||
|  </install> | ||||
|  <uninstall> | ||||
|   <file>toDelete.abc</file> | ||||
|  </uninstall> | ||||
| </update> | ||||
							
								
								
									
										136
									
								
								tests/tst_DownloadUpdateTask.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								tests/tst_DownloadUpdateTask.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,136 @@ | ||||
| #include <QTest> | ||||
| #include <QSignalSpy> | ||||
|  | ||||
| #include "TestUtil.h" | ||||
|  | ||||
| #include "logic/updater/DownloadUpdateTask.h" | ||||
| #include "logic/updater/UpdateChecker.h" | ||||
|  | ||||
| Q_DECLARE_METATYPE(DownloadUpdateTask::VersionFileList) | ||||
|  | ||||
| bool operator==(const DownloadUpdateTask::FileSource &f1, const DownloadUpdateTask::FileSource &f2) | ||||
| { | ||||
| 	return f1.type == f2.type && | ||||
| 			f1.url == f2.url && | ||||
| 			f1.compressionType == f2.compressionType; | ||||
| } | ||||
| bool operator==(const DownloadUpdateTask::VersionFileEntry &v1, const DownloadUpdateTask::VersionFileEntry &v2) | ||||
| { | ||||
| 	return v1.path == v2.path && | ||||
| 			v1.mode == v2.mode && | ||||
| 			v1.sources == v2.sources && | ||||
| 			v1.md5 == v2.md5; | ||||
| } | ||||
|  | ||||
| QDebug operator<<(QDebug dbg, const DownloadUpdateTask::FileSource &f) | ||||
| { | ||||
| 	dbg.nospace() << "FileSource(type=" << f.type << " url=" << f.url << " comp=" << f.compressionType << ")"; | ||||
| 	return dbg.maybeSpace(); | ||||
| } | ||||
| QDebug operator<<(QDebug dbg, const DownloadUpdateTask::VersionFileEntry &v) | ||||
| { | ||||
| 	dbg.nospace() << "VersionFileEntry(path=" << v.path << " mode=" << v.mode << " md5=" << v.md5 << " sources=" << v.sources << ")"; | ||||
| 	return dbg.maybeSpace(); | ||||
| } | ||||
|  | ||||
| class DownloadUpdateTaskTest : public QObject | ||||
| { | ||||
| 	Q_OBJECT | ||||
| private | ||||
| slots: | ||||
| 	void initTestCase() | ||||
| 	{ | ||||
|  | ||||
| 	} | ||||
| 	void cleanupTestCase() | ||||
| 	{ | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	void test_writeInstallScript() | ||||
| 	{ | ||||
| 		DownloadUpdateTask task(QUrl::fromLocalFile(QDir::current().absoluteFilePath("tests/data/")).toString(), 0); | ||||
|  | ||||
| 		DownloadUpdateTask::UpdateOperationList ops; | ||||
|  | ||||
| 		ops << DownloadUpdateTask::UpdateOperation::CopyOp("sourceOne", "destOne", 0777) | ||||
| 			<< DownloadUpdateTask::UpdateOperation::CopyOp("MultiMC.exe", "M/u/l/t/i/M/C/e/x/e") | ||||
| 			<< DownloadUpdateTask::UpdateOperation::DeleteOp("toDelete.abc"); | ||||
|  | ||||
| 		const QString script = QDir::temp().absoluteFilePath("MultiMCUpdateScript.xml"); | ||||
| 		QVERIFY(task.writeInstallScript(ops, script)); | ||||
| 		QCOMPARE(TestsInternal::readFileUtf8(script), MULTIMC_GET_TEST_FILE_UTF8("tests/data/tst_DownloadUpdateTask-test_writeInstallScript.xml")); | ||||
| 	} | ||||
|  | ||||
| 	void test_parseVersionInfo_data() | ||||
| 	{ | ||||
| 		QTest::addColumn<QByteArray>("data"); | ||||
| 		QTest::addColumn<DownloadUpdateTask::VersionFileList>("list"); | ||||
| 		QTest::addColumn<QString>("error"); | ||||
| 		QTest::addColumn<bool>("ret"); | ||||
|  | ||||
| 		QTest::newRow("one") << MULTIMC_GET_TEST_FILE("tests/data/1.json") | ||||
| 							 << (DownloadUpdateTask::VersionFileList() | ||||
| 								 << DownloadUpdateTask::VersionFileEntry{"fileOne", 493, | ||||
| 																		 (DownloadUpdateTask::FileSourceList() << DownloadUpdateTask::FileSource("http", "file://" + qApp->applicationDirPath() + "/tests/data/fileOneA")), | ||||
| 																		 "9eb84090956c484e32cb6c08455a667b"} | ||||
| 								 << DownloadUpdateTask::VersionFileEntry{"fileTwo", 644, | ||||
| 																		 (DownloadUpdateTask::FileSourceList() << DownloadUpdateTask::FileSource("http", "file://" + qApp->applicationDirPath() + "/tests/data/fileTwo")), | ||||
| 																		 "38f94f54fa3eb72b0ea836538c10b043"} | ||||
| 								 << DownloadUpdateTask::VersionFileEntry{"fileThree", 750, | ||||
| 																		 (DownloadUpdateTask::FileSourceList() << DownloadUpdateTask::FileSource("http", "file://" + qApp->applicationDirPath() + "/tests/data/fileThree")), | ||||
| 																		 "f12df554b21e320be6471d7154130e70"}) | ||||
| 							 << QString() | ||||
| 							 << true; | ||||
| 		QTest::newRow("two") << MULTIMC_GET_TEST_FILE("tests/data/2.json") | ||||
| 							 << (DownloadUpdateTask::VersionFileList() | ||||
| 								 << DownloadUpdateTask::VersionFileEntry{"fileOne", 493, | ||||
| 																		 (DownloadUpdateTask::FileSourceList() << DownloadUpdateTask::FileSource("http", "file://" + qApp->applicationDirPath() + "/tests/data/fileOneB")), | ||||
| 																		 "42915a71277c9016668cce7b82c6b577"} | ||||
| 								 << DownloadUpdateTask::VersionFileEntry{"fileTwo", 644, | ||||
| 																		 (DownloadUpdateTask::FileSourceList() << DownloadUpdateTask::FileSource("http", "file://" + qApp->applicationDirPath() + "/tests/data/fileTwo")), | ||||
| 																		 "38f94f54fa3eb72b0ea836538c10b043"}) | ||||
| 							 << QString() | ||||
| 							 << true; | ||||
| 	} | ||||
| 	void test_parseVersionInfo() | ||||
| 	{ | ||||
| 		QFETCH(QByteArray, data); | ||||
| 		QFETCH(DownloadUpdateTask::VersionFileList, list); | ||||
| 		QFETCH(QString, error); | ||||
| 		QFETCH(bool, ret); | ||||
|  | ||||
| 		DownloadUpdateTask::VersionFileList outList; | ||||
| 		QString outError; | ||||
| 		bool outRet = DownloadUpdateTask("", 0).parseVersionInfo(data, &outList, &outError); | ||||
| 		QCOMPARE(outRet, ret); | ||||
| 		QCOMPARE(outList, list); | ||||
| 		QCOMPARE(outError, error); | ||||
| 	} | ||||
|  | ||||
| 	void test_processFileLists() | ||||
| 	{ | ||||
| 		// TODO create unit test for this | ||||
| 	} | ||||
|  | ||||
| 	void test_masterTest() | ||||
| 	{ | ||||
| 		QLOG_INFO() << "#####################"; | ||||
| 		MMC->m_version.build = 1; | ||||
| 		MMC->m_version.channel = "develop"; | ||||
| 		MMC->updateChecker()->setChannelListUrl(QUrl::fromLocalFile(QDir::current().absoluteFilePath("tests/data/channels.json")).toString()); | ||||
| 		MMC->updateChecker()->setCurrentChannel("develop"); | ||||
|  | ||||
| 		DownloadUpdateTask task(QUrl::fromLocalFile(QDir::current().absoluteFilePath("tests/data/")).toString(), 2); | ||||
|  | ||||
| 		QSignalSpy succeededSpy(&task, SIGNAL(succeeded())); | ||||
|  | ||||
| 		task.start(); | ||||
|  | ||||
| 		QVERIFY(succeededSpy.wait()); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| QTEST_GUILESS_MAIN_MULTIMC(DownloadUpdateTaskTest) | ||||
|  | ||||
| #include "tst_DownloadUpdateTask.moc" | ||||
		Reference in New Issue
	
	Block a user