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