From 6a94785d9a0bfcbb824f271c11024769edcded96 Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Tue, 20 Dec 2016 17:15:00 -0200 Subject: [PATCH] Mark invitation unavailable to answer when creator dissolved the group after the invitation. Closes #876 --- .../invitation/InviteeProtocolEngine.java | 2 ++ .../GroupInvitationIntegrationTest.java | 5 +++- .../invitation/InviteeProtocolEngineTest.java | 24 ++++++++++++------- 3 files changed, 21 insertions(+), 10 deletions(-) rename briar-core/src/test/java/org/briarproject/briar/privategroup/{ => invitation}/GroupInvitationIntegrationTest.java (98%) diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java index e89e57b538..e9dcac5086 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java @@ -269,6 +269,8 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> { // The dependency, if any, must be the last remote message if (!isValidDependency(s, m.getPreviousMessageId())) return abort(txn, s); + // Mark any invite messages in the session unavailable to answer + markInvitesUnavailableToAnswer(txn, s); // Move to the DISSOLVED state return new InviteeSession(s.getContactGroupId(), s.getPrivateGroupId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java similarity index 98% rename from briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 83eb59003f..7431ffe483 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -1,4 +1,4 @@ -package org.briarproject.briar.privategroup; +package org.briarproject.briar.privategroup.invitation; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.sync.Group; @@ -329,6 +329,9 @@ public class GroupInvitationIntegrationTest // Creator's leave message is delivered to invitee sync0To1(1, true); + // invitee should have no more open invitations + assertTrue(groupInvitationManager1.getInvitations().isEmpty()); + // Invitee declines invitation, but it's no longer open - no exception // as the action has succeeded assertEquals(0, groupManager1.getPrivateGroups().size()); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java index bc83f9053f..2e4c64ddb1 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java @@ -651,6 +651,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { assertTrue(session.getLastRemoteMessageId() .equals(properLeaveMessage.getPreviousMessageId())); + expectMarkInvitesUnavailableToAnswer(); InviteeSession newSession = engine.onLeaveMessage(txn, session, properLeaveMessage); @@ -680,6 +681,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { assertTrue(session.getLastRemoteMessageId() .equals(properLeaveMessage.getPreviousMessageId())); + expectMarkInvitesUnavailableToAnswer(); InviteeSession newSession = engine.onLeaveMessage(txn, session, properLeaveMessage); @@ -701,7 +703,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { public void testOnAbortMessageWhenNotSubscribed() throws Exception { InviteeSession session = getDefaultSession(START); - expectAbortWhenSubscribedToGroup(); + expectAbortWhenNotSubscribedToGroup(); InviteeSession newSession = engine.onAbortMessage(txn, session, abortMessage); assertSessionAborted(session, newSession); @@ -711,7 +713,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { public void testOnAbortMessageWhenSubscribed() throws Exception { InviteeSession session = getDefaultSession(START); - expectAbortWhenNotSubscribedToGroup(); + expectAbortWhenSubscribedToGroup(); InviteeSession newSession = engine.onAbortMessage(txn, session, abortMessage); assertSessionAborted(session, newSession); @@ -739,6 +741,17 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { } private void expectAbort(boolean subscribed) throws Exception { + expectMarkInvitesUnavailableToAnswer(); + if (subscribed) { + expectIsSubscribedPrivateGroup(); + expectSetPrivateGroupVisibility(INVISIBLE); + } else { + expectIsNotSubscribedPrivateGroup(); + } + expectSendAbortMessage(); + } + + private void expectMarkInvitesUnavailableToAnswer() throws Exception { final BdfDictionary query = BdfDictionary.of(new BdfEntry("query", "")); final BdfDictionary meta = BdfDictionary.of(new BdfEntry("meta", "")); final Map<MessageId, BdfDictionary> invites = @@ -752,13 +765,6 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { will(returnValue(invites)); }}); expectMarkMessageAvailableToAnswer(lastRemoteMessageId, false); - if (subscribed) { - expectIsSubscribedPrivateGroup(); - expectSetPrivateGroupVisibility(INVISIBLE); - } else { - expectIsNotSubscribedPrivateGroup(); - } - expectSendAbortMessage(); } private void assertSessionAborted(InviteeSession oldSession, -- GitLab