Skip to content
Snippets Groups Projects
Commit 4b0cf771 authored by Sebastian's avatar Sebastian
Browse files

Make multi-account tests customizable

Also, add another test that automatically connects both started app
instances.
parent eb95d660
No related branches found
No related tags found
1 merge request!35Make it possible to run multiple versions of briar-desktop concurrently
<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
<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
...@@ -4,6 +4,7 @@ import dagger.Component ...@@ -4,6 +4,7 @@ import dagger.Component
import org.briarproject.bramble.BrambleCoreEagerSingletons import org.briarproject.bramble.BrambleCoreEagerSingletons
import org.briarproject.bramble.BrambleCoreModule import org.briarproject.bramble.BrambleCoreModule
import org.briarproject.bramble.api.account.AccountManager 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.LifecycleManager
import org.briarproject.bramble.api.lifecycle.ShutdownManager import org.briarproject.bramble.api.lifecycle.ShutdownManager
import org.briarproject.briar.BriarCoreEagerSingletons import org.briarproject.briar.BriarCoreEagerSingletons
...@@ -26,6 +27,8 @@ internal interface BriarDesktopTestApp : BrambleCoreEagerSingletons, BriarCoreEa ...@@ -26,6 +27,8 @@ internal interface BriarDesktopTestApp : BrambleCoreEagerSingletons, BriarCoreEa
fun getBriarUi(): BriarUi fun getBriarUi(): BriarUi
fun getContactManager(): ContactManager
fun getSecureRandom(): SecureRandom fun getSecureRandom(): SecureRandom
fun getLifecycleManager(): LifecycleManager fun getLifecycleManager(): LifecycleManager
......
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()
}
}
}
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()
package org.briarproject.briar.desktop package org.briarproject.briar.desktop
import androidx.compose.runtime.Composable fun main(args: Array<String>) = RunWithMultipleTemporaryAccounts(listOf("alice", "bob")) {
import androidx.compose.ui.ExperimentalComposeUiApi forEach {
import androidx.compose.ui.window.ApplicationScope it.getDeterministicTestDataCreator().createTestData(5, 20, 50)
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()
}
} }
} }.run()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment