diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt index 9557b64d133914253ab90f17f091a6fab3519666..a1854e9fcd9dfadbc3beb975b653cb22c244c585 100644 --- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt +++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/BriarDesktopTestApp.kt @@ -36,6 +36,11 @@ import org.briarproject.briar.BriarCoreModule import org.briarproject.briar.api.forum.ForumManager import org.briarproject.briar.api.forum.ForumSharingManager import org.briarproject.briar.api.introduction.IntroductionManager +import org.briarproject.briar.api.privategroup.GroupMessageFactory +import org.briarproject.briar.api.privategroup.PrivateGroupFactory +import org.briarproject.briar.api.privategroup.PrivateGroupManager +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager import org.briarproject.briar.api.test.TestDataCreator import org.briarproject.briar.desktop.testdata.DeterministicTestDataCreator import org.briarproject.briar.desktop.threading.BriarExecutors @@ -87,4 +92,14 @@ internal interface BriarDesktopTestApp : BrambleCoreEagerSingletons, BriarCoreEa fun getForumManager(): ForumManager fun getForumSharingManager(): ForumSharingManager + + fun getPrivateGroupManager(): PrivateGroupManager + + fun getPrivateGroupFactory(): PrivateGroupFactory + + fun getGroupMessageFactory(): GroupMessageFactory + + fun getGroupInvitationManager(): GroupInvitationManager + + fun getGroupInvitationFactory(): GroupInvitationFactory } diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestUtils.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestUtils.kt index 20b2397b59fafe65d4f0a6cb69f581fcf6d8bee8..e8347b9cce5e8df403ad83342124f9c0debe69d1 100644 --- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestUtils.kt +++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestUtils.kt @@ -17,6 +17,7 @@ */ @file:Suppress("HardCodedStringLiteral") + package org.briarproject.briar.desktop import mu.KotlinLogging @@ -32,8 +33,11 @@ import org.briarproject.bramble.api.identity.LocalAuthor import org.briarproject.bramble.api.plugin.TransportId import org.briarproject.bramble.api.properties.TransportProperties import org.briarproject.bramble.api.versioning.event.ClientVersionUpdatedEvent +import org.briarproject.briar.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER import org.briarproject.briar.api.forum.ForumManager import org.briarproject.briar.api.forum.event.ForumInvitationRequestReceivedEvent +import org.briarproject.briar.api.privategroup.PrivateGroupManager +import org.briarproject.briar.api.privategroup.event.GroupInvitationRequestReceivedEvent import org.briarproject.briar.api.sharing.SharingManager.SharingStatus.SHAREABLE import org.briarproject.briar.desktop.utils.FileUtils import java.io.IOException @@ -157,8 +161,10 @@ object TestUtils { internal fun List<BriarDesktopTestApp>.createForumForAll() { if (isEmpty()) return - // create forum val creator = get(0) + val contacts = drop(1) + + // create forum val forum = creator.getForumManager().addForum("Shared Forum") // invite all contacts @@ -174,7 +180,7 @@ object TestUtils { } // accept invitation at all contacts - drop(1).forEach { app -> + contacts.forEach { app -> app.getEventBus().addListenerOnce { e -> if (e is ForumInvitationRequestReceivedEvent) { val contact = app.getContactManager().getContact(e.contactId) @@ -185,6 +191,52 @@ object TestUtils { } } } + + internal fun List<BriarDesktopTestApp>.createPrivateGroupForAll() { + if (isEmpty()) return + + val creator = get(0) + val contacts = drop(1) + + // create private group + val author = creator.getIdentityManager().localAuthor + val group = creator.getPrivateGroupFactory().createPrivateGroup("Shared Private Group", author) + val joinMsg = creator.getGroupMessageFactory().createJoinMessage( + group.id, System.currentTimeMillis(), author + ) + creator.getPrivateGroupManager().addPrivateGroup(group, joinMsg, true) + + // invite all contacts + creator.getEventBus().addListener { e -> + if (e is ClientVersionUpdatedEvent && e.clientVersion.clientId == PrivateGroupManager.CLIENT_ID) { + creator.getBriarExecutors().onDbThread { + val contact = creator.getContactManager().getContact(e.contactId) + val invitationManager = creator.getGroupInvitationManager() + if (invitationManager.getSharingStatus(contact, group.id) == SHAREABLE) { + val timestamp = System.currentTimeMillis() + val signature = creator.getGroupInvitationFactory().signInvitation( + contact, group.id, timestamp, author.privateKey + ) + invitationManager.sendInvitation( + group.id, e.contactId, null, + timestamp, signature, NO_AUTO_DELETE_TIMER + ) + } + } + } + } + + // accept invitation at all contacts + contacts.forEach { app -> + app.getEventBus().addListenerOnce { e -> + if (e is GroupInvitationRequestReceivedEvent) { + app.getGroupInvitationManager().respondToInvitation(e.contactId, group, true) + return@addListenerOnce true + } + false + } + } + } } fun EventBus.addListenerOnce(listener: (Event) -> Boolean) = diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestWithThreeConnectedTemporaryAccounts.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestWithThreeConnectedTemporaryAccounts.kt index db1857b22e2236f4c6914c97a4165f978187d82d..a7fdf339aeafdd061fb3a1d33ba66af598524f7b 100644 --- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestWithThreeConnectedTemporaryAccounts.kt +++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestWithThreeConnectedTemporaryAccounts.kt @@ -20,6 +20,7 @@ package org.briarproject.briar.desktop import org.briarproject.briar.desktop.TestUtils.connectAllInstantly import org.briarproject.briar.desktop.TestUtils.createForumForAll +import org.briarproject.briar.desktop.TestUtils.createPrivateGroupForAll fun main() = RunWithMultipleTemporaryAccounts(listOf("alice", "bob", "eve")) { // NON-NLS forEach { @@ -27,4 +28,5 @@ fun main() = RunWithMultipleTemporaryAccounts(listOf("alice", "bob", "eve")) { / } connectAllInstantly() createForumForAll() + createPrivateGroupForAll() }.run() diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoConnectedTemporaryAccounts.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoConnectedTemporaryAccounts.kt index c13c5e994369c29f0007acff8d7747bb60c7a31c..f37314b83297b55b9f3885e44af17319c5e629f1 100644 --- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoConnectedTemporaryAccounts.kt +++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoConnectedTemporaryAccounts.kt @@ -20,6 +20,7 @@ package org.briarproject.briar.desktop import org.briarproject.briar.desktop.TestUtils.connectAllInstantly import org.briarproject.briar.desktop.TestUtils.createForumForAll +import org.briarproject.briar.desktop.TestUtils.createPrivateGroupForAll fun main() = RunWithMultipleTemporaryAccounts(listOf("alice", "bob")) { // NON-NLS forEach { @@ -27,4 +28,5 @@ fun main() = RunWithMultipleTemporaryAccounts(listOf("alice", "bob")) { // NON-N } connectAllInstantly() createForumForAll() + createPrivateGroupForAll() }.run()