| 
									
										
										
										
											2018-08-30 14:01:03 -07:00
										 |  |  | // SPDX-License-Identifier: GPL-2.0
 | 
					
						
							|  |  |  | #include "testparseperformance.h"
 | 
					
						
							| 
									
										
										
										
											2020-10-17 12:32:22 +02:00
										 |  |  | #include "core/device.h"
 | 
					
						
							| 
									
										
										
										
											2019-03-04 23:20:29 +01:00
										 |  |  | #include "core/divesite.h"
 | 
					
						
							| 
									
										
										
										
											2019-05-31 16:09:14 +02:00
										 |  |  | #include "core/trip.h"
 | 
					
						
							| 
									
										
										
										
											2019-03-03 22:29:40 +01:00
										 |  |  | #include "core/file.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-30 14:01:03 -07:00
										 |  |  | #include "core/git-access.h"
 | 
					
						
							| 
									
										
										
										
											2018-09-08 19:46:11 +02:00
										 |  |  | #include "core/settings/qPrefProxy.h"
 | 
					
						
							|  |  |  | #include "core/settings/qPrefCloudStorage.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-30 14:01:03 -07:00
										 |  |  | #include <QFile>
 | 
					
						
							|  |  |  | #include <QDebug>
 | 
					
						
							|  |  |  | #include <QNetworkProxy>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-26 16:36:27 -07:00
										 |  |  | #define LARGE_TEST_REPO "https://github.com/Subsurface/large-anonymous-sample-data"
 | 
					
						
							| 
									
										
										
										
											2018-08-30 14:01:03 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | void TestParsePerformance::initTestCase() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	/* we need to manually tell that the resource exists, because we are using it as library. */ | 
					
						
							|  |  |  | 	Q_INIT_RESOURCE(subsurface); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Set UTF8 text codec as in real applications
 | 
					
						
							|  |  |  | 	QTextCodec::setCodecForLocale(QTextCodec::codecForMib(106)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// first, setup the preferences an proxy information
 | 
					
						
							|  |  |  | 	copy_prefs(&default_prefs, &prefs); | 
					
						
							|  |  |  | 	QCoreApplication::setOrganizationName("Subsurface"); | 
					
						
							|  |  |  | 	QCoreApplication::setOrganizationDomain("subsurface.hohndel.org"); | 
					
						
							|  |  |  | 	QCoreApplication::setApplicationName("Subsurface"); | 
					
						
							|  |  |  | 	qPrefProxy::load(); | 
					
						
							|  |  |  | 	qPrefCloudStorage::load(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	QNetworkProxy proxy; | 
					
						
							|  |  |  | 	proxy.setType(QNetworkProxy::ProxyType(prefs.proxy_type)); | 
					
						
							|  |  |  | 	proxy.setHostName(prefs.proxy_host); | 
					
						
							|  |  |  | 	proxy.setPort(prefs.proxy_port); | 
					
						
							|  |  |  | 	if (prefs.proxy_auth) { | 
					
						
							|  |  |  | 		proxy.setUser(prefs.proxy_user); | 
					
						
							|  |  |  | 		proxy.setPassword(prefs.proxy_pass); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	QNetworkProxy::setApplicationProxy(proxy); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// now cleanup the cache dir in case there's something weird from previous runs
 | 
					
						
							|  |  |  | 	QString localCacheDir(get_local_dir(LARGE_TEST_REPO, "git")); | 
					
						
							|  |  |  | 	QDir localCacheDirectory(localCacheDir); | 
					
						
							|  |  |  | 	QCOMPARE(localCacheDirectory.removeRecursively(), true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestParsePerformance::init() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestParsePerformance::cleanup() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	clear_dive_file_data(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestParsePerformance::parseSsrf() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	// parsing of a V2 file should work
 | 
					
						
							|  |  |  | 	QFile largeSsrfFile(SUBSURFACE_TEST_DATA "/dives/large-anon.ssrf"); | 
					
						
							|  |  |  | 	if (!largeSsrfFile.exists()) { | 
					
						
							|  |  |  | 		qDebug() << "missing large sample data file - available at " LARGE_TEST_REPO; | 
					
						
							|  |  |  | 		qDebug() << "clone the repo, uncompress the file and copy it to " SUBSURFACE_TEST_DATA "/dives/large-anon.ssrf"; | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	QBENCHMARK { | 
					
						
							| 
									
										
										
										
											2020-10-17 12:32:22 +02:00
										 |  |  | 		parse_file(SUBSURFACE_TEST_DATA "/dives/large-anon.ssrf", &dive_table, &trip_table, | 
					
						
							|  |  |  | 			   &dive_site_table, &device_table, &filter_preset_table); | 
					
						
							| 
									
										
										
										
											2018-08-30 14:01:03 -07:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestParsePerformance::parseGit() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	// some more necessary setup
 | 
					
						
							|  |  |  | 	git_libgit2_init(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// first parse this once to populate the local cache - this way network
 | 
					
						
							|  |  |  | 	// effects don't dominate the parse time
 | 
					
						
							| 
									
										
										
										
											2020-10-17 12:32:22 +02:00
										 |  |  | 	parse_file(LARGE_TEST_REPO "[git]", &dive_table, &trip_table, &dive_site_table, | 
					
						
							|  |  |  | 		   &device_table, &filter_preset_table); | 
					
						
							| 
									
										
										
										
											2018-08-30 14:01:03 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	cleanup(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	QBENCHMARK { | 
					
						
							| 
									
										
										
										
											2020-10-17 12:32:22 +02:00
										 |  |  | 		parse_file(LARGE_TEST_REPO "[git]", &dive_table, &trip_table, &dive_site_table, | 
					
						
							|  |  |  | 			   &device_table, &filter_preset_table); | 
					
						
							| 
									
										
										
										
											2018-08-30 14:01:03 -07:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QTEST_GUILESS_MAIN(TestParsePerformance) |