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 2ee4d680a2d0db4ee210f6bbad1bf9f8f9ce4277..6a81969260df8283a07c2ee9ab6a48efdd040778 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 0000000000000000000000000000000000000000..885613d4dcad0abfab1b27b63cec822978441cdd --- /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 0000000000000000000000000000000000000000..ec187b9c6a6cb668fef06d9e6ae70984145ed05e --- /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)); + } +}