diff options
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/testparseperformance.cpp | 85 | ||||
-rw-r--r-- | tests/testparseperformance.h | 18 |
3 files changed, 104 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4d59536bd..252d0d3d8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -92,6 +92,7 @@ TEST(TestUnitConversion testunitconversion.cpp) TEST(TestProfile testprofile.cpp) TEST(TestGpsCoords testgpscoords.cpp) TEST(TestParse testparse.cpp) +TEST(TestParsePerformance testparseperformance.cpp) TEST(TestPlan testplan.cpp) TEST(TestDiveSiteDuplication testdivesiteduplication.cpp) TEST(TestRenumber testrenumber.cpp) diff --git a/tests/testparseperformance.cpp b/tests/testparseperformance.cpp new file mode 100644 index 000000000..c31304f42 --- /dev/null +++ b/tests/testparseperformance.cpp @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "testparseperformance.h" +#include "core/dive.h" +#include "core/divelist.h" +#include "core/git-access.h" +#include "core/settings/qPref.h" +#include <QFile> +#include <QDebug> +#include <QNetworkProxy> + +#define LARGE_TEST_REPO "https://github.com/Subsurface-divelog/large-anonymous-sample-data" + +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 { + parse_file(SUBSURFACE_TEST_DATA "/dives/large-anon.ssrf", &dive_table); + } +} + +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 + parse_file(LARGE_TEST_REPO "[git]", &dive_table); + + cleanup(); + + QBENCHMARK { + parse_file(LARGE_TEST_REPO "[git]", &dive_table); + } +} + +QTEST_GUILESS_MAIN(TestParsePerformance) diff --git a/tests/testparseperformance.h b/tests/testparseperformance.h new file mode 100644 index 000000000..f1c0a9e43 --- /dev/null +++ b/tests/testparseperformance.h @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0 +#ifndef TESTPARSEPERFORMANCE_H +#define TESTPARSEPERFORMANCE_H + +#include <QtTest> + +class TestParsePerformance : public QObject { + Q_OBJECT +private slots: + void initTestCase(); + void init(); + void cleanup(); + + void parseSsrf(); + void parseGit(); +}; + +#endif |