Update private group invitation client to include self-destruct timers.

This commit is contained in:
akwizgran
2020-11-23 15:42:39 +00:00
committed by Torsten Grote
parent fa745410cc
commit 3e1c2df4b1
23 changed files with 460 additions and 199 deletions

View File

@@ -22,8 +22,10 @@ import org.briarproject.briar.api.privategroup.GroupMessageFactory;
import org.briarproject.briar.api.privategroup.PrivateGroup;
import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
import org.briarproject.briar.api.privategroup.PrivateGroupManager;
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
import org.jmock.Expectations;
import static org.briarproject.bramble.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
import static org.briarproject.bramble.test.TestUtils.getContact;
@@ -35,8 +37,6 @@ import static org.briarproject.bramble.util.StringUtils.getRandomString;
import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROUP_SALT_LENGTH;
import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_TEXT_LENGTH;
import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH;
import static org.briarproject.briar.api.privategroup.PrivateGroupManager.CLIENT_ID;
import static org.briarproject.briar.api.privategroup.PrivateGroupManager.MAJOR_VERSION;
import static org.briarproject.briar.privategroup.invitation.GroupInvitationConstants.GROUP_KEY_CONTACT_ID;
import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT;
import static org.briarproject.briar.privategroup.invitation.MessageType.INVITE;
@@ -67,7 +67,8 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
final ContactId contactId = contact.getId();
final Author author = contact.getAuthor();
final GroupId contactGroupId = new GroupId(getRandomId());
final Group privateGroupGroup = getGroup(CLIENT_ID, MAJOR_VERSION);
final Group privateGroupGroup = getGroup(PrivateGroupManager.CLIENT_ID,
PrivateGroupManager.MAJOR_VERSION);
final GroupId privateGroupId = privateGroupGroup.getId();
final PrivateGroup privateGroup = new PrivateGroup(privateGroupGroup,
getRandomString(MAX_GROUP_NAME_LENGTH), author,
@@ -80,30 +81,34 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
final long messageTimestamp = message.getTimestamp();
final long inviteTimestamp = messageTimestamp - 1;
final long localTimestamp = inviteTimestamp - 1;
final BdfDictionary groupMeta = BdfDictionary.of(
new BdfEntry(GROUP_KEY_CONTACT_ID, contactId.getInt()));
final InviteMessage inviteMessage =
new InviteMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, privateGroup.getName(),
privateGroup.getCreator(), privateGroup.getSalt(),
getRandomString(MAX_GROUP_INVITATION_TEXT_LENGTH),
signature);
signature, NO_AUTO_DELETE_TIMER);
final JoinMessage joinMessage =
new JoinMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, lastRemoteMessageId);
privateGroupId, 0L, lastRemoteMessageId,
NO_AUTO_DELETE_TIMER);
final LeaveMessage leaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, lastRemoteMessageId);
privateGroupId, 0L, lastRemoteMessageId,
NO_AUTO_DELETE_TIMER);
final AbortMessage abortMessage =
new AbortMessage(messageId, contactGroupId, privateGroupId,
inviteTimestamp + 1);
void assertSessionConstantsUnchanged(Session s1, Session s2) {
void assertSessionConstantsUnchanged(Session<?> s1, Session<?> s2) {
assertEquals(s1.getRole(), s2.getRole());
assertEquals(s1.getContactGroupId(), s2.getContactGroupId());
assertEquals(s1.getPrivateGroupId(), s2.getPrivateGroupId());
}
void assertSessionRecordedSentMessage(Session s) {
void assertSessionRecordedSentMessage(Session<?> s) {
assertEquals(messageId, s.getLastLocalMessageId());
assertEquals(lastRemoteMessageId, s.getLastRemoteMessageId());
assertEquals(messageTimestamp, s.getLocalTimestamp());
@@ -118,11 +123,13 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
}
void expectSendInviteMessage(String text) throws Exception {
expectCheckWhetherContactSupportsAutoDeletion();
expectGetLocalTimestamp(messageTimestamp);
context.checking(new Expectations() {{
oneOf(messageEncoder)
.encodeInviteMessage(contactGroupId, privateGroupId,
inviteTimestamp, privateGroup.getName(), author,
privateGroup.getSalt(), text, signature);
oneOf(messageEncoder).encodeInviteMessage(contactGroupId,
privateGroupId, inviteTimestamp, privateGroup.getName(),
author, privateGroup.getSalt(), text, signature,
NO_AUTO_DELETE_TIMER);
will(returnValue(message));
}});
expectSendMessage(INVITE, true);
@@ -130,22 +137,24 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
void expectSendJoinMessage(JoinMessage m, boolean visible)
throws Exception {
expectCheckWhetherContactSupportsAutoDeletion();
expectGetLocalTimestamp(messageTimestamp);
context.checking(new Expectations() {{
oneOf(messageEncoder).encodeJoinMessage(m.getContactGroupId(),
m.getPrivateGroupId(), m.getTimestamp(),
lastLocalMessageId);
lastLocalMessageId, NO_AUTO_DELETE_TIMER);
will(returnValue(message));
}});
expectSendMessage(JOIN, visible);
}
void expectSendLeaveMessage(boolean visible) throws Exception {
expectCheckWhetherContactSupportsAutoDeletion();
expectGetLocalTimestamp(messageTimestamp);
context.checking(new Expectations() {{
oneOf(messageEncoder)
.encodeLeaveMessage(contactGroupId, privateGroupId,
messageTimestamp, lastLocalMessageId);
oneOf(messageEncoder).encodeLeaveMessage(contactGroupId,
privateGroupId, messageTimestamp, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
will(returnValue(message));
}});
expectSendMessage(LEAVE, visible);
@@ -167,7 +176,8 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
BdfDictionary meta = BdfDictionary.of(new BdfEntry("me", "ta"));
context.checking(new Expectations() {{
oneOf(messageEncoder).encodeMetadata(type, privateGroupId,
message.getTimestamp(), true, true, visible, false, false);
message.getTimestamp(), true, true, visible, false, false,
NO_AUTO_DELETE_TIMER);
will(returnValue(meta));
oneOf(clientHelper).addLocalMessage(txn, message, meta, true,
false);
@@ -178,7 +188,8 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
expectGetContactId();
context.checking(new Expectations() {{
oneOf(clientVersioningManager).getClientVisibility(txn, contactId,
CLIENT_ID, MAJOR_VERSION);
PrivateGroupManager.CLIENT_ID,
PrivateGroupManager.MAJOR_VERSION);
will(returnValue(SHARED));
oneOf(db).setGroupVisibility(txn, contactId, privateGroupId, v);
}});
@@ -218,4 +229,15 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
}});
}
void expectCheckWhetherContactSupportsAutoDeletion() throws Exception {
context.checking(new Expectations() {{
oneOf(clientHelper).getGroupMetadataAsDictionary(txn,
contactGroupId);
will(returnValue(groupMeta));
oneOf(clientVersioningManager).getClientMinorVersion(txn, contactId,
GroupInvitationManager.CLIENT_ID,
GroupInvitationManager.MAJOR_VERSION);
will(returnValue(GroupInvitationManager.MINOR_VERSION));
}});
}
}

View File

@@ -5,6 +5,7 @@ import org.briarproject.briar.api.client.ProtocolStateException;
import org.jmock.Expectations;
import org.junit.Test;
import static org.briarproject.bramble.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
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.test.TestUtils.getRandomId;
@@ -77,7 +78,6 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
oneOf(messageTracker).trackOutgoingMessage(txn, message);
}});
expectSendInviteMessage(text);
expectGetLocalTimestamp(messageTimestamp);
}
@Test(expected = ProtocolStateException.class)
@@ -289,7 +289,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
CreatorSession session = getDefaultSession(INVITED);
JoinMessage invalidJoinMessage =
new JoinMessage(messageId, contactGroupId, privateGroupId,
inviteTimestamp + 1, messageId);
inviteTimestamp + 1, messageId, NO_AUTO_DELETE_TIMER);
expectAbortWhenSubscribedToGroup();
CreatorSession newSession =
@@ -303,7 +303,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
JoinMessage properJoinMessage =
new JoinMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, inviteTimestamp + 1,
lastRemoteMessageId);
lastRemoteMessageId, NO_AUTO_DELETE_TIMER);
expectSendJoinMessage(properJoinMessage, false);
expectMarkMessageVisibleInUi(properJoinMessage.getId());
@@ -343,7 +343,8 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
public void testOnLeaveMessageFromStart() throws Exception {
LeaveMessage leaveMessage =
new LeaveMessage(messageId, contactGroupId, privateGroupId,
inviteTimestamp, lastLocalMessageId);
inviteTimestamp, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
CreatorSession session = getDefaultSession(START);
expectAbortWhenSubscribedToGroup();
@@ -377,7 +378,8 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
throws Exception {
LeaveMessage invalidLeaveMessage =
new LeaveMessage(messageId, contactGroupId, privateGroupId,
inviteTimestamp + 1, lastLocalMessageId);
inviteTimestamp + 1, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
CreatorSession session = getDefaultSession(INVITED);
expectAbortWhenSubscribedToGroup();
@@ -392,7 +394,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
LeaveMessage properLeaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, inviteTimestamp + 1,
lastRemoteMessageId);
lastRemoteMessageId, NO_AUTO_DELETE_TIMER);
CreatorSession session = getDefaultSession(INVITED);
expectMarkMessageVisibleInUi(properLeaveMessage.getId());

View File

@@ -45,6 +45,7 @@ import javax.annotation.Nullable;
import static java.util.Arrays.asList;
import static junit.framework.TestCase.fail;
import static org.briarproject.bramble.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
import static org.briarproject.bramble.test.TestUtils.getAuthor;
import static org.briarproject.bramble.test.TestUtils.getContact;
@@ -230,7 +231,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
}});
}
private void expectStoreSession(Session session, MessageId storageId)
private void expectStoreSession(Session<?> session, MessageId storageId)
throws Exception {
context.checking(new Expectations() {{
oneOf(sessionEncoder).encodeSession(session);
@@ -320,7 +321,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
throws Exception {
expectParseMessageMetadata();
expectGetSession(noResults, sessionId, contactGroup.getId());
Session session = expectHandleFirstMessage(role, messageMetadata, type);
Session<?> session =
expectHandleFirstMessage(role, messageMetadata, type);
if (session != null) {
expectCreateStorageId();
expectStoreSession(session, storageMessage.getId());
@@ -347,13 +349,13 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
BdfDictionary bdfSession) throws Exception {
expectParseMessageMetadata();
expectGetSession(oneResult, sessionId, contactGroup.getId());
Session session = expectHandleMessage(role, messageMetadata, bdfSession,
type);
Session<?> session =
expectHandleMessage(role, messageMetadata, bdfSession, type);
expectStoreSession(session, storageMessage.getId());
}
@Nullable
private Session expectHandleFirstMessage(Role role,
private Session<?> expectHandleFirstMessage(Role role,
MessageMetadata messageMetadata, MessageType type)
throws Exception {
context.checking(new Expectations() {{
@@ -382,7 +384,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
}
@Nullable
private Session expectHandleMessage(Role role,
private Session<?> expectHandleMessage(Role role,
MessageMetadata messageMetadata, BdfDictionary state,
MessageType type) throws Exception {
context.checking(new Expectations() {{
@@ -420,8 +422,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
}
}
private <S extends Session> void expectIndividualMessage(MessageType type,
ProtocolEngine<S> engine, S session) throws Exception {
private <S extends Session<?>> void expectIndividualMessage(
MessageType type, ProtocolEngine<S> engine, S session)
throws Exception {
if (type == INVITE) {
InviteMessage msg = context.mock(InviteMessage.class);
context.checking(new Expectations() {{
@@ -657,14 +660,14 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
long time1 = 1L, time2 = 2L;
MessageMetadata messageMetadata1 =
new MessageMetadata(INVITE, privateGroup.getId(), time1, true,
true, true, false, true);
true, true, false, true, NO_AUTO_DELETE_TIMER);
MessageMetadata messageMetadata2 =
new MessageMetadata(JOIN, privateGroup.getId(), time2, true,
true, true, true, false);
true, true, true, false, NO_AUTO_DELETE_TIMER);
InviteMessage invite =
new InviteMessage(message.getId(), contactGroup.getId(),
privateGroup.getId(), time1, "name", author,
new byte[0], null, new byte[0]);
new byte[0], null, new byte[0], NO_AUTO_DELETE_TIMER);
PrivateGroup pg =
new PrivateGroup(privateGroup, invite.getGroupName(),
invite.getCreator(), invite.getSalt());
@@ -731,11 +734,11 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
InviteMessage inviteMessage1 =
new InviteMessage(message.getId(), contactGroup.getId(),
privateGroup.getId(), time1, groupName, author, salt,
null, getRandomBytes(5));
null, getRandomBytes(5), NO_AUTO_DELETE_TIMER);
InviteMessage inviteMessage2 =
new InviteMessage(message2.getId(), contactGroup.getId(),
privateGroup.getId(), time2, groupName, author, salt,
null, getRandomBytes(5));
null, getRandomBytes(5), NO_AUTO_DELETE_TIMER);
PrivateGroup pg = new PrivateGroup(privateGroup, groupName,
author, salt);

View File

@@ -16,6 +16,7 @@ import org.junit.Test;
import java.security.GeneralSecurityException;
import static org.briarproject.bramble.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
import static org.briarproject.bramble.test.TestUtils.getAuthor;
import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
@@ -263,7 +264,7 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
} else {
oneOf(messageEncoder).encodeMetadata(INVITE,
message.getGroupId(), message.getTimestamp(), false,
false, false, false, false);
false, false, false, false, NO_AUTO_DELETE_TIMER);
will(returnValue(meta));
}
}});
@@ -341,7 +342,8 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
BdfList body = BdfList.of(JOIN.getValue(), privateGroup.getId(), null);
context.checking(new Expectations() {{
oneOf(messageEncoder).encodeMetadata(JOIN, message.getGroupId(),
message.getTimestamp(), false, false, false, false, false);
message.getTimestamp(), false, false, false, false, false,
NO_AUTO_DELETE_TIMER);
will(returnValue(meta));
}});
BdfMessageContext messageContext =
@@ -356,7 +358,8 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
previousMessageId);
context.checking(new Expectations() {{
oneOf(messageEncoder).encodeMetadata(JOIN, message.getGroupId(),
message.getTimestamp(), false, false, false, false, false);
message.getTimestamp(), false, false, false, false, false,
NO_AUTO_DELETE_TIMER);
will(returnValue(meta));
}});
BdfMessageContext messageContext =
@@ -439,7 +442,8 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
BdfList body = BdfList.of(LEAVE.getValue(), privateGroup.getId(), null);
context.checking(new Expectations() {{
oneOf(messageEncoder).encodeMetadata(LEAVE, message.getGroupId(),
message.getTimestamp(), false, false, false, false, false);
message.getTimestamp(), false, false, false, false, false,
NO_AUTO_DELETE_TIMER);
will(returnValue(meta));
}});
BdfMessageContext messageContext =
@@ -452,7 +456,8 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
public void testAcceptsValidLeaveMessage() throws Exception {
context.checking(new Expectations() {{
oneOf(messageEncoder).encodeMetadata(LEAVE, message.getGroupId(),
message.getTimestamp(), false, false, false, false, false);
message.getTimestamp(), false, false, false, false, false,
NO_AUTO_DELETE_TIMER);
will(returnValue(meta));
}});
BdfList body = BdfList.of(LEAVE.getValue(), privateGroup.getId(),
@@ -509,7 +514,8 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
public void testAcceptsValidAbortMessage() throws Exception {
context.checking(new Expectations() {{
oneOf(messageEncoder).encodeMetadata(ABORT, message.getGroupId(),
message.getTimestamp(), false, false, false, false, false);
message.getTimestamp(), false, false, false, false, false,
NO_AUTO_DELETE_TIMER);
will(returnValue(meta));
}});
BdfList body = BdfList.of(ABORT.getValue(), privateGroup.getId());

View File

@@ -13,6 +13,7 @@ import org.junit.Test;
import java.util.Collections;
import java.util.Map;
import static org.briarproject.bramble.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
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;
@@ -131,7 +132,8 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
public void testOnJoinActionFromInvited() throws Exception {
JoinMessage properJoinMessage =
new JoinMessage(messageId, contactGroupId, privateGroupId,
messageTimestamp, lastRemoteMessageId);
messageTimestamp, lastRemoteMessageId,
NO_AUTO_DELETE_TIMER);
long timestamp = 0L;
GroupMessage joinGroupMessage =
new GroupMessage(message, null, localAuthor);
@@ -329,7 +331,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
privateGroup.getName(), privateGroup.getCreator(),
privateGroup.getSalt(),
getRandomString(MAX_GROUP_INVITATION_TEXT_LENGTH),
signature);
signature, NO_AUTO_DELETE_TIMER);
Contact notCreatorContact = getContact(contactId, getAuthor(),
localAuthor.getId(), true);
@@ -352,7 +354,8 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
new InviteMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, session.getInviteTimestamp() + 1,
privateGroup.getName(), privateGroup.getCreator(),
privateGroup.getSalt(), "msg", signature);
privateGroup.getSalt(), "msg", signature,
NO_AUTO_DELETE_TIMER);
assertEquals(contact.getAuthor(), privateGroup.getCreator());
expectGetContactId();
@@ -505,7 +508,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
JoinMessage invalidJoinMessage =
new JoinMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, session.getInviteTimestamp() + 1,
lastLocalMessageId);
lastLocalMessageId, NO_AUTO_DELETE_TIMER);
assertFalse(invalidJoinMessage.getTimestamp() <=
session.getInviteTimestamp());
assertNotNull(session.getLastRemoteMessageId());
@@ -525,7 +528,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
JoinMessage properJoinMessage =
new JoinMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, session.getInviteTimestamp() + 1,
lastRemoteMessageId);
lastRemoteMessageId, NO_AUTO_DELETE_TIMER);
assertFalse(properJoinMessage.getTimestamp() <=
session.getInviteTimestamp());
assertNotNull(session.getLastRemoteMessageId());
@@ -607,7 +610,8 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
InviteeSession session = getDefaultSession(INVITED);
LeaveMessage invalidLeaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, session.getInviteTimestamp() + 1, null);
privateGroupId, session.getInviteTimestamp() + 1, null,
NO_AUTO_DELETE_TIMER);
assertFalse(invalidLeaveMessage.getTimestamp() <=
session.getInviteTimestamp());
assertNull(invalidLeaveMessage.getPreviousMessageId());
@@ -624,7 +628,8 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
InviteeSession session = getDefaultSession(LEFT);
LeaveMessage invalidLeaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, session.getInviteTimestamp() + 1, null);
privateGroupId, session.getInviteTimestamp() + 1, null,
NO_AUTO_DELETE_TIMER);
assertFalse(invalidLeaveMessage.getTimestamp() <=
session.getInviteTimestamp());
assertNull(invalidLeaveMessage.getPreviousMessageId());
@@ -641,7 +646,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
LeaveMessage properLeaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, session.getInviteTimestamp() + 1,
lastRemoteMessageId);
lastRemoteMessageId, NO_AUTO_DELETE_TIMER);
assertFalse(properLeaveMessage.getTimestamp() <=
session.getInviteTimestamp());
assertNotNull(session.getLastRemoteMessageId());
@@ -671,7 +676,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
LeaveMessage properLeaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, session.getInviteTimestamp() + 1,
lastRemoteMessageId);
lastRemoteMessageId, NO_AUTO_DELETE_TIMER);
assertFalse(properLeaveMessage.getTimestamp() <=
session.getInviteTimestamp());
assertNotNull(session.getLastRemoteMessageId());

View File

@@ -5,6 +5,7 @@ import org.briarproject.briar.api.client.ProtocolStateException;
import org.jmock.Expectations;
import org.junit.Test;
import static org.briarproject.bramble.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
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;
@@ -17,9 +18,8 @@ import static org.briarproject.briar.privategroup.invitation.PeerState.LOCAL_LEF
import static org.briarproject.briar.privategroup.invitation.PeerState.NEITHER_JOINED;
import static org.briarproject.briar.privategroup.invitation.PeerState.START;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
@@ -37,43 +37,43 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
// onInviteAction
@Test(expected = UnsupportedOperationException.class)
public void testOnInviteActionFromStart() throws Exception {
public void testOnInviteActionFromStart() {
engine.onInviteAction(txn, getDefaultSession(START), null,
messageTimestamp, signature);
}
@Test(expected = UnsupportedOperationException.class)
public void testOnInviteActionFromAwaitMember() throws Exception {
public void testOnInviteActionFromAwaitMember() {
engine.onInviteAction(txn, getDefaultSession(AWAIT_MEMBER), null,
messageTimestamp, signature);
}
@Test(expected = UnsupportedOperationException.class)
public void testOnInviteActionFromNeitherJoined() throws Exception {
public void testOnInviteActionFromNeitherJoined() {
engine.onInviteAction(txn, getDefaultSession(NEITHER_JOINED), null,
messageTimestamp, signature);
}
@Test(expected = UnsupportedOperationException.class)
public void testOnInviteActionFromLocalJoined() throws Exception {
public void testOnInviteActionFromLocalJoined() {
engine.onInviteAction(txn, getDefaultSession(LOCAL_JOINED), null,
messageTimestamp, signature);
}
@Test(expected = UnsupportedOperationException.class)
public void testOnInviteActionFromBothJoined() throws Exception {
public void testOnInviteActionFromBothJoined() {
engine.onInviteAction(txn, getDefaultSession(BOTH_JOINED), null,
messageTimestamp, signature);
}
@Test(expected = UnsupportedOperationException.class)
public void testOnInviteActionFromLocalLeft() throws Exception {
public void testOnInviteActionFromLocalLeft() {
engine.onInviteAction(txn, getDefaultSession(LOCAL_LEFT), null,
messageTimestamp, signature);
}
@Test(expected = UnsupportedOperationException.class)
public void testOnInviteActionFromError() throws Exception {
public void testOnInviteActionFromError() {
engine.onInviteAction(txn, getDefaultSession(ERROR), null,
messageTimestamp, signature);
}
@@ -109,7 +109,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
public void testOnJoinActionFromNeitherJoined() throws Exception {
JoinMessage joinMessage =
new JoinMessage(messageId, contactGroupId,
privateGroupId, messageTimestamp, lastRemoteMessageId);
privateGroupId, messageTimestamp, lastRemoteMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(NEITHER_JOINED);
expectSendJoinMessage(joinMessage, false);
@@ -125,7 +126,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
public void testOnJoinActionFromLocalLeft() throws Exception {
JoinMessage joinMessage =
new JoinMessage(messageId, contactGroupId,
privateGroupId, messageTimestamp, lastRemoteMessageId);
privateGroupId, messageTimestamp, lastRemoteMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(LOCAL_LEFT);
expectSendJoinMessage(joinMessage, false);
@@ -216,7 +218,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
public void testOnMemberAddedFromAwaitMember() throws Exception {
JoinMessage joinMessage =
new JoinMessage(messageId, contactGroupId,
privateGroupId, messageTimestamp, lastRemoteMessageId);
privateGroupId, messageTimestamp, lastRemoteMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(AWAIT_MEMBER);
expectSendJoinMessage(joinMessage, false);
@@ -361,12 +364,13 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
throws Exception {
JoinMessage invalidJoinMessage =
new JoinMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, lastLocalMessageId);
privateGroupId, 0L, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(START);
assertNotNull(invalidJoinMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertFalse(invalidJoinMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertNotEquals(invalidJoinMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
expectAbortWhenNotSubscribedToGroup();
PeerSession newSession =
@@ -379,8 +383,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
PeerSession session = getDefaultSession(START);
assertNotNull(joinMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertTrue(joinMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertEquals(joinMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
PeerSession newSession =
engine.onJoinMessage(txn, session, joinMessage);
@@ -399,12 +403,13 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
throws Exception {
JoinMessage invalidJoinMessage =
new JoinMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, lastLocalMessageId);
privateGroupId, 0L, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(NEITHER_JOINED);
assertNotNull(invalidJoinMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertFalse(invalidJoinMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertNotEquals(invalidJoinMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
expectAbortWhenNotSubscribedToGroup();
PeerSession newSession =
@@ -417,10 +422,11 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
PeerSession session = getDefaultSession(NEITHER_JOINED);
assertNotNull(joinMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertTrue(joinMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertEquals(joinMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
JoinMessage myJoinMessage = new JoinMessage(messageId, contactGroupId,
privateGroupId, messageTimestamp, lastRemoteMessageId);
privateGroupId, messageTimestamp, lastRemoteMessageId,
NO_AUTO_DELETE_TIMER);
expectSendJoinMessage(myJoinMessage, false);
expectSetPrivateGroupVisibility(SHARED);
@@ -441,12 +447,13 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
throws Exception {
JoinMessage invalidJoinMessage =
new JoinMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, lastLocalMessageId);
privateGroupId, 0L, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(LOCAL_JOINED);
assertNotNull(invalidJoinMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertFalse(invalidJoinMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertNotEquals(invalidJoinMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
expectAbortWhenNotSubscribedToGroup();
PeerSession newSession =
@@ -459,8 +466,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
PeerSession session = getDefaultSession(LOCAL_JOINED);
assertNotNull(joinMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertTrue(joinMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertEquals(joinMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
expectSetPrivateGroupVisibility(SHARED);
expectRelationshipRevealed(false);
@@ -520,12 +527,13 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
throws Exception {
LeaveMessage invalidLeaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, lastLocalMessageId);
privateGroupId, 0L, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(AWAIT_MEMBER);
assertNotNull(invalidLeaveMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertFalse(invalidLeaveMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertNotEquals(invalidLeaveMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
expectAbortWhenSubscribedToGroup();
PeerSession newSession =
@@ -538,8 +546,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
PeerSession session = getDefaultSession(AWAIT_MEMBER);
assertNotNull(leaveMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertTrue(leaveMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertEquals(leaveMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
PeerSession newSession =
engine.onLeaveMessage(txn, session, leaveMessage);
@@ -558,12 +566,13 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
throws Exception {
LeaveMessage invalidLeaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, lastLocalMessageId);
privateGroupId, 0L, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(LOCAL_LEFT);
assertNotNull(invalidLeaveMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertFalse(invalidLeaveMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertNotEquals(invalidLeaveMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
expectAbortWhenSubscribedToGroup();
PeerSession newSession =
@@ -576,8 +585,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
PeerSession session = getDefaultSession(LOCAL_LEFT);
assertNotNull(leaveMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertTrue(leaveMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertEquals(leaveMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
PeerSession newSession =
engine.onLeaveMessage(txn, session, leaveMessage);
@@ -596,12 +605,13 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
throws Exception {
LeaveMessage invalidLeaveMessage =
new LeaveMessage(new MessageId(getRandomId()), contactGroupId,
privateGroupId, 0L, lastLocalMessageId);
privateGroupId, 0L, lastLocalMessageId,
NO_AUTO_DELETE_TIMER);
PeerSession session = getDefaultSession(BOTH_JOINED);
assertNotNull(invalidLeaveMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertFalse(invalidLeaveMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertNotEquals(invalidLeaveMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
expectAbortWhenSubscribedToGroup();
PeerSession newSession =
@@ -614,8 +624,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
PeerSession session = getDefaultSession(BOTH_JOINED);
assertNotNull(leaveMessage.getPreviousMessageId());
assertNotNull(session.getLastRemoteMessageId());
assertTrue(leaveMessage.getPreviousMessageId()
.equals(session.getLastRemoteMessageId()));
assertEquals(leaveMessage.getPreviousMessageId(),
session.getLastRemoteMessageId());
expectSetPrivateGroupVisibility(VISIBLE); // FIXME correct?
PeerSession newSession =
@@ -685,14 +695,14 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
}
private void assertSessionAborted(PeerSession oldSession,
PeerSession newSession) throws Exception {
PeerSession newSession) {
assertEquals(ERROR, newSession.getState());
assertSessionRecordedSentMessage(newSession);
assertSessionConstantsUnchanged(oldSession, newSession);
}
@Override
protected void assertSessionRecordedSentMessage(Session s) {
protected void assertSessionRecordedSentMessage(Session<?> s) {
assertEquals(messageId, s.getLastLocalMessageId());
assertEquals(lastRemoteMessageId, s.getLastRemoteMessageId());
assertEquals(messageTimestamp, s.getLocalTimestamp());