aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/CMakeLists.txt1
-rw-r--r--tests/testparseperformance.cpp85
-rw-r--r--tests/testparseperformance.h18
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