diff --git a/.idea/runConfigurations/TestWithTwoConnectedTemporaryAccountsKt.xml b/.idea/runConfigurations/TestWithTwoConnectedTemporaryAccountsKt.xml new file mode 100644 index 0000000000000000000000000000000000000000..7e3e061296b889ece7a8cb15d59c93a092ab1c9b --- /dev/null +++ b/.idea/runConfigurations/TestWithTwoConnectedTemporaryAccountsKt.xml @@ -0,0 +1,10 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="TestWithTwoConnectedTemporaryAccountsKt" type="JetRunConfigurationType" nameIsGenerated="true"> + <option name="MAIN_CLASS_NAME" value="org.briarproject.briar.desktop.TestWithTwoConnectedTemporaryAccountsKt" /> + <module name="briar-desktop.test" /> + <shortenClasspath name="NONE" /> + <method v="2"> + <option name="Make" enabled="true" /> + </method> + </configuration> +</component> \ No newline at end of file diff --git a/.idea/runConfigurations/TestWithTwoTemporaryAccountsKt.xml b/.idea/runConfigurations/TestWithTwoTemporaryAccountsKt.xml new file mode 100644 index 0000000000000000000000000000000000000000..297d2ae45b062faa0af96043cb385979a0fed399 --- /dev/null +++ b/.idea/runConfigurations/TestWithTwoTemporaryAccountsKt.xml @@ -0,0 +1,10 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="TestWithTwoTemporaryAccountsKt" type="JetRunConfigurationType" nameIsGenerated="true"> + <option name="MAIN_CLASS_NAME" value="org.briarproject.briar.desktop.TestWithTwoTemporaryAccountsKt" /> + <module name="briar-desktop.test" /> + <shortenClasspath name="NONE" /> + <method v="2"> + <option name="Make" enabled="true" /> + </method> + </configuration> +</component> \ No newline at end of file diff --git a/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt b/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt index 04210dd0cc272d44d2b1d4f6b02cde6e1d4f0ef1..775f69eaed2e6c5af03e08197c1f2fdb4cdc5083 100644 --- a/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt +++ b/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt @@ -4,6 +4,7 @@ import dagger.Component import org.briarproject.bramble.BrambleCoreEagerSingletons import org.briarproject.bramble.BrambleCoreModule import org.briarproject.bramble.api.account.AccountManager +import org.briarproject.bramble.api.contact.ContactManager import org.briarproject.bramble.api.lifecycle.LifecycleManager import org.briarproject.bramble.api.lifecycle.ShutdownManager import org.briarproject.briar.BriarCoreEagerSingletons @@ -26,6 +27,8 @@ internal interface BriarDesktopTestApp : BrambleCoreEagerSingletons, BriarCoreEa fun getBriarUi(): BriarUi + fun getContactManager(): ContactManager + fun getSecureRandom(): SecureRandom fun getLifecycleManager(): LifecycleManager diff --git a/src/test/kotlin/org/briarproject/briar/desktop/RunWithMultipleTemporaryAccounts.kt b/src/test/kotlin/org/briarproject/briar/desktop/RunWithMultipleTemporaryAccounts.kt new file mode 100644 index 0000000000000000000000000000000000000000..2747c4277f8249375fd7647c231c034ee2e4e12d --- /dev/null +++ b/src/test/kotlin/org/briarproject/briar/desktop/RunWithMultipleTemporaryAccounts.kt @@ -0,0 +1,87 @@ +package org.briarproject.briar.desktop + +import androidx.compose.runtime.Composable +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.window.ApplicationScope +import androidx.compose.ui.window.application +import org.briarproject.bramble.BrambleCoreEagerSingletons +import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT +import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT +import org.briarproject.briar.BriarCoreEagerSingletons +import org.briarproject.briar.desktop.TestUtils.getDataDir +import java.util.logging.Level.INFO +import java.util.logging.LogManager +import java.util.logging.Logger + +internal class RunWithMultipleTemporaryAccounts( + private val names: List<String>, + val customization: List<BriarDesktopTestApp>.() -> Unit +) { + + companion object { + private val LOG = Logger.getLogger(RunWithMultipleTemporaryAccounts::class.java.name) + } + + private val apps = mutableListOf<BriarDesktopTestApp>() + + @OptIn(ExperimentalComposeUiApi::class) + fun run() { + LogManager.getLogManager().getLogger("").level = INFO + + for (i in names.indices) { + val name = names[i] + val app = app(name, DEFAULT_SOCKS_PORT + 2 * i, DEFAULT_CONTROL_PORT + 2 * i) + apps.add(app) + } + + customization(apps) + + application { + for (app in apps) { + start(app, this) + } + } + } + + private fun app(name: String, socksPort: Int, controlPort: Int): BriarDesktopTestApp { + val dataDir = getDataDir() + LOG.info("Using data directory '$dataDir'") + + val app = + DaggerBriarDesktopTestApp.builder().desktopTestModule( + DesktopTestModule(dataDir, socksPort, controlPort) + ).build() + + app.getShutdownManager().addShutdownHook { + LOG.info("deleting temporary account at $dataDir") + org.apache.commons.io.FileUtils.deleteDirectory(dataDir.toFile()) + } + + // We need to load the eager singletons directly after making the + // dependency graphs + BrambleCoreEagerSingletons.Helper.injectEagerSingletons(app) + BriarCoreEagerSingletons.Helper.injectEagerSingletons(app) + + val lifecycleManager = app.getLifecycleManager() + val accountManager = app.getAccountManager() + + val password = "verySecret123!" + accountManager.createAccount(name, password) + + val dbKey = accountManager.databaseKey ?: throw AssertionError() + lifecycleManager.startServices(dbKey) + lifecycleManager.waitForStartup() + + return app + } + + @Composable + fun start(app: BriarDesktopTestApp, applicationScope: ApplicationScope) { + app.getBriarUi().start { + apps.forEach { + it.getBriarUi().stop() + } + applicationScope.exitApplication() + } + } +} diff --git a/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoConnectedTemporaryAccounts.kt b/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoConnectedTemporaryAccounts.kt new file mode 100644 index 0000000000000000000000000000000000000000..9c34fbbca3083b1ab1ea112b825f653183f8647e --- /dev/null +++ b/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoConnectedTemporaryAccounts.kt @@ -0,0 +1,11 @@ +package org.briarproject.briar.desktop + +fun main(args: Array<String>) = RunWithMultipleTemporaryAccounts(listOf("alice", "bob")) { + forEach { + it.getDeterministicTestDataCreator().createTestData(5, 20, 50) + } + val app1 = get(0) + val app2 = get(1) + app1.getContactManager().addPendingContact(app2.getContactManager().handshakeLink, "bob") + app2.getContactManager().addPendingContact(app1.getContactManager().handshakeLink, "alice") +}.run() diff --git a/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoTemporaryAccounts.kt b/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoTemporaryAccounts.kt index 72c6db6c9696d43123a28c72f7adf3ed7a9bab72..2cb86294a4ff5a2de7d53a08fde67e6459a21546 100644 --- a/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoTemporaryAccounts.kt +++ b/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoTemporaryAccounts.kt @@ -1,84 +1,7 @@ package org.briarproject.briar.desktop -import androidx.compose.runtime.Composable -import androidx.compose.ui.ExperimentalComposeUiApi -import androidx.compose.ui.window.ApplicationScope -import androidx.compose.ui.window.application -import org.briarproject.bramble.BrambleCoreEagerSingletons -import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT -import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT -import org.briarproject.briar.BriarCoreEagerSingletons -import org.briarproject.briar.desktop.TestUtils.getDataDir -import java.util.logging.Level.INFO -import java.util.logging.LogManager -import java.util.logging.Logger - -fun main(args: Array<String>) = TestWithTwoTemporaryAccounts().run() - -internal class TestWithTwoTemporaryAccounts() { - - companion object { - private val LOG = Logger.getLogger(TestWithTwoTemporaryAccounts::class.java.name) - } - - private val apps = mutableListOf<BriarDesktopTestApp>() - - @OptIn(ExperimentalComposeUiApi::class) - fun run() { - LogManager.getLogManager().getLogger("").level = INFO - - val app1 = app("alice", DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT) - val app2 = app("bob", DEFAULT_SOCKS_PORT + 2, DEFAULT_CONTROL_PORT + 2) - apps.add(app1) - apps.add(app2) - app1.getDeterministicTestDataCreator().createTestData(5, 20, 50) - app2.getDeterministicTestDataCreator().createTestData(5, 20, 50) - - application { - start(app1, this) - start(app2, this) - } - } - - private fun app(name: String, socksPort: Int, controlPort: Int): BriarDesktopTestApp { - val dataDir = getDataDir() - LOG.info("Using data directory '$dataDir'") - - val app = - DaggerBriarDesktopTestApp.builder().desktopTestModule( - DesktopTestModule(dataDir, socksPort, controlPort) - ).build() - - app.getShutdownManager().addShutdownHook { - LOG.info("deleting temporary account at $dataDir") - org.apache.commons.io.FileUtils.deleteDirectory(dataDir.toFile()) - } - - // We need to load the eager singletons directly after making the - // dependency graphs - BrambleCoreEagerSingletons.Helper.injectEagerSingletons(app) - BriarCoreEagerSingletons.Helper.injectEagerSingletons(app) - - val lifecycleManager = app.getLifecycleManager() - val accountManager = app.getAccountManager() - - val password = "verySecret123!" - accountManager.createAccount(name, password) - - val dbKey = accountManager.databaseKey ?: throw AssertionError() - lifecycleManager.startServices(dbKey) - lifecycleManager.waitForStartup() - - return app - } - - @Composable - fun start(app: BriarDesktopTestApp, applicationScope: ApplicationScope) { - app.getBriarUi().start { - apps.forEach { - it.getBriarUi().stop() - } - applicationScope.exitApplication() - } +fun main(args: Array<String>) = RunWithMultipleTemporaryAccounts(listOf("alice", "bob")) { + forEach { + it.getDeterministicTestDataCreator().createTestData(5, 20, 50) } -} +}.run()