From 5a53665e9676de8be59d2d91b8d8f02139ec3a93 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Mon, 11 Dec 2017 18:08:14 +0000
Subject: [PATCH] Add trace tests.

---
 .../briarproject/bramble/db/H2Database.java   |  6 +-
 .../bramble/db/H2DatabaseTraceTest.java       | 36 ++++++++++++
 .../bramble/db/JdbcDatabaseTraceTest.java     | 57 +++++++++++++++++++
 3 files changed, 98 insertions(+), 1 deletion(-)
 create mode 100644 bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTraceTest.java
 create mode 100644 bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTraceTest.java

diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java
index 2ee4d680a2..6a81969260 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java
@@ -92,6 +92,10 @@ class H2Database extends JdbcDatabase {
 		// Separate the file password from the user password with a space
 		String hex = StringUtils.toHexString(key.getBytes());
 		props.put("password", hex + " password");
-		return DriverManager.getConnection(url, props);
+		return DriverManager.getConnection(getUrl(), props);
+	}
+
+	String getUrl() {
+		return url;
 	}
 }
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTraceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTraceTest.java
new file mode 100644
index 0000000000..885613d4dc
--- /dev/null
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTraceTest.java
@@ -0,0 +1,36 @@
+package org.briarproject.bramble.db;
+
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.system.Clock;
+import org.junit.Ignore;
+
+import java.io.File;
+import java.sql.Connection;
+
+import javax.annotation.Nonnull;
+
+@Ignore
+public class H2DatabaseTraceTest extends JdbcDatabaseTraceTest {
+
+	@Override
+	Database<Connection> createDatabase(DatabaseConfig databaseConfig,
+			Clock clock) {
+		return new H2Database(databaseConfig, clock) {
+			@Override
+			@Nonnull
+			String getUrl() {
+				return super.getUrl() + ";TRACE_LEVEL_FILE=3";
+			}
+		};
+	}
+
+	@Override
+	protected File getTraceFile() {
+		return new File(testDir, "db.trace.db");
+	}
+
+	@Override
+	protected String getTestName() {
+		return getClass().getSimpleName();
+	}
+}
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTraceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTraceTest.java
new file mode 100644
index 0000000000..ec187b9c6a
--- /dev/null
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTraceTest.java
@@ -0,0 +1,57 @@
+package org.briarproject.bramble.db;
+
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.system.SystemClock;
+import org.briarproject.bramble.test.TestDatabaseConfig;
+import org.briarproject.bramble.util.IoUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.sql.Connection;
+
+import javax.annotation.Nullable;
+
+import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory;
+
+public abstract class JdbcDatabaseTraceTest
+		extends JdbcDatabasePerformanceTest {
+
+	abstract Database<Connection> createDatabase(DatabaseConfig databaseConfig,
+			Clock clock);
+
+	@Nullable
+	protected abstract File getTraceFile();
+
+	@Override
+	protected void benchmark(String name,
+			BenchmarkTask<Database<Connection>> task) throws Exception {
+		deleteTestDirectory(testDir);
+		Database<Connection> db = openDatabase();
+		populateDatabase(db);
+		db.close();
+		File traceFile = getTraceFile();
+		if (traceFile != null) traceFile.delete();
+		db = openDatabase();
+		measureOne(db, task);
+		db.close();
+		if (traceFile != null) copyTraceFile(name, traceFile);
+	}
+
+	private Database<Connection> openDatabase() throws DbException {
+		Database<Connection> db = createDatabase(
+				new TestDatabaseConfig(testDir, MAX_SIZE), new SystemClock());
+		db.open();
+		return db;
+	}
+
+	private void copyTraceFile(String name, File src) throws IOException {
+		if (!src.exists()) return;
+		File dest = new File(testDir.getParentFile(), name + ".trace.txt");
+		IoUtils.copyAndClose(new FileInputStream(src),
+				new FileOutputStream(dest));
+	}
+}
-- 
GitLab