From 1081a08ea9aa9ccf49417d591ec7b638129ed005 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Mon, 12 Dec 2016 17:06:30 -0200
Subject: [PATCH] Move all unit tests to their modules and remove briar-tests

---
 bramble-api/build.gradle                      | 33 +++++++++++---
 .../bramble/BrambleMockTestCase.java          |  5 ++-
 .../briarproject/bramble/BrambleTestCase.java |  6 +--
 .../bramble}/ImmediateExecutor.java           |  2 +-
 .../bramble}/TestDatabaseConfig.java          |  2 +-
 .../bramble}/TestDatabaseModule.java          |  2 +-
 .../bramble}/TestSeedProvider.java            |  2 +-
 .../bramble}/TestSeedProviderModule.java      |  2 +-
 .../org/briarproject/bramble}/TestUtils.java  | 23 +---------
 .../bramble}/ValidatorTestCase.java           |  4 +-
 .../bramble/api}/data/BdfDictionaryTest.java  |  8 ++--
 .../bramble/api}/data/BdfListTest.java        |  9 ++--
 bramble-core/.gitignore                       |  1 +
 bramble-core/build.gradle                     | 17 ++++++--
 .../org/briarproject/bramble}/RunAction.java  |  2 +-
 .../client/BdfMessageValidatorTest.java       |  2 +-
 .../bramble/client/ClientHelperImplTest.java  | 16 ++++---
 .../contact/ContactManagerImplTest.java       | 13 +++---
 .../bramble/crypto/AsciiArmourTest.java       |  4 +-
 .../bramble/crypto/Blake2sDigestTest.java     |  4 +-
 .../EllipticCurveMultiplicationTest.java      |  4 +-
 .../crypto/EllipticCurvePerformanceTest.java  |  4 +-
 .../bramble/crypto/FortunaGeneratorTest.java  |  4 +-
 .../crypto/FortunaSecureRandomTest.java       |  4 +-
 .../bramble/crypto/KeyAgreementTest.java      |  6 +--
 .../bramble/crypto/KeyDerivationTest.java     | 10 ++---
 .../crypto/KeyEncodingAndParsingTest.java     |  8 ++--
 .../briarproject/bramble/crypto/MacTest.java  |  8 ++--
 .../bramble/crypto/MessageEncrypterTest.java  |  4 +-
 .../bramble/crypto/PasswordBasedKdfTest.java  |  8 ++--
 .../PasswordStrengthEstimatorImplTest.java    |  4 +-
 .../bramble/crypto/SignatureTest.java         |  8 ++--
 .../crypto/StreamDecrypterImplTest.java       |  6 +--
 .../crypto/StreamEncrypterImplTest.java       |  6 +--
 .../crypto/TestAuthenticatedCipher.java       |  0
 ...alsa20Poly1305AuthenticatedCipherTest.java |  4 +-
 .../bramble/data/BdfReaderImplTest.java       |  6 +--
 .../bramble/data/BdfWriterImplTest.java       | 18 ++++----
 .../MetadataEncoderParserIntegrationTest.java | 16 +++----
 .../briarproject/bramble/db/BasicH2Test.java  |  8 ++--
 .../bramble/db/DatabaseComponentImplTest.java | 12 +++---
 .../bramble/db/ExponentialBackoffTest.java    |  4 +-
 .../bramble/db/H2DatabaseTest.java            | 10 ++---
 .../bramble/db/LockFairnessTest.java          |  4 +-
 .../bramble/db/TransactionIsolationTest.java  |  6 +--
 .../identity/IdentityManagerImplTest.java     |  8 ++--
 .../KeyAgreementProtocolTest.java             |  6 +--
 .../lifecycle/ShutdownManagerImplTest.java    |  6 +--
 .../bramble/plugin/BackoffImplTest.java       |  4 +-
 .../plugin/ConnectionRegistryImplTest.java    |  4 +-
 .../bramble/plugin/PluginManagerImplTest.java |  4 +-
 .../bramble/plugin/PollerTest.java            |  8 ++--
 .../bramble/plugin/tcp/LanTcpPluginTest.java  |  9 ++--
 .../TransportPropertyManagerImplTest.java     |  4 +-
 .../TransportPropertyValidatorTest.java       |  6 +--
 .../bramble/sync/PacketReaderImplTest.java    |  6 +--
 .../sync/SimplexOutgoingSessionTest.java      |  8 ++--
 .../bramble/sync/SyncIntegrationTest.java     |  6 +--
 .../sync/SyncIntegrationTestComponent.java    |  2 +-
 .../sync/ValidationManagerImplTest.java       | 20 +++++----
 .../bramble/system/LinuxSeedProviderTest.java |  8 ++--
 .../bramble/transport/KeyManagerImplTest.java | 12 +++---
 .../transport/ReorderingWindowTest.java       |  6 +--
 .../transport/StreamReaderImplTest.java       |  4 +-
 .../StreamReaderWriterIntegrationTest.java    |  6 +--
 .../transport/StreamWriterImplTest.java       |  4 +-
 .../transport/TestStreamDecrypter.java        |  0
 .../transport/TestStreamEncrypter.java        |  0
 .../TransportKeyManagerImplTest.java          | 13 +++---
 .../bramble/util/ByteUtilsTest.java           |  4 +-
 .../bramble/util/StringUtilsTest.java         |  4 +-
 bramble-j2se/build.gradle                     |  6 +++
 .../WindowsShutdownManagerImplTest.java       |  0
 .../file/LinuxRemovableDriveFinderTest.java   |  4 +-
 .../file/MacRemovableDriveFinderTest.java     |  4 +-
 .../PollingRemovableDriveMonitorTest.java     |  6 +--
 .../plugin/file/RemovableDrivePluginTest.java | 18 ++++----
 .../file/UnixRemovableDriveMonitorTest.java   |  8 ++--
 .../plugin/modem/CountryCodesTest.java        |  4 +-
 .../bramble/plugin/modem/ModemPluginTest.java |  4 +-
 briar-android/build.gradle                    |  5 +--
 .../android/forum/ForumActivityTest.java      |  2 +-
 briar-core/.gitignore                         |  1 +
 briar-core/build.gradle                       |  7 ++-
 .../briar/BriarIntegrationTest.java           |  7 ++-
 .../briar/BriarIntegrationTestComponent.java  |  5 +--
 .../org/briarproject/briar/BriarTestCase.java | 11 +++++
 .../briarproject/briar/BriarTestUtils.java    | 28 ++++++++++++
 .../briar}/CaptureArgumentAction.java         |  2 +-
 .../briar}/TestLifecycleModule.java           |  2 +-
 .../briar}/TestPluginConfigModule.java        |  2 +-
 .../briar/blog/BlogManagerImplTest.java       |  6 +--
 .../blog/BlogManagerIntegrationTest.java      |  4 +-
 .../briar/blog/BlogPostValidatorTest.java     |  4 +-
 .../client/MessageQueueManagerImplTest.java   | 34 +++++++--------
 .../briar/client/MessageTreeImplTest.java     |  4 +-
 .../briar/forum/ForumManagerImplTest.java     |  2 +-
 .../briar/forum/ForumManagerTest.java         |  4 +-
 .../briar/forum/ForumPostValidatorTest.java   |  4 +-
 .../introduction/IntroduceeManagerTest.java   |  4 +-
 .../introduction/IntroducerManagerTest.java   |  4 +-
 .../IntroductionIntegrationTest.java          |  8 ++--
 .../IntroductionIntegrationTestComponent.java |  6 +--
 .../IntroductionManagerImplTest.java          |  4 +-
 .../IntroductionValidatorTest.java            |  4 +-
 .../briar/introduction/MessageSenderTest.java |  4 +-
 .../messaging/MessageSizeIntegrationTest.java |  6 +--
 .../MessageSizeIntegrationTestComponent.java  |  6 +--
 .../messaging/MessagingManagerImplTest.java   |  2 +-
 .../PrivateMessageValidatorTest.java          |  4 +-
 .../SimplexMessagingIntegrationTest.java      | 10 ++---
 ...plexMessagingIntegrationTestComponent.java |  6 +--
 .../GroupInvitationIntegrationTest.java       |  4 +-
 .../GroupMessageValidatorTest.java            |  8 ++--
 .../PrivateGroupIntegrationTest.java          |  2 +-
 .../PrivateGroupManagerIntegrationTest.java   |  6 +--
 .../AbstractProtocolEngineTest.java           |  8 ++--
 .../invitation/CreatorProtocolEngineTest.java |  2 +-
 .../GroupInvitationManagerImplTest.java       | 18 ++++----
 .../GroupInvitationValidatorTest.java         |  8 ++--
 .../invitation/InviteeProtocolEngineTest.java |  4 +-
 .../invitation/PeerProtocolEngineTest.java    |  2 +-
 .../sharing/BlogSharingIntegrationTest.java   |  4 +-
 .../sharing/ForumSharingIntegrationTest.java  |  6 +--
 .../sharing/ForumSharingValidatorTest.java    |  4 +-
 .../briar/sharing/SharingManagerImplTest.java |  2 +-
 briar-tests/.gitignore                        |  3 --
 briar-tests/build.gradle                      | 43 -------------------
 briar-tests/src/.gitignore                    |  2 -
 settings.gradle                               |  1 -
 130 files changed, 441 insertions(+), 433 deletions(-)
 rename briar-tests/src/org/briarproject/BriarMockTestCase.java => bramble-api/src/test/java/org/briarproject/bramble/BrambleMockTestCase.java (63%)
 rename briar-tests/src/org/briarproject/BriarTestCase.java => bramble-api/src/test/java/org/briarproject/bramble/BrambleTestCase.java (80%)
 rename {briar-tests/src/org/briarproject => bramble-api/src/test/java/org/briarproject/bramble}/ImmediateExecutor.java (87%)
 rename {briar-tests/src/org/briarproject => bramble-api/src/test/java/org/briarproject/bramble}/TestDatabaseConfig.java (96%)
 rename {briar-tests/src/org/briarproject => bramble-api/src/test/java/org/briarproject/bramble}/TestDatabaseModule.java (95%)
 rename {briar-tests/src/org/briarproject => bramble-api/src/test/java/org/briarproject/bramble}/TestSeedProvider.java (89%)
 rename {briar-tests/src/org/briarproject => bramble-api/src/test/java/org/briarproject/bramble}/TestSeedProviderModule.java (89%)
 rename {briar-tests/src/org/briarproject => bramble-api/src/test/java/org/briarproject/bramble}/TestUtils.java (56%)
 rename {briar-tests/src/org/briarproject => bramble-api/src/test/java/org/briarproject/bramble}/ValidatorTestCase.java (93%)
 rename {briar-tests/src/org/briarproject/bramble => bramble-api/src/test/java/org/briarproject/bramble/api}/data/BdfDictionaryTest.java (94%)
 rename {briar-tests/src/org/briarproject/bramble => bramble-api/src/test/java/org/briarproject/bramble/api}/data/BdfListTest.java (97%)
 rename {briar-tests/src/org/briarproject => bramble-core/src/test/java/org/briarproject/bramble}/RunAction.java (92%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/client/BdfMessageValidatorTest.java (99%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/client/ClientHelperImplTest.java (95%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/contact/ContactManagerImplTest.java (94%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/AsciiArmourTest.java (92%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/Blake2sDigestTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java (97%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/FortunaGeneratorTest.java (96%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java (95%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/KeyAgreementTest.java (90%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/KeyDerivationTest.java (96%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java (96%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/MacTest.java (90%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/MessageEncrypterTest.java (92%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java (89%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java (88%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/SignatureTest.java (95%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java (97%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java (100%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java (96%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/data/BdfReaderImplTest.java (99%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/data/BdfWriterImplTest.java (94%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java (90%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/db/BasicH2Test.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/db/DatabaseComponentImplTest.java (99%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/db/ExponentialBackoffTest.java (95%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/db/H2DatabaseTest.java (99%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/db/LockFairnessTest.java (97%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/db/TransactionIsolationTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/identity/IdentityManagerImplTest.java (95%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java (84%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/plugin/BackoffImplTest.java (94%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java (97%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/plugin/PluginManagerImplTest.java (97%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/plugin/PollerTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java (60%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java (95%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/sync/PacketReaderImplTest.java (97%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java (95%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/sync/ValidationManagerImplTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/system/LinuxSeedProviderTest.java (92%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/transport/KeyManagerImplTest.java (94%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/transport/ReorderingWindowTest.java (96%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/transport/StreamReaderImplTest.java (97%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java (93%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/transport/StreamWriterImplTest.java (97%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/transport/TestStreamDecrypter.java (100%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/transport/TestStreamEncrypter.java (100%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/util/ByteUtilsTest.java (98%)
 rename {briar-tests/src => bramble-core/src/test/java}/org/briarproject/bramble/util/StringUtilsTest.java (98%)
 rename {briar-tests/src => bramble-j2se/src/test/java}/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java (100%)
 rename {briar-tests/src => bramble-j2se/src/test/java}/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java (88%)
 rename {briar-tests/src => bramble-j2se/src/test/java}/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java (87%)
 rename {briar-tests/src => bramble-j2se/src/test/java}/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java (94%)
 rename {briar-tests/src => bramble-j2se/src/test/java}/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java (96%)
 rename {briar-tests/src => bramble-j2se/src/test/java}/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java (93%)
 rename {briar-tests/src => bramble-j2se/src/test/java}/org/briarproject/bramble/plugin/modem/CountryCodesTest.java (95%)
 rename {briar-tests/src => bramble-j2se/src/test/java}/org/briarproject/bramble/plugin/modem/ModemPluginTest.java (98%)
 create mode 100644 briar-core/src/test/java/org/briarproject/briar/BriarTestCase.java
 create mode 100644 briar-core/src/test/java/org/briarproject/briar/BriarTestUtils.java
 rename {briar-tests/src/org/briarproject => briar-core/src/test/java/org/briarproject/briar}/CaptureArgumentAction.java (96%)
 rename {briar-tests/src/org/briarproject => briar-core/src/test/java/org/briarproject/briar}/TestLifecycleModule.java (98%)
 rename {briar-tests/src/org/briarproject => briar-core/src/test/java/org/briarproject/briar}/TestPluginConfigModule.java (97%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/blog/BlogManagerImplTest.java (98%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/blog/BlogPostValidatorTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/client/MessageQueueManagerImplTest.java (96%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/client/MessageTreeImplTest.java (96%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/forum/ForumManagerImplTest.java (84%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/forum/ForumPostValidatorTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/introduction/IntroduceeManagerTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/introduction/IntroducerManagerTest.java (98%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/introduction/IntroductionManagerImplTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/introduction/IntroductionValidatorTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/introduction/MessageSenderTest.java (97%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/messaging/MessagingManagerImplTest.java (84%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java (97%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java (97%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java (98%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java (98%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/sharing/ForumSharingValidatorTest.java (99%)
 rename {briar-tests/src => briar-core/src/test/java}/org/briarproject/briar/sharing/SharingManagerImplTest.java (84%)
 delete mode 100644 briar-tests/.gitignore
 delete mode 100644 briar-tests/build.gradle
 delete mode 100644 briar-tests/src/.gitignore

diff --git a/bramble-api/build.gradle b/bramble-api/build.gradle
index 138b9484c4..8f864b574d 100644
--- a/bramble-api/build.gradle
+++ b/bramble-api/build.gradle
@@ -5,18 +5,37 @@ targetCompatibility = 1.6
 apply plugin: 'witness'
 
 dependencies {
-	compile "com.google.dagger:dagger:2.0.2"
-	compile 'com.google.dagger:dagger-compiler:2.0.2'
+	compile "com.google.dagger:dagger:2.8"
+	compile 'com.google.dagger:dagger-compiler:2.8'
 	compile 'com.google.code.findbugs:jsr305:3.0.1'
+
+	testCompile 'junit:junit:4.12'
+	testCompile "org.jmock:jmock:2.8.1"
+	testCompile "org.jmock:jmock-junit4:2.8.1"
+	testCompile "org.jmock:jmock-legacy:2.8.1"
+	testCompile "org.hamcrest:hamcrest-library:1.3"
+	testCompile "org.hamcrest:hamcrest-core:1.3"
 }
 
 dependencyVerification {
 	verify = [
-			'com.google.dagger:dagger:84c0282ed8be73a29e0475d639da030b55dee72369e58dd35ae7d4fe6243dcf9',
-			'com.google.dagger:dagger-compiler:b74bc9de063dd4c6400b232231f2ef5056145b8fbecbf5382012007dd1c071b3',
+			'com.google.dagger:dagger:5070e1dff5c551a4908ba7b93125c0243de2a688aed3d2f475357d86d9d7c0ad',
+			'com.google.dagger:dagger-compiler:7b2686f94907868c5364e9965601ffe2f020ba4af1849ad9b57dad5fe3fa6242',
+			'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd',
 			'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
-			'com.google.dagger:dagger-producers:99ec15e8a0507ba569e7655bc1165ee5e5ca5aa914b3c8f7e2c2458f724edd6b',
-			'com.google.guava:guava:d664fbfc03d2e5ce9cab2a44fb01f1d0bf9dfebeccc1a473b1f9ea31f79f6f99',
-			'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd'
+			'com.google.dagger:dagger-producers:1e4043e85f67de381d19e22c7932aaf7ff1611091be7e1aaae93f2c37f331cf2',
+			'com.google.guava:guava:ff89d4a4a6b303c4084194975a5a35f55a8af6f7337678b4cc8ddbea9005c323',
 	]
 }
+
+// needed to make test output available to bramble-core and briar-core
+configurations {
+	testOutput.extendsFrom(testCompile)
+}
+task jarTest (type: Jar, dependsOn: testClasses) {
+	from sourceSets.test.output
+	classifier = 'test'
+}
+artifacts {
+	testOutput jarTest
+}
diff --git a/briar-tests/src/org/briarproject/BriarMockTestCase.java b/bramble-api/src/test/java/org/briarproject/bramble/BrambleMockTestCase.java
similarity index 63%
rename from briar-tests/src/org/briarproject/BriarMockTestCase.java
rename to bramble-api/src/test/java/org/briarproject/bramble/BrambleMockTestCase.java
index 45b662013b..b43003e132 100644
--- a/briar-tests/src/org/briarproject/BriarMockTestCase.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/BrambleMockTestCase.java
@@ -1,9 +1,10 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.jmock.Mockery;
 import org.junit.After;
 
-public abstract class BriarMockTestCase extends BriarTestCase {
+public abstract class BrambleMockTestCase extends
+		BrambleTestCase {
 
 	protected final Mockery context = new Mockery();
 
diff --git a/briar-tests/src/org/briarproject/BriarTestCase.java b/bramble-api/src/test/java/org/briarproject/bramble/BrambleTestCase.java
similarity index 80%
rename from briar-tests/src/org/briarproject/BriarTestCase.java
rename to bramble-api/src/test/java/org/briarproject/bramble/BrambleTestCase.java
index 745628c539..968c6099f3 100644
--- a/briar-tests/src/org/briarproject/BriarTestCase.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/BrambleTestCase.java
@@ -1,12 +1,12 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import java.lang.Thread.UncaughtExceptionHandler;
 
 import static org.junit.Assert.fail;
 
-public abstract class BriarTestCase {
+public abstract class BrambleTestCase {
 
-	public BriarTestCase() {
+	public BrambleTestCase() {
 		// Ensure exceptions thrown on worker threads cause tests to fail
 		UncaughtExceptionHandler fail = new UncaughtExceptionHandler() {
 			@Override
diff --git a/briar-tests/src/org/briarproject/ImmediateExecutor.java b/bramble-api/src/test/java/org/briarproject/bramble/ImmediateExecutor.java
similarity index 87%
rename from briar-tests/src/org/briarproject/ImmediateExecutor.java
rename to bramble-api/src/test/java/org/briarproject/bramble/ImmediateExecutor.java
index 424e6674b2..65ae6d1411 100644
--- a/briar-tests/src/org/briarproject/ImmediateExecutor.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/ImmediateExecutor.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 
diff --git a/briar-tests/src/org/briarproject/TestDatabaseConfig.java b/bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseConfig.java
similarity index 96%
rename from briar-tests/src/org/briarproject/TestDatabaseConfig.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseConfig.java
index 0d366e8677..3ed6fd70b2 100644
--- a/briar-tests/src/org/briarproject/TestDatabaseConfig.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseConfig.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.api.db.DatabaseConfig;
diff --git a/briar-tests/src/org/briarproject/TestDatabaseModule.java b/bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseModule.java
similarity index 95%
rename from briar-tests/src/org/briarproject/TestDatabaseModule.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseModule.java
index b978c8deae..f3360471da 100644
--- a/briar-tests/src/org/briarproject/TestDatabaseModule.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseModule.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.db.DatabaseExecutor;
diff --git a/briar-tests/src/org/briarproject/TestSeedProvider.java b/bramble-api/src/test/java/org/briarproject/bramble/TestSeedProvider.java
similarity index 89%
rename from briar-tests/src/org/briarproject/TestSeedProvider.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestSeedProvider.java
index a6d761a4c9..911ca2f510 100644
--- a/briar-tests/src/org/briarproject/TestSeedProvider.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestSeedProvider.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.system.SeedProvider;
diff --git a/briar-tests/src/org/briarproject/TestSeedProviderModule.java b/bramble-api/src/test/java/org/briarproject/bramble/TestSeedProviderModule.java
similarity index 89%
rename from briar-tests/src/org/briarproject/TestSeedProviderModule.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestSeedProviderModule.java
index 1d449284fa..eb5ccff38c 100644
--- a/briar-tests/src/org/briarproject/TestSeedProviderModule.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestSeedProviderModule.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.system.SeedProvider;
 
diff --git a/briar-tests/src/org/briarproject/TestUtils.java b/bramble-api/src/test/java/org/briarproject/bramble/TestUtils.java
similarity index 56%
rename from briar-tests/src/org/briarproject/TestUtils.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestUtils.java
index 6e28dce8cf..bfdab2fe94 100644
--- a/briar-tests/src/org/briarproject/TestUtils.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestUtils.java
@@ -1,19 +1,13 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.crypto.SecretKey;
-import org.briarproject.bramble.api.db.DbException;
-import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.bramble.util.IoUtils;
-import org.briarproject.briar.api.client.MessageTracker;
-import org.briarproject.briar.api.client.MessageTracker.GroupCount;
 
 import java.io.File;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import static org.junit.Assert.assertEquals;
-
 public class TestUtils {
 
 	private static final AtomicInteger nextTestDir =
@@ -51,19 +45,4 @@ public class TestUtils {
 		return new SecretKey(getRandomBytes(SecretKey.LENGTH));
 	}
 
-	public static void assertGroupCount(MessageTracker tracker, GroupId g,
-			long msgCount, long unreadCount, long latestMsgTime)
-			throws DbException {
-		GroupCount groupCount = tracker.getGroupCount(g);
-		assertEquals(msgCount, groupCount.getMsgCount());
-		assertEquals(unreadCount, groupCount.getUnreadCount());
-		assertEquals(latestMsgTime, groupCount.getLatestMsgTime());
-	}
-
-	public static void assertGroupCount(MessageTracker tracker, GroupId g,
-			long msgCount, long unreadCount) throws	DbException {
-		GroupCount c1 = tracker.getGroupCount(g);
-		assertEquals(msgCount, c1.getMsgCount());
-		assertEquals(unreadCount, c1.getUnreadCount());
-	}
 }
diff --git a/briar-tests/src/org/briarproject/ValidatorTestCase.java b/bramble-api/src/test/java/org/briarproject/bramble/ValidatorTestCase.java
similarity index 93%
rename from briar-tests/src/org/briarproject/ValidatorTestCase.java
rename to bramble-api/src/test/java/org/briarproject/bramble/ValidatorTestCase.java
index 0ece8f562d..815451f3f7 100644
--- a/briar-tests/src/org/briarproject/ValidatorTestCase.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/ValidatorTestCase.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.MetadataEncoder;
@@ -10,7 +10,7 @@ import org.briarproject.bramble.api.sync.Message;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.bramble.api.system.Clock;
 
-public abstract class ValidatorTestCase extends BriarMockTestCase {
+public abstract class ValidatorTestCase extends BrambleMockTestCase {
 
 	protected final ClientHelper clientHelper =
 			context.mock(ClientHelper.class);
diff --git a/briar-tests/src/org/briarproject/bramble/data/BdfDictionaryTest.java b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/data/BdfDictionaryTest.java
rename to bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java
index 5aabfdd609..9a06c0e491 100644
--- a/briar-tests/src/org/briarproject/bramble/data/BdfDictionaryTest.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java
@@ -1,9 +1,7 @@
-package org.briarproject.bramble.data;
+package org.briarproject.bramble.api.data;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.Bytes;
-import org.briarproject.bramble.api.data.BdfDictionary;
-import org.briarproject.bramble.api.data.BdfEntry;
 import org.junit.Test;
 
 import java.util.Collections;
@@ -15,7 +13,7 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class BdfDictionaryTest extends BriarTestCase {
+public class BdfDictionaryTest extends BrambleTestCase {
 
 	@Test
 	public void testConstructors() {
diff --git a/briar-tests/src/org/briarproject/bramble/data/BdfListTest.java b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfListTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/data/BdfListTest.java
rename to bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfListTest.java
index 7fd85878f6..76ad505674 100644
--- a/briar-tests/src/org/briarproject/bramble/data/BdfListTest.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfListTest.java
@@ -1,11 +1,8 @@
-package org.briarproject.bramble.data;
+package org.briarproject.bramble.api.data;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.FormatException;
-import org.briarproject.bramble.api.data.BdfDictionary;
-import org.briarproject.bramble.api.data.BdfEntry;
-import org.briarproject.bramble.api.data.BdfList;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -15,7 +12,7 @@ import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class BdfListTest extends BriarTestCase {
+public class BdfListTest extends BrambleTestCase {
 
 	@Test
 	public void testConstructors() {
diff --git a/bramble-core/.gitignore b/bramble-core/.gitignore
index eeb02632a0..217c03c152 100644
--- a/bramble-core/.gitignore
+++ b/bramble-core/.gitignore
@@ -1,3 +1,4 @@
 bin
 build
+test.tmp
 .settings
diff --git a/bramble-core/build.gradle b/bramble-core/build.gradle
index 30ea06e20e..9c2ecbc3c4 100644
--- a/bramble-core/build.gradle
+++ b/bramble-core/build.gradle
@@ -14,10 +14,7 @@ dependencies {
 	compile 'com.madgag.spongycastle:core:1.54.0.0'
 	compile 'com.h2database:h2:1.4.190'
 
-	testCompile project(':briar-tests') // TODO remove when moving unit tests (#778)
-	testCompile 'junit:junit:4.12'
-	testCompile 'com.google.dagger:dagger-compiler:2.8'
-	testApt 'com.google.dagger:dagger-compiler:2.8'
+	testCompile project(path: ':bramble-api', configuration: 'testOutput')
 }
 
 dependencyVerification {
@@ -26,3 +23,15 @@ dependencyVerification {
 			'com.h2database:h2:23ba495a07bbbb3bd6c3084d10a96dad7a23741b8b6d64b213459a784195a98c'
 	]
 }
+
+// needed to make test output available to bramble-j2se
+configurations {
+	testOutput.extendsFrom(testCompile)
+}
+task jarTest (type: Jar, dependsOn: testClasses) {
+	from sourceSets.test.output
+	classifier = 'test'
+}
+artifacts {
+	testOutput jarTest
+}
diff --git a/briar-tests/src/org/briarproject/RunAction.java b/bramble-core/src/test/java/org/briarproject/bramble/RunAction.java
similarity index 92%
rename from briar-tests/src/org/briarproject/RunAction.java
rename to bramble-core/src/test/java/org/briarproject/bramble/RunAction.java
index ef547ce189..7ed4ca7717 100644
--- a/briar-tests/src/org/briarproject/RunAction.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/RunAction.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.hamcrest.Description;
 import org.jmock.api.Action;
diff --git a/briar-tests/src/org/briarproject/bramble/client/BdfMessageValidatorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/bramble/client/BdfMessageValidatorTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
index c14032271d..99b3b8b276 100644
--- a/briar-tests/src/org/briarproject/bramble/client/BdfMessageValidatorTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.client;
 
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.BdfMessageContext;
 import org.briarproject.bramble.api.client.BdfMessageValidator;
diff --git a/briar-tests/src/org/briarproject/bramble/client/ClientHelperImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/client/ClientHelperImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
index 818db58b61..3f4ff4e30c 100644
--- a/briar-tests/src/org/briarproject/bramble/client/ClientHelperImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.client;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
@@ -32,13 +32,13 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
-public class ClientHelperImplTest extends BriarTestCase {
+public class ClientHelperImplTest extends BrambleTestCase {
 
 	private final Mockery context = new Mockery();
 	private final DatabaseComponent db = context.mock(DatabaseComponent.class);
@@ -165,7 +165,8 @@ public class ClientHelperImplTest extends BriarTestCase {
 
 	@Test
 	public void testGetMessageMetadataAsDictionaryMap() throws Exception {
-		final Map<MessageId, BdfDictionary> map = new HashMap<>();
+		final Map<MessageId, BdfDictionary> map =
+				new HashMap<MessageId, BdfDictionary>();
 		map.put(messageId, dictionary);
 		final Transaction txn = new Transaction(null, true);
 
@@ -187,7 +188,8 @@ public class ClientHelperImplTest extends BriarTestCase {
 
 	@Test
 	public void testGetMessageMetadataAsDictionaryQuery() throws Exception {
-		final Map<MessageId, BdfDictionary> map = new HashMap<>();
+		final Map<MessageId, BdfDictionary> map =
+				new HashMap<MessageId, BdfDictionary>();
 		map.put(messageId, dictionary);
 		final BdfDictionary query =
 				BdfDictionary.of(new BdfEntry("query", "me"));
diff --git a/briar-tests/src/org/briarproject/bramble/contact/ContactManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/contact/ContactManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
index d4f6bfc976..983ab2c001 100644
--- a/briar-tests/src/org/briarproject/bramble/contact/ContactManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.contact;
 
-import org.briarproject.BriarMockTestCase;
+import org.briarproject.bramble.BrambleMockTestCase;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.ContactManager;
@@ -19,13 +19,13 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getSecretKey;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getSecretKey;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class ContactManagerImplTest extends BriarMockTestCase {
+public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	private final Mockery context = new Mockery();
 	private final DatabaseComponent db = context.mock(DatabaseComponent.class);
@@ -132,7 +132,8 @@ public class ContactManagerImplTest extends BriarMockTestCase {
 	@Test
 	public void testActiveContacts() throws Exception {
 		Collection<Contact> activeContacts = Collections.singletonList(contact);
-		final Collection<Contact> contacts = new ArrayList<>(activeContacts);
+		final Collection<Contact> contacts =
+				new ArrayList<Contact>(activeContacts);
 		contacts.add(new Contact(new ContactId(3), remote, local, true, false));
 		final Transaction txn = new Transaction(null, true);
 		context.checking(new Expectations() {{
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/AsciiArmourTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/AsciiArmourTest.java
similarity index 92%
rename from briar-tests/src/org/briarproject/bramble/crypto/AsciiArmourTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/AsciiArmourTest.java
index 21fb4e3102..61e3a0ad34 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/AsciiArmourTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/AsciiArmourTest.java
@@ -1,12 +1,12 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class AsciiArmourTest extends BriarTestCase {
+public class AsciiArmourTest extends BrambleTestCase {
 
 	@Test
 	public void testWrapOnSingleLine() {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/Blake2sDigestTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2sDigestTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/crypto/Blake2sDigestTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2sDigestTest.java
index cd6494a400..6cb64e3982 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/Blake2sDigestTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2sDigestTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.util.StringUtils;
 import org.junit.Test;
 
@@ -8,7 +8,7 @@ import java.util.Random;
 
 import static org.junit.Assert.assertArrayEquals;
 
-public class Blake2sDigestTest extends BriarTestCase {
+public class Blake2sDigestTest extends BrambleTestCase {
 
 	// Vectors from BLAKE2 web site: https://blake2.net/blake2s-test.txt
 	private static final String[][] keyedTestVectors = {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
index 241e57c6ae..ac55112ddc 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 import org.spongycastle.asn1.teletrust.TeleTrusTNamedCurves;
 import org.spongycastle.asn1.x9.X9ECParameters;
@@ -20,7 +20,7 @@ import java.security.SecureRandom;
 import static org.briarproject.bramble.crypto.EllipticCurveConstants.PARAMETERS;
 import static org.junit.Assert.assertEquals;
 
-public class EllipticCurveMultiplicationTest extends BriarTestCase {
+public class EllipticCurveMultiplicationTest extends BrambleTestCase {
 
 	@Test
 	public void testMultiplierProducesSameResultsAsDefault() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
index b9e695eda6..ec166c3449 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
@@ -69,7 +69,7 @@ public class EllipticCurvePerformanceTest {
 		ECPublicKeyParameters public2 =
 				(ECPublicKeyParameters) keyPair2.getPublic();
 		// Time some ECDH key agreements
-		List<Long> samples = new ArrayList<>();
+		List<Long> samples = new ArrayList<Long>();
 		for (int i = 0; i < SAMPLES; i++) {
 			ECDHCBasicAgreement agreement = new ECDHCBasicAgreement();
 			long start = System.nanoTime();
@@ -79,7 +79,7 @@ public class EllipticCurvePerformanceTest {
 		}
 		long agreementMedian = median(samples);
 		// Time some signatures
-		List<byte[]> signatures = new ArrayList<>();
+		List<byte[]> signatures = new ArrayList<byte[]>();
 		samples.clear();
 		for (int i = 0; i < SAMPLES; i++) {
 			Digest digest = new Blake2sDigest();
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/FortunaGeneratorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
index 44f986b7e6..b7c84534bd 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 import org.spongycastle.crypto.BlockCipher;
 import org.spongycastle.crypto.engines.AESLightEngine;
@@ -9,7 +9,7 @@ import org.spongycastle.crypto.params.KeyParameter;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class FortunaGeneratorTest extends BriarTestCase {
+public class FortunaGeneratorTest extends BrambleTestCase {
 
 	@Test
 	public void testCounterInitialisedToOne() {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
index 6e789aa7fe..ed8d00eee1 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 import org.spongycastle.crypto.BlockCipher;
 import org.spongycastle.crypto.digests.SHA256Digest;
@@ -13,7 +13,7 @@ import static org.briarproject.bramble.crypto.FortunaSecureRandom.SELF_TEST_VECT
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertTrue;
 
-public class FortunaSecureRandomTest extends BriarTestCase {
+public class FortunaSecureRandomTest extends BrambleTestCase {
 
 	@Test
 	public void testClassPassesSelfTest() {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/KeyAgreementTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java
similarity index 90%
rename from briar-tests/src/org/briarproject/bramble/crypto/KeyAgreementTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java
index 00cb0e7982..31d24411d0 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/KeyAgreementTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -10,7 +10,7 @@ import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
 
-public class KeyAgreementTest extends BriarTestCase {
+public class KeyAgreementTest extends BrambleTestCase {
 
 	@Test
 	public void testDeriveMasterSecret() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/KeyDerivationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyDerivationTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/crypto/KeyDerivationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyDerivationTest.java
index 3d80762e06..607c99ab83 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/KeyDerivationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyDerivationTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.api.plugin.TransportId;
@@ -16,7 +16,7 @@ import java.util.List;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertFalse;
 
-public class KeyDerivationTest extends BriarTestCase {
+public class KeyDerivationTest extends BrambleTestCase {
 
 	private final TransportId transportId = new TransportId("id");
 	private final CryptoComponent crypto;
@@ -141,7 +141,7 @@ public class KeyDerivationTest extends BriarTestCase {
 	}
 
 	private void assertAllDifferent(TransportKeys... transportKeys) {
-		List<SecretKey> secretKeys = new ArrayList<>();
+		List<SecretKey> secretKeys = new ArrayList<SecretKey>();
 		for (TransportKeys k : transportKeys) {
 			secretKeys.add(k.getPreviousIncomingKeys().getTagKey());
 			secretKeys.add(k.getPreviousIncomingKeys().getHeaderKey());
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
index 350354bf0e..30e2a803e9 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.briarproject.bramble.api.crypto.KeyParser;
 import org.briarproject.bramble.api.crypto.PrivateKey;
@@ -16,7 +16,7 @@ import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATUR
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertTrue;
 
-public class KeyEncodingAndParsingTest extends BriarTestCase {
+public class KeyEncodingAndParsingTest extends BrambleTestCase {
 
 	private final CryptoComponentImpl crypto =
 			new CryptoComponentImpl(new TestSeedProvider());
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/MacTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MacTest.java
similarity index 90%
rename from briar-tests/src/org/briarproject/bramble/crypto/MacTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/MacTest.java
index 8b9e59bab4..54b4ac9aa6 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/MacTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MacTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.junit.Test;
@@ -12,7 +12,7 @@ import java.util.Arrays;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertFalse;
 
-public class MacTest extends BriarTestCase {
+public class MacTest extends BrambleTestCase {
 
 	private final CryptoComponent crypto;
 
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/MessageEncrypterTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java
similarity index 92%
rename from briar-tests/src/org/briarproject/bramble/crypto/MessageEncrypterTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java
index ea36d9ca36..6123b1403a 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/MessageEncrypterTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.briarproject.bramble.api.crypto.PrivateKey;
 import org.briarproject.bramble.api.crypto.PublicKey;
@@ -11,7 +11,7 @@ import java.security.SecureRandom;
 
 import static org.junit.Assert.assertArrayEquals;
 
-public class MessageEncrypterTest extends BriarTestCase {
+public class MessageEncrypterTest extends BrambleTestCase {
 
 	private final SecureRandom random = new SecureRandom();
 
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
similarity index 89%
rename from briar-tests/src/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
index 5d070af0d0..c58d39ba83 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.junit.Test;
 
 import java.util.Random;
@@ -12,7 +12,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class PasswordBasedKdfTest extends BriarTestCase {
+public class PasswordBasedKdfTest extends BrambleTestCase {
 
 	private final CryptoComponentImpl crypto =
 			new CryptoComponentImpl(new TestSeedProvider());
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
similarity index 88%
rename from briar-tests/src/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
index 3eea773aa4..0b86262896 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
@@ -1,13 +1,13 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
 import org.junit.Test;
 
 import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_STRONG;
 import static org.junit.Assert.assertTrue;
 
-public class PasswordStrengthEstimatorImplTest extends BriarTestCase {
+public class PasswordStrengthEstimatorImplTest extends BrambleTestCase {
 
 	@Test
 	public void testWeakPasswords() {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/SignatureTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/SignatureTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/crypto/SignatureTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/SignatureTest.java
index 7971809ddc..b2d64aad19 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/SignatureTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/SignatureTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.junit.Test;
@@ -13,7 +13,7 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class SignatureTest extends BriarTestCase {
+public class SignatureTest extends BrambleTestCase {
 
 	private final CryptoComponent crypto;
 
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
index 50d6c10c2b..f3cefc1363 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.util.ByteUtils;
 import org.junit.Test;
@@ -18,7 +18,7 @@ import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_H
 import static org.briarproject.bramble.util.ByteUtils.INT_16_BYTES;
 import static org.junit.Assert.assertArrayEquals;
 
-public class StreamDecrypterImplTest extends BriarTestCase {
+public class StreamDecrypterImplTest extends BrambleTestCase {
 
 	private final AuthenticatedCipher cipher;
 	private final SecretKey streamHeaderKey, frameKey;
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
index bb542662c5..d0d9fd3a4a 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.junit.Test;
 
@@ -13,7 +13,7 @@ import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_H
 import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
 import static org.junit.Assert.assertArrayEquals;
 
-public class StreamEncrypterImplTest extends BriarTestCase {
+public class StreamEncrypterImplTest extends BrambleTestCase {
 
 	private final AuthenticatedCipher cipher;
 	private final SecretKey streamHeaderKey, frameKey;
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java
similarity index 100%
rename from briar-tests/src/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
index 8c19201f9f..6dbfa85b34 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.util.StringUtils;
 import org.junit.Test;
@@ -11,7 +11,7 @@ import java.util.Random;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class XSalsa20Poly1305AuthenticatedCipherTest extends BriarTestCase {
+public class XSalsa20Poly1305AuthenticatedCipherTest extends BrambleTestCase {
 
 	// Test vectors from the NaCl paper
 	// http://cr.yp.to/highspeed/naclcrypto-20090310.pdf
diff --git a/briar-tests/src/org/briarproject/bramble/data/BdfReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/bramble/data/BdfReaderImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java
index 7520fdebd3..df658a551e 100644
--- a/briar-tests/src/org/briarproject/bramble/data/BdfReaderImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.data;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.data.BdfDictionary;
 import org.briarproject.bramble.api.data.BdfList;
@@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class BdfReaderImplTest extends BriarTestCase {
+public class BdfReaderImplTest extends BrambleTestCase {
 
 	private BdfReaderImpl r = null;
 
diff --git a/briar-tests/src/org/briarproject/bramble/data/BdfWriterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfWriterImplTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/data/BdfWriterImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/data/BdfWriterImplTest.java
index c2856e5b0d..478a047e77 100644
--- a/briar-tests/src/org/briarproject/bramble/data/BdfWriterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfWriterImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.data;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.util.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
@@ -16,7 +16,7 @@ import java.util.Map;
 import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE;
 import static org.junit.Assert.assertArrayEquals;
 
-public class BdfWriterImplTest extends BriarTestCase {
+public class BdfWriterImplTest extends BrambleTestCase {
 
 	private ByteArrayOutputStream out = null;
 	private BdfWriterImpl w = null;
@@ -155,7 +155,7 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testWriteList() throws IOException {
-		List<Object> l = new ArrayList<>();
+		List<Object> l = new ArrayList<Object>();
 		for (int i = 0; i < 3; i++) l.add(i);
 		w.writeList(l);
 		// LIST tag, elements as integers, END tag
@@ -164,7 +164,7 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testListCanContainNull() throws IOException {
-		List<Object> l = new ArrayList<>();
+		List<Object> l = new ArrayList<Object>();
 		l.add(1);
 		l.add(null);
 		l.add(NULL_VALUE);
@@ -177,7 +177,7 @@ public class BdfWriterImplTest extends BriarTestCase {
 	@Test
 	public void testWriteDictionary() throws IOException {
 		// Use LinkedHashMap to get predictable iteration order
-		Map<String, Object> m = new LinkedHashMap<>();
+		Map<String, Object> m = new LinkedHashMap<String, Object>();
 		for (int i = 0; i < 4; i++) m.put(String.valueOf(i), i);
 		w.writeDictionary(m);
 		// DICTIONARY tag, keys as strings and values as integers, END tag
@@ -216,12 +216,12 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testWriteNestedDictionariesAndLists() throws IOException {
-		Map<String, Object> inner = new LinkedHashMap<>();
+		Map<String, Object> inner = new LinkedHashMap<String, Object>();
 		inner.put("bar", new byte[0]);
-		List<Object> list = new ArrayList<>();
+		List<Object> list = new ArrayList<Object>();
 		list.add(1);
 		list.add(inner);
-		Map<String, Object> outer = new LinkedHashMap<>();
+		Map<String, Object> outer = new LinkedHashMap<String, Object>();
 		outer.put("foo", list);
 		w.writeDictionary(outer);
 		// DICTIONARY tag, "foo" as string, LIST tag, 1 as integer,
diff --git a/briar-tests/src/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
similarity index 90%
rename from briar-tests/src/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
index 953c99a1fd..9d43ae8e5f 100644
--- a/briar-tests/src/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.data;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.data.BdfDictionary;
 import org.briarproject.bramble.api.db.Metadata;
@@ -15,7 +15,7 @@ import java.util.Map;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class MetadataEncoderParserIntegrationTest extends BriarTestCase {
+public class MetadataEncoderParserIntegrationTest extends BrambleTestCase {
 
 	private MetadataEncoderImpl e;
 	private MetadataParserImpl p;
@@ -99,7 +99,7 @@ public class MetadataEncoderParserIntegrationTest extends BriarTestCase {
 
 	@Test
 	public void testList() throws FormatException {
-		List<Long> l = new ArrayList<>(4);
+		List<Long> l = new ArrayList<Long>(4);
 		l.add(42L);
 		l.add(1337L);
 		l.add(Long.MIN_VALUE);
@@ -114,7 +114,7 @@ public class MetadataEncoderParserIntegrationTest extends BriarTestCase {
 
 	@Test
 	public void testDictionary() throws FormatException {
-		Map<String, Boolean> m = new HashMap<>();
+		Map<String, Boolean> m = new HashMap<String, Boolean>();
 		m.put("1", true);
 		m.put("2", false);
 
@@ -130,19 +130,19 @@ public class MetadataEncoderParserIntegrationTest extends BriarTestCase {
 
 	@Test
 	public void testComplexDictionary() throws FormatException {
-		Map<String, List> m = new HashMap<>();
-		List<String> one = new ArrayList<>(3);
+		Map<String, List> m = new HashMap<String, List>();
+		List<String> one = new ArrayList<String>(3);
 		one.add("\uFDD0");
 		one.add("\uFDD1");
 		one.add("\uFDD2");
 		m.put("One", one);
-		List<String> two = new ArrayList<>(2);
+		List<String> two = new ArrayList<String>(2);
 		two.add("\u0080");
 		two.add("\uD800\uDC00");
 		m.put("Two", two);
 		d.put("test", m);
 
-		Map<String, Boolean> m2 = new HashMap<>();
+		Map<String, Boolean> m2 = new HashMap<String, Boolean>();
 		m2.put("should be true", true);
 		d.put("another test", m2);
 
diff --git a/briar-tests/src/org/briarproject/bramble/db/BasicH2Test.java b/bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/db/BasicH2Test.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java
index a5658ed956..85de68c80d 100644
--- a/briar-tests/src/org/briarproject/bramble/db/BasicH2Test.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class BasicH2Test extends BriarTestCase {
+public class BasicH2Test extends BrambleTestCase {
 
 	private static final String CREATE_TABLE =
 			"CREATE TABLE foo (uniqueId BINARY(32), name VARCHAR NOT NULL)";
@@ -322,7 +322,7 @@ public class BasicH2Test extends BriarTestCase {
 
 	private List<String> getNames() throws SQLException {
 		String sql = "SELECT name FROM foo ORDER BY uniqueId";
-		List<String> names = new ArrayList<>();
+		List<String> names = new ArrayList<String>();
 		try {
 			PreparedStatement ps = connection.prepareStatement(sql);
 			ResultSet rs = ps.executeQuery();
diff --git a/briar-tests/src/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/bramble/db/DatabaseComponentImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
index 62b7cc0834..62d0f83673 100644
--- a/briar-tests/src/org/briarproject/bramble/db/DatabaseComponentImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.event.ContactAddedEvent;
@@ -72,7 +72,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
-public class DatabaseComponentImplTest extends BriarTestCase {
+public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	private final Object txn = new Object();
 	private final ClientId clientId;
@@ -118,8 +118,8 @@ public class DatabaseComponentImplTest extends BriarTestCase {
 
 	private DatabaseComponent createDatabaseComponent(Database<Object> database,
 			EventBus eventBus, ShutdownManager shutdown) {
-		return new DatabaseComponentImpl<>(database, Object.class, eventBus,
-				shutdown);
+		return new DatabaseComponentImpl<Object>(database, Object.class,
+				eventBus, shutdown);
 	}
 
 	@Test
@@ -1701,7 +1701,7 @@ public class DatabaseComponentImplTest extends BriarTestCase {
 		Transaction transaction = db.startTransaction(false);
 		try {
 			db.addLocalMessage(transaction, message, metadata, true);
-			Collection<MessageId> dependencies = new ArrayList<>(2);
+			Collection<MessageId> dependencies = new ArrayList<MessageId>(2);
 			dependencies.add(messageId1);
 			dependencies.add(messageId2);
 			db.addMessageDependencies(transaction, message, dependencies);
diff --git a/briar-tests/src/org/briarproject/bramble/db/ExponentialBackoffTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/ExponentialBackoffTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/db/ExponentialBackoffTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/ExponentialBackoffTest.java
index 376d7e54a7..e60cb5b437 100644
--- a/briar-tests/src/org/briarproject/bramble/db/ExponentialBackoffTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/ExponentialBackoffTest.java
@@ -1,11 +1,11 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-public class ExponentialBackoffTest extends BriarTestCase {
+public class ExponentialBackoffTest extends BrambleTestCase {
 
 	private static final int ONE_HOUR = 60 * 60 * 1000;
 
diff --git a/briar-tests/src/org/briarproject/bramble/db/H2DatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/bramble/db/H2DatabaseTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
index faf91edcd4..adffded9fa 100644
--- a/briar-tests/src/org/briarproject/bramble/db/H2DatabaseTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
@@ -1,8 +1,7 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestDatabaseConfig;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -24,6 +23,7 @@ import org.briarproject.bramble.api.transport.IncomingKeys;
 import org.briarproject.bramble.api.transport.OutgoingKeys;
 import org.briarproject.bramble.api.transport.TransportKeys;
 import org.briarproject.bramble.system.SystemClock;
+import org.briarproject.bramble.TestDatabaseConfig;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -61,7 +61,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class H2DatabaseTest extends BriarTestCase {
+public class H2DatabaseTest extends BrambleTestCase {
 
 	private static final int ONE_MEGABYTE = 1024 * 1024;
 	private static final int MAX_SIZE = 5 * ONE_MEGABYTE;
@@ -868,7 +868,7 @@ public class H2DatabaseTest extends BriarTestCase {
 		assertEquals(0, db.countOfferedMessages(txn, contactId));
 
 		// Add some offered messages and count them
-		List<MessageId> ids = new ArrayList<>();
+		List<MessageId> ids = new ArrayList<MessageId>();
 		for (int i = 0; i < 10; i++) {
 			MessageId m = new MessageId(TestUtils.getRandomId());
 			db.addOfferedMessage(txn, contactId, m);
diff --git a/briar-tests/src/org/briarproject/bramble/db/LockFairnessTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/db/LockFairnessTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
index 947e802bd4..3d4ff414a9 100644
--- a/briar-tests/src/org/briarproject/bramble/db/LockFairnessTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import java.util.concurrent.CountDownLatch;
@@ -12,7 +12,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class LockFairnessTest extends BriarTestCase {
+public class LockFairnessTest extends BrambleTestCase {
 
 	@Test
 	public void testReadersCanShareTheLock() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/db/TransactionIsolationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/TransactionIsolationTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/db/TransactionIsolationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/TransactionIsolationTest.java
index 77b849b60e..4226f2af5b 100644
--- a/briar-tests/src/org/briarproject/bramble/db/TransactionIsolationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/TransactionIsolationTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -19,7 +19,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class TransactionIsolationTest extends BriarTestCase {
+public class TransactionIsolationTest extends BrambleTestCase {
 
 	private static final String DROP_TABLE = "DROP TABLE foo IF EXISTS";
 	private static final String CREATE_TABLE = "CREATE TABLE foo"
diff --git a/briar-tests/src/org/briarproject/bramble/identity/IdentityManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/identity/IdentityManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
index f35044b079..35e8ffa705 100644
--- a/briar-tests/src/org/briarproject/bramble/identity/IdentityManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.identity;
 
-import org.briarproject.BriarMockTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleMockTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.db.DatabaseComponent;
@@ -24,7 +24,7 @@ import static org.briarproject.bramble.api.identity.Author.Status.UNVERIFIED;
 import static org.briarproject.bramble.api.identity.Author.Status.VERIFIED;
 import static org.junit.Assert.assertEquals;
 
-public class IdentityManagerImplTest extends BriarMockTestCase {
+public class IdentityManagerImplTest extends BrambleMockTestCase {
 
 	private final IdentityManager identityManager;
 	private final DatabaseComponent db = context.mock(DatabaseComponent.class);
@@ -79,7 +79,7 @@ public class IdentityManagerImplTest extends BriarMockTestCase {
 	@Test
 	public void testGetAuthorStatus() throws DbException {
 		final AuthorId authorId = new AuthorId(TestUtils.getRandomId());
-		final Collection<Contact> contacts = new ArrayList<>();
+		final Collection<Contact> contacts = new ArrayList<Contact>();
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
diff --git a/briar-tests/src/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
index 8efc0f535c..0eab6958ca 100644
--- a/briar-tests/src/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.keyagreement;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.briarproject.bramble.api.crypto.PublicKey;
@@ -20,7 +20,7 @@ import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 
-public class KeyAgreementProtocolTest extends BriarTestCase {
+public class KeyAgreementProtocolTest extends BrambleTestCase {
 
 	@Rule
 	public JUnitRuleMockery context = new JUnitRuleMockery() {{
diff --git a/briar-tests/src/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
similarity index 84%
rename from briar-tests/src/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
index 7fb1598542..9249bb4be7 100644
--- a/briar-tests/src/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.lifecycle;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.lifecycle.ShutdownManager;
 import org.junit.Test;
 
@@ -10,12 +10,12 @@ import java.util.Set;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class ShutdownManagerImplTest extends BriarTestCase {
+public class ShutdownManagerImplTest extends BrambleTestCase {
 
 	@Test
 	public void testAddAndRemove() {
 		ShutdownManager s = createShutdownManager();
-		Set<Integer> handles = new HashSet<>();
+		Set<Integer> handles = new HashSet<Integer>();
 		for (int i = 0; i < 100; i++) {
 			int handle = s.addShutdownHook(new Runnable() {
 				@Override
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/BackoffImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/BackoffImplTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/plugin/BackoffImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/BackoffImplTest.java
index 894dc4e480..d356b86aac 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/BackoffImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/BackoffImplTest.java
@@ -1,12 +1,12 @@
 package org.briarproject.bramble.plugin;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class BackoffImplTest extends BriarTestCase {
+public class BackoffImplTest extends BrambleTestCase {
 
 	private static final int MIN_INTERVAL = 60 * 1000;
 	private static final int MAX_INTERVAL = 60 * 60 * 1000;
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
index c455cd82f6..9bc1895970 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.plugin.ConnectionRegistry;
@@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class ConnectionRegistryImplTest extends BriarTestCase {
+public class ConnectionRegistryImplTest extends BrambleTestCase {
 
 	private final ContactId contactId, contactId1;
 	private final TransportId transportId, transportId1;
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/PluginManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/plugin/PluginManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
index ad4e4b665f..f4c6e650dc 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/PluginManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.plugin.ConnectionManager;
 import org.briarproject.bramble.api.plugin.PluginConfig;
@@ -23,7 +23,7 @@ import java.util.Arrays;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
-public class PluginManagerImplTest extends BriarTestCase {
+public class PluginManagerImplTest extends BrambleTestCase {
 
 	@Test
 	public void testStartAndStop() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/PollerTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/plugin/PollerTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
index 3cdbcf8a67..15c48fb147 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/PollerTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.plugin;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.RunAction;
+import org.briarproject.bramble.RunAction;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.ImmediateExecutor;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.event.ContactStatusChangedEvent;
 import org.briarproject.bramble.api.plugin.ConnectionManager;
@@ -32,7 +32,7 @@ import java.util.concurrent.ScheduledExecutorService;
 
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 
-public class PollerTest extends BriarTestCase {
+public class PollerTest extends BrambleTestCase {
 
 	private final ContactId contactId = new ContactId(234);
 	private final int pollingInterval = 60 * 1000;
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
index cd8e31d647..401d0da617 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin.tcp;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.data.BdfList;
 import org.briarproject.bramble.api.keyagreement.KeyAgreementConnection;
@@ -39,7 +39,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-public class LanTcpPluginTest extends BriarTestCase {
+public class LanTcpPluginTest extends BrambleTestCase {
 
 	private final ContactId contactId = new ContactId(234);
 	private final Backoff backoff = new TestBackoff();
@@ -194,7 +194,8 @@ public class LanTcpPluginTest extends BriarTestCase {
 				plugin.createKeyAgreementListener(new byte[COMMIT_LENGTH]);
 		assertNotNull(kal);
 		Callable<KeyAgreementConnection> c = kal.listen();
-		FutureTask<KeyAgreementConnection> f = new FutureTask<>(c);
+		FutureTask<KeyAgreementConnection> f =
+				new FutureTask<KeyAgreementConnection>(c);
 		new Thread(f).start();
 		// The plugin should have bound a socket and stored the port number
 		BdfList descriptor = kal.getDescriptor();
@@ -290,7 +291,7 @@ public class LanTcpPluginTest extends BriarTestCase {
 	private static class Callback implements DuplexPluginCallback {
 
 		private final Map<ContactId, TransportProperties> remote =
-				new Hashtable<>();
+				new Hashtable<ContactId, TransportProperties>();
 		private final CountDownLatch propertiesLatch = new CountDownLatch(1);
 		private final CountDownLatch connectionsLatch = new CountDownLatch(1);
 		private final TransportProperties local = new TransportProperties();
diff --git a/briar-tests/src/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
similarity index 60%
rename from briar-tests/src/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
index 510b2a98e3..9271772d5b 100644
--- a/briar-tests/src/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
@@ -1,11 +1,11 @@
 package org.briarproject.bramble.properties;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
 
-public class TransportPropertyManagerImplTest extends BriarTestCase {
+public class TransportPropertyManagerImplTest extends BrambleTestCase {
 
 	@Test
 	public void testUnitTestsExist() {
diff --git a/briar-tests/src/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
index 3a67bb7f87..267d962e6c 100644
--- a/briar-tests/src/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.properties;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
@@ -23,7 +23,7 @@ import static org.briarproject.bramble.api.plugin.TransportId.MAX_TRANSPORT_ID_L
 import static org.briarproject.bramble.api.properties.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT;
 import static org.junit.Assert.assertEquals;
 
-public class TransportPropertyValidatorTest extends BriarTestCase {
+public class TransportPropertyValidatorTest extends BrambleTestCase {
 
 	private final TransportId transportId;
 	private final BdfDictionary bdfDictionary;
diff --git a/briar-tests/src/org/briarproject/bramble/sync/PacketReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/PacketReaderImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/sync/PacketReaderImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/sync/PacketReaderImplTest.java
index 1652208d67..1f380e77d5 100644
--- a/briar-tests/src/org/briarproject/bramble/sync/PacketReaderImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/PacketReaderImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.util.ByteUtils;
@@ -17,7 +17,7 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD
 import static org.briarproject.bramble.api.sync.SyncConstants.PACKET_HEADER_LENGTH;
 import static org.junit.Assert.assertEquals;
 
-public class PacketReaderImplTest extends BriarTestCase {
+public class PacketReaderImplTest extends BrambleTestCase {
 
 	@Test(expected = FormatException.class)
 	public void testFormatExceptionIfAckIsTooLarge() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
index d9c58531e2..6dc90f0fd3 100644
--- a/briar-tests/src/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.ImmediateExecutor;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.db.DatabaseComponent;
 import org.briarproject.bramble.api.db.Transaction;
@@ -20,7 +20,7 @@ import java.util.concurrent.Executor;
 
 import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS;
 
-public class SimplexOutgoingSessionTest extends BriarTestCase {
+public class SimplexOutgoingSessionTest extends BrambleTestCase {
 
 	private final Mockery context;
 	private final DatabaseComponent db;
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
index f97d3fe32a..ceb5144308 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -39,7 +39,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class SyncIntegrationTest extends BriarTestCase {
+public class SyncIntegrationTest extends BrambleTestCase {
 
 	@Inject
 	GroupFactory groupFactory;
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
index 456911d54f..67155b40ce 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.crypto.CryptoModule;
 import org.briarproject.bramble.transport.TransportModule;
 
diff --git a/briar-tests/src/org/briarproject/bramble/sync/ValidationManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/sync/ValidationManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
index a436e8977f..a7cb067c6f 100644
--- a/briar-tests/src/org/briarproject/bramble/sync/ValidationManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.ImmediateExecutor;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.db.DatabaseComponent;
@@ -38,7 +38,7 @@ import static org.briarproject.bramble.api.sync.ValidationManager.State.INVALID;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.PENDING;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.UNKNOWN;
 
-public class ValidationManagerImplTest extends BriarTestCase {
+public class ValidationManagerImplTest extends BrambleTestCase {
 
 	private final ClientId clientId =
 			new ClientId(TestUtils.getRandomString(5));
@@ -831,7 +831,8 @@ public class ValidationManagerImplTest extends BriarTestCase {
 				context.mock(IncomingMessageHook.class);
 		final MessageId messageId3 = new MessageId(TestUtils.getRandomId());
 		final MessageId messageId4 = new MessageId(TestUtils.getRandomId());
-		final Map<MessageId, State> twoDependents = new LinkedHashMap<>();
+		final Map<MessageId, State> twoDependents =
+				new LinkedHashMap<MessageId, State>();
 		twoDependents.put(messageId1, PENDING);
 		twoDependents.put(messageId2, PENDING);
 		final Transaction txn = new Transaction(null, true);
@@ -952,10 +953,12 @@ public class ValidationManagerImplTest extends BriarTestCase {
 				raw);
 		final Message message4 = new Message(messageId4, groupId, timestamp,
 				raw);
-		final Map<MessageId, State> twoDependents = new LinkedHashMap<>();
+		final Map<MessageId, State> twoDependents =
+				new LinkedHashMap<MessageId, State>();
 		twoDependents.put(messageId1, PENDING);
 		twoDependents.put(messageId2, PENDING);
-		final Map<MessageId, State> twoDependencies = new LinkedHashMap<>();
+		final Map<MessageId, State> twoDependencies =
+				new LinkedHashMap<MessageId, State>();
 		twoDependencies.put(messageId1, DELIVERED);
 		twoDependencies.put(messageId2, DELIVERED);
 		final Transaction txn = new Transaction(null, true);
@@ -1117,7 +1120,8 @@ public class ValidationManagerImplTest extends BriarTestCase {
 		final MessageValidator validator = context.mock(MessageValidator.class);
 		final IncomingMessageHook hook =
 				context.mock(IncomingMessageHook.class);
-		final Map<MessageId, State> twoDependencies = new LinkedHashMap<>();
+		final Map<MessageId, State> twoDependencies =
+				new LinkedHashMap<MessageId, State>();
 		twoDependencies.put(messageId, DELIVERED);
 		twoDependencies.put(messageId2, UNKNOWN);
 		final Transaction txn = new Transaction(null, true);
diff --git a/briar-tests/src/org/briarproject/bramble/system/LinuxSeedProviderTest.java b/bramble-core/src/test/java/org/briarproject/bramble/system/LinuxSeedProviderTest.java
similarity index 92%
rename from briar-tests/src/org/briarproject/bramble/system/LinuxSeedProviderTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/system/LinuxSeedProviderTest.java
index ad9affb9a7..b4db19bad1 100644
--- a/briar-tests/src/org/briarproject/bramble/system/LinuxSeedProviderTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/system/LinuxSeedProviderTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.system;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.util.OsUtils;
 import org.junit.After;
@@ -18,7 +18,7 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class LinuxSeedProviderTest extends BriarTestCase {
+public class LinuxSeedProviderTest extends BrambleTestCase {
 
 	private final File testDir = TestUtils.getTestDirectory();
 
@@ -33,7 +33,7 @@ public class LinuxSeedProviderTest extends BriarTestCase {
 			System.err.println("WARNING: Skipping test, can't run on this OS");
 			return;
 		}
-		Set<Bytes> seeds = new HashSet<>();
+		Set<Bytes> seeds = new HashSet<Bytes>();
 		LinuxSeedProvider p = new LinuxSeedProvider();
 		for (int i = 0; i < 1000; i++) {
 			byte[] seed = p.getSeed();
diff --git a/briar-tests/src/org/briarproject/bramble/transport/KeyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/transport/KeyManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
index d3de3b87ae..d4eed7a535 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/KeyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
@@ -24,13 +24,13 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getSecretKey;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getSecretKey;
 import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
 import static org.junit.Assert.assertEquals;
 
-public class KeyManagerImplTest extends BriarTestCase {
+public class KeyManagerImplTest extends BrambleTestCase {
 
 	private final Mockery context = new Mockery();
 	private final KeyManagerImpl keyManager;
@@ -63,7 +63,7 @@ public class KeyManagerImplTest extends BriarTestCase {
 		Author remoteAuthor = new Author(remoteAuthorId, "author",
 				getRandomBytes(42));
 		AuthorId localAuthorId = new AuthorId(getRandomId());
-		final Collection<Contact> contacts = new ArrayList<>();
+		final Collection<Contact> contacts = new ArrayList<Contact>();
 		contacts.add(new Contact(contactId, remoteAuthor, localAuthorId, true,
 				true));
 		contacts.add(new Contact(inactiveContactId, remoteAuthor, localAuthorId,
diff --git a/briar-tests/src/org/briarproject/bramble/transport/ReorderingWindowTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/ReorderingWindowTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/transport/ReorderingWindowTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/ReorderingWindowTest.java
index 827ba97e28..83b24340f2 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/ReorderingWindowTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/ReorderingWindowTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.transport.ReorderingWindow.Change;
 import org.junit.Test;
 
@@ -12,7 +12,7 @@ import static org.briarproject.bramble.api.transport.TransportConstants.REORDERI
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class ReorderingWindowTest extends BriarTestCase {
+public class ReorderingWindowTest extends BrambleTestCase {
 
 	private static final int BITMAP_BYTES = REORDERING_WINDOW_SIZE / 8;
 
diff --git a/briar-tests/src/org/briarproject/bramble/transport/StreamReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/transport/StreamReaderImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
index cd01b5779c..6423988313 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/StreamReaderImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.StreamDecrypter;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -9,7 +9,7 @@ import org.junit.Test;
 import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
 import static org.junit.Assert.assertEquals;
 
-public class StreamReaderImplTest extends BriarTestCase {
+public class StreamReaderImplTest extends BrambleTestCase {
 
 	@Test
 	public void testEmptyFramesAreSkipped() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
similarity index 93%
rename from briar-tests/src/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
index 8292f804f3..85214cacb1 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.StreamDecrypter;
 import org.briarproject.bramble.api.crypto.StreamEncrypter;
 import org.junit.Test;
@@ -19,7 +19,7 @@ import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENG
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class StreamReaderWriterIntegrationTest extends BriarTestCase {
+public class StreamReaderWriterIntegrationTest extends BrambleTestCase {
 
 	@Test
 	public void testWriteAndRead() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/transport/StreamWriterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/transport/StreamWriterImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
index 01e9c7c0e9..c7d7a16d6c 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/StreamWriterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.StreamEncrypter;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -9,7 +9,7 @@ import org.junit.Test;
 import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
 import static org.junit.Assert.assertEquals;
 
-public class StreamWriterImplTest extends BriarTestCase {
+public class StreamWriterImplTest extends BrambleTestCase {
 
 	@Test
 	public void testCloseWithoutWritingWritesFinalFrame() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/transport/TestStreamDecrypter.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/TestStreamDecrypter.java
similarity index 100%
rename from briar-tests/src/org/briarproject/bramble/transport/TestStreamDecrypter.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/TestStreamDecrypter.java
diff --git a/briar-tests/src/org/briarproject/bramble/transport/TestStreamEncrypter.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/TestStreamEncrypter.java
similarity index 100%
rename from briar-tests/src/org/briarproject/bramble/transport/TestStreamEncrypter.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/TestStreamEncrypter.java
diff --git a/briar-tests/src/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
index 71e646bf98..6bce11a838 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.RunAction;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.RunAction;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -40,7 +40,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
-public class TransportKeyManagerImplTest extends BriarTestCase {
+public class TransportKeyManagerImplTest extends BrambleTestCase {
 
 	private final TransportId transportId = new TransportId("id");
 	private final long maxLatency = 30 * 1000; // 30 seconds
@@ -62,7 +62,8 @@ public class TransportKeyManagerImplTest extends BriarTestCase {
 				context.mock(ScheduledExecutorService.class);
 		final Clock clock = context.mock(Clock.class);
 
-		final Map<ContactId, TransportKeys> loaded = new LinkedHashMap<>();
+		final Map<ContactId, TransportKeys> loaded =
+				new LinkedHashMap<ContactId, TransportKeys>();
 		final TransportKeys shouldRotate = createTransportKeys(900, 0);
 		final TransportKeys shouldNotRotate = createTransportKeys(1000, 0);
 		loaded.put(contactId, shouldRotate);
@@ -341,7 +342,7 @@ public class TransportKeyManagerImplTest extends BriarTestCase {
 		final boolean alice = true;
 		final TransportKeys transportKeys = createTransportKeys(1000, 0);
 		// Keep a copy of the tags
-		final List<byte[]> tags = new ArrayList<>();
+		final List<byte[]> tags = new ArrayList<byte[]>();
 		final Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
diff --git a/briar-tests/src/org/briarproject/bramble/util/ByteUtilsTest.java b/bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/util/ByteUtilsTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java
index 54eebbce12..a4fda13b8c 100644
--- a/briar-tests/src/org/briarproject/bramble/util/ByteUtilsTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.util;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.briarproject.bramble.util.ByteUtils.MAX_16_BIT_UNSIGNED;
@@ -8,7 +8,7 @@ import static org.briarproject.bramble.util.ByteUtils.MAX_32_BIT_UNSIGNED;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
-public class ByteUtilsTest extends BriarTestCase {
+public class ByteUtilsTest extends BrambleTestCase {
 
 	@Test
 	public void testReadUint16() {
diff --git a/briar-tests/src/org/briarproject/bramble/util/StringUtilsTest.java b/bramble-core/src/test/java/org/briarproject/bramble/util/StringUtilsTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/util/StringUtilsTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/util/StringUtilsTest.java
index 0814db6111..140d654a4b 100644
--- a/briar-tests/src/org/briarproject/bramble/util/StringUtilsTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/util/StringUtilsTest.java
@@ -1,13 +1,13 @@
 package org.briarproject.bramble.util;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
 
-public class StringUtilsTest extends BriarTestCase {
+public class StringUtilsTest extends BrambleTestCase {
 
 	@Test
 	public void testToHexString() {
diff --git a/bramble-j2se/build.gradle b/bramble-j2se/build.gradle
index d61f5dcdcd..5a874f7d9c 100644
--- a/bramble-j2se/build.gradle
+++ b/bramble-j2se/build.gradle
@@ -7,4 +7,10 @@ apply plugin: 'witness'
 dependencies {
 	compile project(':bramble-core')
 	compile fileTree(dir: 'libs', include: '*.jar')
+
+	testCompile project(path: ':bramble-core', configuration: 'testOutput')
+}
+
+tasks.withType(Test) {
+	systemProperty 'java.library.path', 'libs'
 }
diff --git a/briar-tests/src/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java
similarity index 100%
rename from briar-tests/src/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
similarity index 88%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
index 9de331d42f..26afffe3b9 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
@@ -1,11 +1,11 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-public class LinuxRemovableDriveFinderTest extends BriarTestCase {
+public class LinuxRemovableDriveFinderTest extends BrambleTestCase {
 
 	@Test
 	public void testParseMountPoint() {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
similarity index 87%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
index 3050581d5d..fbbddca405 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
@@ -1,11 +1,11 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-public class MacRemovableDriveFinderTest extends BriarTestCase {
+public class MacRemovableDriveFinderTest extends BrambleTestCase {
 
 	@Test
 	public void testParseMountPoint() {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
index d2bd29cd4e..a58fc2a533 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.plugin.file.RemovableDriveMonitor.Callback;
 import org.junit.Test;
@@ -21,7 +21,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class PollingRemovableDriveMonitorTest extends BriarTestCase {
+public class PollingRemovableDriveMonitorTest extends BrambleTestCase {
 
 	@Test
 	public void testOneCallbackPerFile() throws Exception {
@@ -41,7 +41,7 @@ public class PollingRemovableDriveMonitorTest extends BriarTestCase {
 		};
 		// Create a callback that waits for two files
 		final CountDownLatch latch = new CountDownLatch(2);
-		final List<File> detected = new ArrayList<>();
+		final List<File> detected = new ArrayList<File>();
 		@NotNullByDefault
 		Callback callback = new Callback() {
 
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
index 25a2a1b16b..d803b0a50e 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.ImmediateExecutor;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
 import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
@@ -29,7 +29,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class RemovableDrivePluginTest extends BriarTestCase {
+public class RemovableDrivePluginTest extends BrambleTestCase {
 
 	private final File testDir = TestUtils.getTestDirectory();
 	private final ContactId contactId = new ContactId(234);
@@ -73,7 +73,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWriterIsNullIfNoDriveIsChosen() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 
@@ -112,7 +112,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWriterIsNullIfOutputDirDoesNotExist() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 
@@ -151,7 +151,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWriterIsNullIfOutputDirIsAFile() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a file rather than a directory
@@ -192,7 +192,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWriterIsNotNullIfOutputDirIsADir() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a directory
@@ -236,7 +236,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWritingToWriter() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a directory
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
similarity index 93%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
index 6b49f7d703..83d26f1df3 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.plugin.file.RemovableDriveMonitor.Callback;
 import org.briarproject.bramble.util.OsUtils;
@@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class UnixRemovableDriveMonitorTest extends BriarTestCase {
+public class UnixRemovableDriveMonitorTest extends BrambleTestCase {
 
 	private final File testDir = TestUtils.getTestDirectory();
 
@@ -61,7 +61,7 @@ public class UnixRemovableDriveMonitorTest extends BriarTestCase {
 			return;
 		}
 		// Create a callback that will wait for two files before stopping
-		final List<File> detected = new ArrayList<>();
+		final List<File> detected = new ArrayList<File>();
 		final CountDownLatch latch = new CountDownLatch(2);
 		@NotNullByDefault
 		final Callback callback = new Callback() {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/modem/CountryCodesTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
index 35aea6e15c..02b0456994 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
@@ -1,12 +1,12 @@
 package org.briarproject.bramble.plugin.modem;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
-public class CountryCodesTest extends BriarTestCase {
+public class CountryCodesTest extends BrambleTestCase {
 
 	@Test
 	public void testTranslation() {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/modem/ModemPluginTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
index d50a54fae9..64df9fce6f 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin.modem;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
 import org.briarproject.bramble.api.properties.TransportProperties;
@@ -16,7 +16,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class ModemPluginTest extends BriarTestCase {
+public class ModemPluginTest extends BrambleTestCase {
 
 	private static final String ISO_1336 = "GB";
 	private static final String NUMBER = "0123456789";
diff --git a/briar-android/build.gradle b/briar-android/build.gradle
index ab370acc6b..5d24464bab 100644
--- a/briar-android/build.gradle
+++ b/briar-android/build.gradle
@@ -30,14 +30,13 @@ dependencies {
 	compile 'info.guardianproject.trustedintents:trustedintents:0.2'
 	compile 'de.hdodenhof:circleimageview:2.1.0'
 	compile 'com.google.zxing:core:3.2.1'
-	apt 'com.google.dagger:dagger-compiler:2.0.2'
+	apt 'com.google.dagger:dagger-compiler:2.8'
 	provided 'javax.annotation:jsr250-api:1.0'
 	compile 'com.jpardogo.materialtabstrip:library:1.1.0'
 	compile 'com.github.bumptech.glide:glide:3.7.0'
 	compile 'uk.co.samuelwall:material-tap-target-prompt:1.3.0'
 
-	testCompile 'junit:junit:4.12'
-	testCompile project(path: ':briar-tests')
+	testCompile project(path: ':bramble-core', configuration: 'testOutput')
 	testCompile 'org.robolectric:robolectric:3.0'
 	testCompile 'org.mockito:mockito-core:1.10.19'
 }
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
index 6b4d135b4b..11810fb1ca 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
@@ -4,7 +4,7 @@ import android.content.Intent;
 
 import junit.framework.Assert;
 
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.identity.Author;
 import org.briarproject.bramble.api.identity.AuthorId;
diff --git a/briar-core/.gitignore b/briar-core/.gitignore
index eeb02632a0..217c03c152 100644
--- a/briar-core/.gitignore
+++ b/briar-core/.gitignore
@@ -1,3 +1,4 @@
 bin
 build
+test.tmp
 .settings
diff --git a/briar-core/build.gradle b/briar-core/build.gradle
index d75100870a..74691734ca 100644
--- a/briar-core/build.gradle
+++ b/briar-core/build.gradle
@@ -16,11 +16,10 @@ dependencies {
 	compile 'com.squareup.okhttp3:okhttp:3.3.1'
 	compile 'org.jsoup:jsoup:1.9.2'
 
-	testCompile project(':briar-tests') // TODO remove when moving unit tests (#778)
-	testCompile 'junit:junit:4.12'
+	testCompile project(':bramble-core') // TODO get rid of this dependency
+
+	testCompile project(path: ':bramble-api', configuration: 'testOutput')
 	testCompile 'net.jodah:concurrentunit:0.4.2'
-	testCompile 'com.google.dagger:dagger-compiler:2.8'
-	testApt 'com.google.dagger:dagger-compiler:2.8'
 }
 
 dependencyVerification {
diff --git a/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTest.java
index a03603046a..454d79ebc3 100644
--- a/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTest.java
@@ -2,8 +2,7 @@ package org.briarproject.briar;
 
 import net.jodah.concurrentunit.Waiter;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.client.ContactGroupFactory;
 import org.briarproject.bramble.api.contact.Contact;
@@ -60,11 +59,11 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import static junit.framework.Assert.assertNotNull;
-import static org.briarproject.TestPluginConfigModule.MAX_LATENCY;
-import static org.briarproject.TestUtils.getSecretKey;
+import static org.briarproject.bramble.TestUtils.getSecretKey;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.DELIVERED;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.INVALID;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.PENDING;
+import static org.briarproject.briar.TestPluginConfigModule.MAX_LATENCY;
 import static org.junit.Assert.assertTrue;
 
 @MethodsNotNullByDefault
diff --git a/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTestComponent.java
index dc76b46426..1a39d901a7 100644
--- a/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTestComponent.java
@@ -1,8 +1,7 @@
 package org.briarproject.briar;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestPluginConfigModule;
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.db.DatabaseComponent;
diff --git a/briar-core/src/test/java/org/briarproject/briar/BriarTestCase.java b/briar-core/src/test/java/org/briarproject/briar/BriarTestCase.java
new file mode 100644
index 0000000000..5523fdd0a9
--- /dev/null
+++ b/briar-core/src/test/java/org/briarproject/briar/BriarTestCase.java
@@ -0,0 +1,11 @@
+package org.briarproject.briar;
+
+import org.briarproject.bramble.BrambleTestCase;
+
+public abstract class BriarTestCase extends BrambleTestCase {
+
+	public BriarTestCase() {
+		super();
+	}
+
+}
diff --git a/briar-core/src/test/java/org/briarproject/briar/BriarTestUtils.java b/briar-core/src/test/java/org/briarproject/briar/BriarTestUtils.java
new file mode 100644
index 0000000000..5aa297b130
--- /dev/null
+++ b/briar-core/src/test/java/org/briarproject/briar/BriarTestUtils.java
@@ -0,0 +1,28 @@
+package org.briarproject.briar;
+
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.api.client.MessageTracker;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+
+import static org.junit.Assert.assertEquals;
+
+public class BriarTestUtils {
+
+	public static void assertGroupCount(MessageTracker tracker, GroupId g,
+			long msgCount, long unreadCount, long latestMsgTime)
+			throws DbException {
+		GroupCount groupCount = tracker.getGroupCount(g);
+		assertEquals(msgCount, groupCount.getMsgCount());
+		assertEquals(unreadCount, groupCount.getUnreadCount());
+		assertEquals(latestMsgTime, groupCount.getLatestMsgTime());
+	}
+
+	public static void assertGroupCount(MessageTracker tracker, GroupId g,
+			long msgCount, long unreadCount) throws	DbException {
+		GroupCount c1 = tracker.getGroupCount(g);
+		assertEquals(msgCount, c1.getMsgCount());
+		assertEquals(unreadCount, c1.getUnreadCount());
+	}
+
+}
diff --git a/briar-tests/src/org/briarproject/CaptureArgumentAction.java b/briar-core/src/test/java/org/briarproject/briar/CaptureArgumentAction.java
similarity index 96%
rename from briar-tests/src/org/briarproject/CaptureArgumentAction.java
rename to briar-core/src/test/java/org/briarproject/briar/CaptureArgumentAction.java
index 6fda69885a..34a5788fc9 100644
--- a/briar-tests/src/org/briarproject/CaptureArgumentAction.java
+++ b/briar-core/src/test/java/org/briarproject/briar/CaptureArgumentAction.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.briar;
 
 import org.hamcrest.Description;
 import org.jmock.api.Action;
diff --git a/briar-tests/src/org/briarproject/TestLifecycleModule.java b/briar-core/src/test/java/org/briarproject/briar/TestLifecycleModule.java
similarity index 98%
rename from briar-tests/src/org/briarproject/TestLifecycleModule.java
rename to briar-core/src/test/java/org/briarproject/briar/TestLifecycleModule.java
index 8f8c9030b2..7344aaf4b4 100644
--- a/briar-tests/src/org/briarproject/TestLifecycleModule.java
+++ b/briar-core/src/test/java/org/briarproject/briar/TestLifecycleModule.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.briar;
 
 import org.briarproject.bramble.api.lifecycle.IoExecutor;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
diff --git a/briar-tests/src/org/briarproject/TestPluginConfigModule.java b/briar-core/src/test/java/org/briarproject/briar/TestPluginConfigModule.java
similarity index 97%
rename from briar-tests/src/org/briarproject/TestPluginConfigModule.java
rename to briar-core/src/test/java/org/briarproject/briar/TestPluginConfigModule.java
index 416d5f1085..ae5a4a2e35 100644
--- a/briar-tests/src/org/briarproject/TestPluginConfigModule.java
+++ b/briar-core/src/test/java/org/briarproject/briar/TestPluginConfigModule.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.briar;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.plugin.PluginConfig;
diff --git a/briar-tests/src/org/briarproject/briar/blog/BlogManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/briar/blog/BlogManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
index 3430dc3990..ee2a275226 100644
--- a/briar-tests/src/org/briarproject/briar/blog/BlogManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.blog;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.briar.BriarTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.Contact;
@@ -34,8 +34,8 @@ import org.junit.Test;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.identity.Author.Status.VERIFIED;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
index 85a2659d09..8feaeaa4e6 100644
--- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.blog;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.briar.BriarIntegrationTest;
@@ -21,7 +21,7 @@ import java.util.Iterator;
 
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertNotNull;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.briar.api.blog.MessageType.COMMENT;
 import static org.briarproject.briar.api.blog.MessageType.POST;
 import static org.briarproject.briar.api.blog.MessageType.WRAPPED_COMMENT;
diff --git a/briar-tests/src/org/briarproject/briar/blog/BlogPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/blog/BlogPostValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
index 56c8999bd9..8bc1c865cc 100644
--- a/briar-tests/src/org/briarproject/briar/blog/BlogPostValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.blog;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
diff --git a/briar-tests/src/org/briarproject/briar/client/MessageQueueManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/briar/client/MessageQueueManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
index 2c38258e2a..0398163611 100644
--- a/briar-tests/src/org/briarproject/briar/client/MessageQueueManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.briar.client;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.CaptureArgumentAction;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.briar.CaptureArgumentAction;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
 import org.briarproject.bramble.api.data.BdfList;
@@ -130,7 +130,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 				context.mock(ValidationManager.class);
 
 		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
+				new AtomicReference<MessageValidator>();
 		final QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
 		// The message is too short to be a valid queue message
@@ -141,7 +141,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
 					with(any(MessageValidator.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<MessageValidator>(captured,
 					MessageValidator.class, 1));
 		}});
 
@@ -174,7 +174,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 				context.mock(ValidationManager.class);
 
 		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
+				new AtomicReference<MessageValidator>();
 		final QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
 		// The message has a negative queue position
@@ -187,7 +187,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
 					with(any(MessageValidator.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<MessageValidator>(captured,
 					MessageValidator.class, 1));
 		}});
 
@@ -220,7 +220,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 				context.mock(ValidationManager.class);
 
 		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
+				new AtomicReference<MessageValidator>();
 		final QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
 		final Metadata metadata = new Metadata();
@@ -234,7 +234,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
 					with(any(MessageValidator.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<MessageValidator>(captured,
 					MessageValidator.class, 1));
 			// The message should be delegated
 			oneOf(queueMessageValidator).validateMessage(
@@ -267,7 +267,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		final ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
+				new AtomicReference<IncomingMessageHook>();
 		final IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
@@ -283,7 +283,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
 					with(any(IncomingMessageHook.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<IncomingMessageHook>(captured,
 					IncomingMessageHook.class, 1));
 			oneOf(db).getGroupMetadata(txn, groupId);
 			will(returnValue(groupMetadata));
@@ -319,7 +319,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		final ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
+				new AtomicReference<IncomingMessageHook>();
 		final IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
@@ -337,7 +337,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
 					with(any(IncomingMessageHook.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<IncomingMessageHook>(captured,
 					IncomingMessageHook.class, 1));
 			oneOf(db).getGroupMetadata(txn, groupId);
 			will(returnValue(groupMetadata));
@@ -375,7 +375,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		final ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
+				new AtomicReference<IncomingMessageHook>();
 		final IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
@@ -392,7 +392,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
 					with(any(IncomingMessageHook.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<IncomingMessageHook>(captured,
 					IncomingMessageHook.class, 1));
 			oneOf(db).getGroupMetadata(txn, groupId);
 			will(returnValue(groupMetadata));
@@ -433,7 +433,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		final ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
+				new AtomicReference<IncomingMessageHook>();
 		final IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
@@ -457,7 +457,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
 					with(any(IncomingMessageHook.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<IncomingMessageHook>(captured,
 					IncomingMessageHook.class, 1));
 			oneOf(db).getGroupMetadata(txn, groupId);
 			will(returnValue(groupMetadata));
diff --git a/briar-tests/src/org/briarproject/briar/client/MessageTreeImplTest.java b/briar-core/src/test/java/org/briarproject/briar/client/MessageTreeImplTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/briar/client/MessageTreeImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/client/MessageTreeImplTest.java
index e35af03566..87c8f5a54b 100644
--- a/briar-tests/src/org/briarproject/briar/client/MessageTreeImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/client/MessageTreeImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.client;
 
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.briar.api.client.MessageTree;
@@ -19,7 +19,7 @@ public class MessageTreeImplTest {
 
 	@Test
 	public void testMessageTree() {
-		tree = new MessageTreeImpl<>();
+		tree = new MessageTreeImpl<TestNode>();
 		testSimpleTree();
 		tree.clear();
 		testSimpleTree();
diff --git a/briar-tests/src/org/briarproject/briar/forum/ForumManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerImplTest.java
similarity index 84%
rename from briar-tests/src/org/briarproject/briar/forum/ForumManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerImplTest.java
index 0a4a0ac6fd..f8a5b83548 100644
--- a/briar-tests/src/org/briarproject/briar/forum/ForumManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.forum;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.briar.BriarTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
diff --git a/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
index f4527089ca..f8a0f119d5 100644
--- a/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.forum;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.briar.BriarIntegrationTest;
 import org.briarproject.briar.BriarIntegrationTestComponent;
@@ -17,7 +17,7 @@ import java.util.Collection;
 
 import javax.annotation.Nullable;
 
-import static org.briarproject.TestUtils.assertGroupCount;
+import static org.briarproject.briar.BriarTestUtils.assertGroupCount;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
diff --git a/briar-tests/src/org/briarproject/briar/forum/ForumPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/forum/ForumPostValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
index 4eacdc5033..0fe5758846 100644
--- a/briar-tests/src/org/briarproject/briar/forum/ForumPostValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.forum;
 
-import org.briarproject.TestUtils;
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.TestUtils;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.client.BdfMessageContext;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/IntroduceeManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/introduction/IntroduceeManagerTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
index c0de31ef2d..b424040ec5 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/IntroduceeManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/IntroducerManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/briar/introduction/IntroducerManagerTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
index 09c0474d91..1861eeef5a 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/IntroducerManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
index 80cd0c1581..8141dd0f4e 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
@@ -2,8 +2,8 @@ package org.briarproject.briar.introduction;
 
 import net.jodah.concurrentunit.Waiter;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.Contact;
@@ -51,8 +51,8 @@ import java.util.logging.Logger;
 
 import javax.inject.Inject;
 
-import static org.briarproject.TestPluginConfigModule.TRANSPORT_ID;
-import static org.briarproject.TestUtils.assertGroupCount;
+import static org.briarproject.briar.TestPluginConfigModule.TRANSPORT_ID;
+import static org.briarproject.briar.BriarTestUtils.assertGroupCount;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.briar.api.client.MessageQueueManager.QUEUE_STATE_KEY;
 import static org.briarproject.briar.api.introduction.IntroductionConstants.E_PUBLIC_KEY;
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
index ba3dcae6a1..7528bd1a3a 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
@@ -1,8 +1,8 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestPluginConfigModule;
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.briar.TestPluginConfigModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.client.ClientModule;
 import org.briarproject.bramble.contact.ContactModule;
 import org.briarproject.bramble.crypto.CryptoModule;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/IntroductionManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
index 6d9841e2c7..04566982fc 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.Contact;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/IntroductionValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/introduction/IntroductionValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
index 5678cc61c4..5ea72f4d37 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/IntroductionValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/MessageSenderTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/briar/introduction/MessageSenderTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
index 5c43548c43..194d24eff5 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/MessageSenderTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
index 348e829e4a..b7d522f39b 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
@@ -1,7 +1,6 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PrivateKey;
@@ -11,6 +10,7 @@ import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.bramble.system.SystemModule;
 import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.BriarTestCase;
 import org.briarproject.briar.api.forum.ForumConstants;
 import org.briarproject.briar.api.forum.ForumPost;
 import org.briarproject.briar.api.forum.ForumPostFactory;
@@ -20,7 +20,7 @@ import org.junit.Test;
 
 import javax.inject.Inject;
 
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
index 37ede53702..3019c0acaa 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
@@ -1,8 +1,8 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestLifecycleModule;
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.briar.TestLifecycleModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.client.ClientModule;
 import org.briarproject.bramble.crypto.CryptoModule;
 import org.briarproject.bramble.data.DataModule;
diff --git a/briar-tests/src/org/briarproject/briar/messaging/MessagingManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessagingManagerImplTest.java
similarity index 84%
rename from briar-tests/src/org/briarproject/briar/messaging/MessagingManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/messaging/MessagingManagerImplTest.java
index f6ac2bf66e..4aaf3e8ede 100644
--- a/briar-tests/src/org/briarproject/briar/messaging/MessagingManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessagingManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.briar.BriarTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
diff --git a/briar-tests/src/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
index 88b9fcf201..cb9c2af078 100644
--- a/briar-tests/src/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.TestUtils;
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.TestUtils;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.BdfMessageContext;
 import org.briarproject.bramble.api.data.BdfDictionary;
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java
index 098fdb11b7..023ec5c2a4 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java
@@ -1,8 +1,7 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -23,6 +22,7 @@ import org.briarproject.bramble.api.transport.StreamContext;
 import org.briarproject.bramble.api.transport.StreamReaderFactory;
 import org.briarproject.bramble.api.transport.StreamWriterFactory;
 import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.briar.BriarTestCase;
 import org.briarproject.briar.api.messaging.MessagingManager;
 import org.briarproject.briar.api.messaging.PrivateMessage;
 import org.briarproject.briar.api.messaging.PrivateMessageFactory;
@@ -36,10 +36,10 @@ import java.io.File;
 import java.io.InputStream;
 import java.io.OutputStream;
 
-import static org.briarproject.TestPluginConfigModule.MAX_LATENCY;
-import static org.briarproject.TestPluginConfigModule.TRANSPORT_ID;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
+import static org.briarproject.briar.TestPluginConfigModule.MAX_LATENCY;
+import static org.briarproject.briar.TestPluginConfigModule.TRANSPORT_ID;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
index 566c978306..a459316521 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
@@ -1,8 +1,8 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestPluginConfigModule;
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.briar.TestPluginConfigModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.identity.IdentityManager;
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java
index 249d46fad6..92addf7a97 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.sync.Group;
 import org.briarproject.briar.BriarIntegrationTest;
@@ -22,7 +22,7 @@ import java.util.Collection;
 
 import javax.annotation.Nullable;
 
-import static org.briarproject.TestUtils.assertGroupCount;
+import static org.briarproject.briar.BriarTestUtils.assertGroupCount;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
index 88650c06f2..e8e9bbb8cc 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup;
 
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.BdfMessageContext;
 import org.briarproject.bramble.api.data.BdfDictionary;
@@ -21,9 +21,9 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
index 19fb33f613..e9efabdf78 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.db.DbException;
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
index 0d680b8b2c..a6d8d0c28a 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.data.BdfList;
 import org.briarproject.bramble.api.db.Transaction;
@@ -21,8 +21,8 @@ import org.junit.Test;
 
 import java.util.Collection;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.identity.Author.Status.VERIFIED;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.briar.api.privategroup.Visibility.INVISIBLE;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
index f3bbccb495..69422fb832 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup.invitation;
 
-import org.briarproject.BriarMockTestCase;
+import org.briarproject.bramble.BrambleMockTestCase;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
@@ -23,8 +23,8 @@ import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
 import org.briarproject.briar.api.privategroup.PrivateGroupManager;
 import org.jmock.Expectations;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.briar.api.privategroup.PrivateGroupManager.*;
 import static org.briarproject.briar.privategroup.invitation.GroupInvitationConstants.GROUP_KEY_CONTACT_ID;
 import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT;
@@ -33,7 +33,7 @@ import static org.briarproject.briar.privategroup.invitation.MessageType.JOIN;
 import static org.briarproject.briar.privategroup.invitation.MessageType.LEAVE;
 import static org.junit.Assert.assertEquals;
 
-public abstract class AbstractProtocolEngineTest extends BriarMockTestCase {
+public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 
 	protected final DatabaseComponent db =
 			context.mock(DatabaseComponent.class);
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
index 4898951004..3456b263d1 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
@@ -5,7 +5,7 @@ import org.briarproject.briar.api.client.ProtocolStateException;
 import org.jmock.Expectations;
 import org.junit.Test;
 
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.briar.privategroup.invitation.CreatorState.DISSOLVED;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
index c1557b9404..4f7f242f90 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.privategroup.invitation;
 
-import org.briarproject.BriarMockTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleMockTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.client.ContactGroupFactory;
@@ -44,9 +44,9 @@ import java.util.Map;
 import javax.annotation.Nullable;
 
 import static junit.framework.TestCase.fail;
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.bramble.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROUP_SALT_LENGTH;
@@ -61,7 +61,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class GroupInvitationManagerImplTest extends BriarMockTestCase {
+public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	private final DatabaseComponent db = context.mock(DatabaseComponent.class);
 	private final ClientHelper clientHelper = context.mock(ClientHelper.class);
@@ -636,7 +636,8 @@ public class GroupInvitationManagerImplTest extends BriarMockTestCase {
 		final BdfDictionary query = BdfDictionary.of(new BdfEntry("q", "u"));
 		final MessageId messageId2 = new MessageId(TestUtils.getRandomId());
 		final BdfDictionary meta2 = BdfDictionary.of(new BdfEntry("m2", "e"));
-		final Map<MessageId, BdfDictionary> results = new HashMap<>();
+		final Map<MessageId, BdfDictionary> results =
+				new HashMap<MessageId, BdfDictionary>();
 		results.put(message.getId(), meta);
 		results.put(messageId2, meta2);
 		long time1 = 1L, time2 = 2L;
@@ -700,7 +701,8 @@ public class GroupInvitationManagerImplTest extends BriarMockTestCase {
 		final BdfDictionary query = BdfDictionary.of(new BdfEntry("q", "u"));
 		final MessageId messageId2 = new MessageId(TestUtils.getRandomId());
 		final BdfDictionary meta2 = BdfDictionary.of(new BdfEntry("m2", "e"));
-		final Map<MessageId, BdfDictionary> results = new HashMap<>();
+		final Map<MessageId, BdfDictionary> results =
+				new HashMap<MessageId, BdfDictionary>();
 		results.put(message.getId(), meta);
 		results.put(messageId2, meta2);
 		final Message message2 = new Message(messageId2, contactGroup.getId(),
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
index b230be881f..077208984c 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup.invitation;
 
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.client.BdfMessageContext;
@@ -18,9 +18,9 @@ import org.junit.Test;
 
 import java.security.GeneralSecurityException;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
index 1b7f763a05..d45ec461b7 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
@@ -17,8 +17,8 @@ import org.junit.Test;
 import java.util.Collections;
 import java.util.Map;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.bramble.api.sync.Group.Visibility.VISIBLE;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
index 0f88bbc964..00fac93a88 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
@@ -5,7 +5,7 @@ import org.briarproject.briar.api.client.ProtocolStateException;
 import org.jmock.Expectations;
 import org.junit.Test;
 
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.bramble.api.sync.Group.Visibility.VISIBLE;
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
index 40a225142c..58fc86ee2b 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
@@ -2,7 +2,7 @@ package org.briarproject.briar.sharing;
 
 import net.jodah.concurrentunit.Waiter;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.db.NoSuchGroupException;
@@ -30,7 +30,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import static org.briarproject.TestUtils.assertGroupCount;
+import static org.briarproject.briar.BriarTestUtils.assertGroupCount;
 import static org.briarproject.briar.api.blog.BlogSharingManager.CLIENT_ID;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
index e5845d7cce..8e6c2dcb44 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
@@ -2,7 +2,7 @@ package org.briarproject.briar.sharing;
 
 import net.jodah.concurrentunit.Waiter;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.data.BdfList;
@@ -39,8 +39,8 @@ import java.util.Collection;
 import java.util.List;
 
 import static junit.framework.Assert.assertNotNull;
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.briar.api.forum.ForumConstants.FORUM_SALT_LENGTH;
 import static org.briarproject.briar.api.forum.ForumSharingManager.CLIENT_ID;
 import static org.briarproject.briar.api.sharing.SharingConstants.SHARE_MSG_TYPE_INVITATION;
diff --git a/briar-tests/src/org/briarproject/briar/sharing/ForumSharingValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
index 7c8423e2ad..104a1962d4 100644
--- a/briar-tests/src/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.sharing;
 
-import org.briarproject.TestUtils;
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.TestUtils;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.client.BdfMessageContext;
diff --git a/briar-tests/src/org/briarproject/briar/sharing/SharingManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/SharingManagerImplTest.java
similarity index 84%
rename from briar-tests/src/org/briarproject/briar/sharing/SharingManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/sharing/SharingManagerImplTest.java
index 10306c4f52..b29ddbab65 100644
--- a/briar-tests/src/org/briarproject/briar/sharing/SharingManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/SharingManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.sharing;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.briar.BriarTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
diff --git a/briar-tests/.gitignore b/briar-tests/.gitignore
deleted file mode 100644
index eeb02632a0..0000000000
--- a/briar-tests/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-build
-.settings
diff --git a/briar-tests/build.gradle b/briar-tests/build.gradle
deleted file mode 100644
index 3100969668..0000000000
--- a/briar-tests/build.gradle
+++ /dev/null
@@ -1,43 +0,0 @@
-apply plugin: 'java'
-sourceCompatibility = 1.7
-targetCompatibility = 1.7
-
-apply plugin: 'witness'
-
-dependencies {
-	compile project(':briar-core')
-	compile project(':bramble-j2se')
-	compile "junit:junit:4.12"
-	compile "org.jmock:jmock:2.8.1"
-	compile "org.jmock:jmock-junit4:2.8.1"
-	compile "org.jmock:jmock-legacy:2.8.1"
-	compile "org.hamcrest:hamcrest-library:1.3"
-	compile "org.hamcrest:hamcrest-core:1.3"
-}
-
-dependencyVerification {
-	verify = [
-			'junit:junit:59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a',
-			'org.jmock:jmock:75d4bdaf636879f0215830c5e6ab99407069a625eaffde5d57b32d887b75dc14',
-			'org.jmock:jmock-junit4:81e3fff46ed56738a6f3f5147525d1d85cda591ce5df007cc193e735cee31113',
-			'org.jmock:jmock-legacy:19c76059eb254775ba884fc8039bc5c7d1700dc68cc55ad3be5b405a2a8a1819',
-			'org.jmock:jmock-testjar:c3642147a5980771dde19d5f1d782d4790a7f9b1521bf9c8cd2b4c23f6384730',
-			'org.hamcrest:hamcrest-library:711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c',
-			'org.hamcrest:hamcrest-core:66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9',
-			'cglib:cglib-nodep:3a9ab1f5de15b49dedc7e96d35363c4c43a2b2cd42275f5d4731846042f3fcf2',
-			'org.ow2.asm:asm:71c4f78e437b8fdcd9cc0dfd2abea8c089eb677005a6a5cff320206cc52b46cc',
-			'org.beanshell:bsh:9b04edc75d19db54f1b4e8b5355e9364384c6cf71eb0a1b9724c159d779879f8',
-			'org.objenesis:objenesis:c74330cc6b806c804fd37e74487b4fe5d7c2750c5e15fbc6efa13bdee1bdef80',
-	]
-}
-
-sourceSets {
-	main.java.srcDirs = ['src']
-	main.resources.srcDirs = ['src']
-	test.java.srcDirs = ['src']
-	test.resources.srcDirs = ['src']
-}
-
-tasks.withType(Test) {
-	systemProperty 'java.library.path', '../bramble-j2se/libs'
-}
diff --git a/briar-tests/src/.gitignore b/briar-tests/src/.gitignore
deleted file mode 100644
index 94260a3506..0000000000
--- a/briar-tests/src/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build
-test.tmp
diff --git a/settings.gradle b/settings.gradle
index d66211a06f..de661574c2 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -3,5 +3,4 @@ include ':bramble-core'
 include ':bramble-j2se'
 include ':briar-api'
 include ':briar-core'
-include ':briar-tests'
 include ':briar-android'
-- 
GitLab