From a82fdca3d4ce3066561c57e24977deb79661459c Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Tue, 29 Nov 2016 18:12:32 +0000 Subject: [PATCH] Added more private group invitation validation tests. --- .../GroupInvitationValidatorTest.java | 450 ++++++++++++------ 1 file changed, 304 insertions(+), 146 deletions(-) diff --git a/briar-tests/src/org/briarproject/privategroup/invitation/GroupInvitationValidatorTest.java b/briar-tests/src/org/briarproject/privategroup/invitation/GroupInvitationValidatorTest.java index 093de60f33..76ed641b42 100644 --- a/briar-tests/src/org/briarproject/privategroup/invitation/GroupInvitationValidatorTest.java +++ b/briar-tests/src/org/briarproject/privategroup/invitation/GroupInvitationValidatorTest.java @@ -42,199 +42,276 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase { private final MessageEncoder messageEncoder = context.mock(MessageEncoder.class); - private final String groupName = "Group Name"; - private final String creatorName = "Creator Name"; + private final String groupName = getRandomString(MAX_GROUP_NAME_LENGTH); + private final String creatorName = getRandomString(MAX_AUTHOR_NAME_LENGTH); private final byte[] creatorKey = getRandomBytes(MAX_PUBLIC_KEY_LENGTH); private final Author creator = new Author(new AuthorId(getRandomId()), creatorName, creatorKey); private final byte[] salt = getRandomBytes(GROUP_SALT_LENGTH); private final PrivateGroup privateGroup = new PrivateGroup(group, groupName, creator, salt); - private final String inviteText = "Invitation Text"; + private final String inviteText = + getRandomString(MAX_GROUP_INVITATION_MSG_LENGTH); private final byte[] signature = getRandomBytes(MAX_SIGNATURE_LENGTH); private final BdfDictionary meta = BdfDictionary.of(new BdfEntry("meta", "data")); private final MessageId previousMessageId = new MessageId(getRandomId()); - private GroupInvitationValidator validator = + private final GroupInvitationValidator validator = new GroupInvitationValidator(clientHelper, metadataEncoder, clock, authorFactory, privateGroupFactory, messageEncoder); + // INVITE Message + @Test(expected = FormatException.class) public void testRejectsTooShortInviteMessage() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, creatorKey, salt, inviteText); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsTooLongInviteMessage() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, creatorKey, salt, inviteText, signature, ""); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithTooShortGroupName() + throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), "", creatorName, + creatorKey, salt, inviteText, signature); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsInviteMessageWithTooLongGroupName() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), + BdfList body = BdfList.of(INVITE.getValue(), getRandomString(MAX_GROUP_NAME_LENGTH + 1), creatorName, creatorKey, salt, inviteText, signature); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithEmptyGroupName() + public void testRejectsInviteMessageWithNullGroupName() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), "", creatorName, + BdfList body = BdfList.of(INVITE.getValue(), null, creatorName, creatorKey, salt, inviteText, signature); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithNonStringGroupName() + throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), getRandomBytes(5), + creatorName, creatorKey, salt, inviteText, signature); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithTooShortCreatorName() + throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, "", creatorKey, + salt, inviteText, signature); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsInviteMessageWithTooLongCreatorName() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, + BdfList body = BdfList.of(INVITE.getValue(), groupName, getRandomString(MAX_AUTHOR_NAME_LENGTH + 1), creatorKey, salt, inviteText, signature); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithEmptyCreatorName() + public void testRejectsInviteMessageWithNullCreatorName() throws Exception { - BdfList list = - BdfList.of(INVITE.getValue(), groupName, "", creatorKey, salt, - inviteText, signature); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(INVITE.getValue(), groupName, null, + creatorKey, salt, inviteText, signature); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithNonStringCreatorName() + throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, + getRandomBytes(5), creatorKey, salt, inviteText, signature); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithTooShortCreatorKey() + throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + new byte[0], salt, inviteText, signature); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsInviteMessageWithTooLongCreatorKey() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, getRandomBytes(MAX_PUBLIC_KEY_LENGTH + 1), salt, inviteText, signature); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithEmptyCreatorKey() + public void testRejectsInviteMessageWithNullCreatorKey() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, - new byte[0], salt, inviteText, signature); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + null, salt, inviteText, signature); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithTooLongGroupSalt() + public void testRejectsInviteMessageWithNonRawCreatorKey() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, - creatorKey, getRandomBytes(GROUP_SALT_LENGTH + 1), inviteText, - signature); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + "not raw", salt, inviteText, signature); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsInviteMessageWithTooShortGroupSalt() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, creatorKey, getRandomBytes(GROUP_SALT_LENGTH - 1), inviteText, signature); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithTooLongGroupSalt() + throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, getRandomBytes(GROUP_SALT_LENGTH + 1), inviteText, + signature); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithTooLongMessage() + public void testRejectsInviteMessageWithNullGroupSalt() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, null, inviteText, signature); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithNonRawGroupSalt() + throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, "not raw", inviteText, signature); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithTooShortContent() throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, salt, "", signature); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithTooLongContent() throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, creatorKey, salt, getRandomString(MAX_GROUP_INVITATION_MSG_LENGTH + 1), signature); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); + } + + @Test + public void testAcceptsInviteMessageWithNullContent() throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, salt, null, signature); + expectInviteMessage(false); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithTooLongSignature() + public void testRejectsInviteMessageWithNonStringContent() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, - creatorKey, salt, inviteText, - getRandomBytes(MAX_SIGNATURE_LENGTH + 1)); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, salt, getRandomBytes(5), signature); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithEmptySignature() + public void testRejectsInviteMessageWithTooShortSignature() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, creatorKey, salt, inviteText, new byte[0]); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithNullSignature() + public void testRejectsInviteMessageWithTooLongSignature() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, - creatorKey, salt, inviteText, null); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, salt, inviteText, + getRandomBytes(MAX_SIGNATURE_LENGTH + 1)); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsInviteMessageWithNonRawSignature() + public void testRejectsInviteMessageWithNullSignature() throws Exception { - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, - creatorKey, salt, inviteText, "non raw signature"); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, salt, inviteText, null); + validator.validateMessage(message, group, body); } - @Test - public void testAcceptsInviteMessageWithNullMessage() + @Test(expected = FormatException.class) + public void testRejectsInviteMessageWithNonRawSignature() throws Exception { - expectInviteMessage(false); - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, - creatorKey, salt, null, signature); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, + creatorKey, salt, inviteText, "not raw"); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsInviteMessageWithInvalidSignature() throws Exception { - expectInviteMessage(true); - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, creatorKey, salt, null, signature); - validator.validateMessage(message, group, list); + expectInviteMessage(true); + validator.validateMessage(message, group, body); } @Test - public void testAcceptsProperInviteMessage() - throws Exception { - expectInviteMessage(false); - BdfList list = BdfList.of(INVITE.getValue(), groupName, creatorName, + public void testAcceptsValidInviteMessage() throws Exception { + BdfList body = BdfList.of(INVITE.getValue(), groupName, creatorName, creatorKey, salt, inviteText, signature); + expectInviteMessage(false); BdfMessageContext messageContext = - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); assertTrue(messageContext.getDependencies().isEmpty()); - assertEquals(meta ,messageContext.getDictionary()); + assertEquals(meta, messageContext.getDictionary()); } private void expectInviteMessage(final boolean exception) throws Exception { - final BdfList toSign = - BdfList.of(message.getTimestamp(), message.getGroupId(), - privateGroup.getId()); + final BdfList signed = BdfList.of(message.getTimestamp(), + message.getGroupId(), privateGroup.getId()); context.checking(new Expectations() {{ oneOf(authorFactory).createAuthor(creatorName, creatorKey); will(returnValue(creator)); - oneOf(privateGroupFactory) - .createPrivateGroup(groupName, creator, salt); + oneOf(privateGroupFactory).createPrivateGroup(groupName, creator, + salt); will(returnValue(privateGroup)); oneOf(clientHelper).verifySignature(SIGNING_LABEL_INVITE, signature, - creatorKey, toSign); - if (exception) will(throwException(new GeneralSecurityException())); - else { - oneOf(messageEncoder) - .encodeMetadata(INVITE, message.getGroupId(), - message.getTimestamp(), false, false, false, - false); + creatorKey, signed); + if (exception) { + will(throwException(new GeneralSecurityException())); + } else { + oneOf(messageEncoder).encodeMetadata(INVITE, + message.getGroupId(), message.getTimestamp(), false, + false, false, false); will(returnValue(meta)); } }}); @@ -244,181 +321,262 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase { @Test(expected = FormatException.class) public void testRejectsTooShortJoinMessage() throws Exception { - BdfList list = BdfList.of(JOIN.getValue(), privateGroup.getId()); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(JOIN.getValue(), privateGroup.getId()); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsTooLongJoinMessage() throws Exception { - BdfList list = BdfList.of(JOIN.getValue(), privateGroup.getId(), + BdfList body = BdfList.of(JOIN.getValue(), privateGroup.getId(), previousMessageId, ""); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsJoinMessageWithTooShortGroupId() throws Exception { + BdfList body = BdfList.of(JOIN.getValue(), + getRandomBytes(GroupId.LENGTH - 1), previousMessageId); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsJoinMessageWithTooLongGroupId() throws Exception { - BdfList list = - BdfList.of(JOIN.getValue(), getRandomBytes(GroupId.LENGTH + 1), - previousMessageId); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(JOIN.getValue(), + getRandomBytes(GroupId.LENGTH + 1), previousMessageId); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsJoinMessageWithTooShortGroupId() throws Exception { - BdfList list = - BdfList.of(JOIN.getValue(), getRandomBytes(GroupId.LENGTH - 1), - previousMessageId); - validator.validateMessage(message, group, list); + public void testRejectsJoinMessageWithNullGroupId() throws Exception { + BdfList body = BdfList.of(JOIN.getValue(), null, previousMessageId); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsJoinMessageWithNonRawGroupId() throws Exception { + BdfList body = BdfList.of(JOIN.getValue(), "not raw", + previousMessageId); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsJoinMessageWithTooShortPreviousMessageId() + throws Exception { + BdfList body = BdfList.of(JOIN.getValue(), privateGroup.getId(), + getRandomBytes(UniqueId.LENGTH - 1)); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsJoinMessageWithTooLongPreviousMessageId() throws Exception { - BdfList list = BdfList.of(JOIN.getValue(), privateGroup.getId(), + BdfList body = BdfList.of(JOIN.getValue(), privateGroup.getId(), getRandomBytes(UniqueId.LENGTH + 1)); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsJoinMessageWithTooShortPreviousMessageId() + public void testRejectsJoinMessageWithNonRawPreviousMessageId() throws Exception { - BdfList list = BdfList.of(JOIN.getValue(), privateGroup.getId(), - getRandomBytes(UniqueId.LENGTH - 1)); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(JOIN.getValue(), privateGroup.getId(), + "not raw"); + validator.validateMessage(message, group, body); } @Test - public void testAcceptsProperJoinMessage() + public void testAcceptsJoinMessageWithNullPreviousMessageId() throws Exception { + 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); + oneOf(messageEncoder).encodeMetadata(JOIN, message.getGroupId(), + message.getTimestamp(), false, false, false, false); will(returnValue(meta)); }}); - BdfList list = BdfList.of(JOIN.getValue(), privateGroup.getId(), + BdfMessageContext messageContext = + validator.validateMessage(message, group, body); + assertEquals(0, messageContext.getDependencies().size()); + assertEquals(meta, messageContext.getDictionary()); + } + + @Test + public void testAcceptsValidJoinMessage() throws Exception { + BdfList body = BdfList.of(JOIN.getValue(), privateGroup.getId(), previousMessageId); + context.checking(new Expectations() {{ + oneOf(messageEncoder).encodeMetadata(JOIN, message.getGroupId(), + message.getTimestamp(), false, false, false, false); + will(returnValue(meta)); + }}); BdfMessageContext messageContext = - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); assertEquals(1, messageContext.getDependencies().size()); assertEquals(previousMessageId, messageContext.getDependencies().iterator().next()); - assertEquals(meta ,messageContext.getDictionary()); + assertEquals(meta, messageContext.getDictionary()); } // LEAVE message @Test(expected = FormatException.class) public void testRejectsTooShortLeaveMessage() throws Exception { - BdfList list = BdfList.of(LEAVE.getValue(), privateGroup.getId()); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(LEAVE.getValue(), privateGroup.getId()); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsTooLongLeaveMessage() throws Exception { - BdfList list = BdfList.of(LEAVE.getValue(), privateGroup.getId(), + BdfList body = BdfList.of(LEAVE.getValue(), privateGroup.getId(), previousMessageId, ""); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsLeaveMessageWithTooShortGroupId() throws Exception { + BdfList body = BdfList.of(LEAVE.getValue(), + getRandomBytes(GroupId.LENGTH - 1), previousMessageId); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsLeaveMessageWithTooLongGroupId() throws Exception { - BdfList list = - BdfList.of(LEAVE.getValue(), getRandomBytes(GroupId.LENGTH + 1), - previousMessageId); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(LEAVE.getValue(), + getRandomBytes(GroupId.LENGTH + 1), previousMessageId); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsLeaveMessageWithTooShortGroupId() throws Exception { - BdfList list = - BdfList.of(LEAVE.getValue(), getRandomBytes(GroupId.LENGTH - 1), - previousMessageId); - validator.validateMessage(message, group, list); + public void testRejectsLeaveMessageWithNullGroupId() throws Exception { + BdfList body = BdfList.of(LEAVE.getValue(), null, previousMessageId); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsLeaveMessageWithNonRawGroupId() throws Exception { + BdfList body = BdfList.of(LEAVE.getValue(), "not raw", + previousMessageId); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsLeaveMessageWithTooShortPreviousMessageId() + throws Exception { + BdfList body = BdfList.of(LEAVE.getValue(), privateGroup.getId(), + getRandomBytes(UniqueId.LENGTH - 1)); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsLeaveMessageWithTooLongPreviousMessageId() throws Exception { - BdfList list = BdfList.of(LEAVE.getValue(), privateGroup.getId(), + BdfList body = BdfList.of(LEAVE.getValue(), privateGroup.getId(), getRandomBytes(UniqueId.LENGTH + 1)); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsLeaveMessageWithTooShortPreviousMessageId() + public void testRejectsLeaveMessageWithNonRawPreviousMessageId() throws Exception { - BdfList list = BdfList.of(LEAVE.getValue(), privateGroup.getId(), - getRandomBytes(UniqueId.LENGTH - 1)); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(LEAVE.getValue(), privateGroup.getId(), + "not raw"); + validator.validateMessage(message, group, body); } @Test - public void testAcceptsProperLeaveMessage() + public void testAcceptsLeaveMessageWithNullPreviousMessageId() throws Exception { + 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); + will(returnValue(meta)); + }}); + BdfMessageContext messageContext = + validator.validateMessage(message, group, body); + assertEquals(0, messageContext.getDependencies().size()); + assertEquals(meta, messageContext.getDictionary()); + } + + @Test + public void testAcceptsValidLeaveMessage() throws Exception { context.checking(new Expectations() {{ oneOf(messageEncoder).encodeMetadata(LEAVE, message.getGroupId(), message.getTimestamp(), false, false, false, false); will(returnValue(meta)); }}); - BdfList list = BdfList.of(LEAVE.getValue(), privateGroup.getId(), + BdfList body = BdfList.of(LEAVE.getValue(), privateGroup.getId(), previousMessageId); BdfMessageContext messageContext = - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); assertEquals(1, messageContext.getDependencies().size()); assertEquals(previousMessageId, messageContext.getDependencies().iterator().next()); - assertEquals(meta ,messageContext.getDictionary()); + assertEquals(meta, messageContext.getDictionary()); } // ABORT message @Test(expected = FormatException.class) public void testRejectsTooShortAbortMessage() throws Exception { - BdfList list = BdfList.of(ABORT.getValue()); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(ABORT.getValue()); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsTooLongAbortMessage() throws Exception { - BdfList list = BdfList.of(ABORT.getValue(), privateGroup.getId(), ""); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(ABORT.getValue(), privateGroup.getId(), ""); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsAbortMessageWithTooShortGroupId() throws Exception { + BdfList body = BdfList.of(ABORT.getValue(), + getRandomBytes(GroupId.LENGTH - 1)); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) public void testRejectsAbortMessageWithTooLongGroupId() throws Exception { - BdfList list = BdfList.of(ABORT.getValue(), + BdfList body = BdfList.of(ABORT.getValue(), getRandomBytes(GroupId.LENGTH + 1)); - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); } @Test(expected = FormatException.class) - public void testRejectsAbortMessageWithTooShortGroupId() throws Exception { - BdfList list = BdfList.of(ABORT.getValue(), - getRandomBytes(GroupId.LENGTH - 1)); - validator.validateMessage(message, group, list); + public void testRejectsAbortMessageWithNullGroupId() throws Exception { + BdfList body = BdfList.of(ABORT.getValue(), null); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsAbortMessageWithNonRawGroupId() throws Exception { + BdfList body = BdfList.of(ABORT.getValue(), "not raw"); + validator.validateMessage(message, group, body); } @Test - public void testAcceptsProperAbortMessage() - throws Exception { + public void testAcceptsValidAbortMessage() throws Exception { context.checking(new Expectations() {{ oneOf(messageEncoder).encodeMetadata(ABORT, message.getGroupId(), message.getTimestamp(), false, false, false, false); will(returnValue(meta)); }}); - BdfList list = BdfList.of(ABORT.getValue(), privateGroup.getId()); + BdfList body = BdfList.of(ABORT.getValue(), privateGroup.getId()); BdfMessageContext messageContext = - validator.validateMessage(message, group, list); + validator.validateMessage(message, group, body); assertEquals(0, messageContext.getDependencies().size()); - assertEquals(meta ,messageContext.getDictionary()); + assertEquals(meta, messageContext.getDictionary()); } @Test(expected = FormatException.class) public void testRejectsMessageWithUnknownType() throws Exception { - BdfList list = BdfList.of(ABORT.getValue() + 1); - validator.validateMessage(message, group, list); + BdfList body = BdfList.of(ABORT.getValue() + 1); + validator.validateMessage(message, group, body); + } + + @Test(expected = FormatException.class) + public void testRejectsEmptyMessage() throws Exception { + BdfList body = new BdfList(); + validator.validateMessage(message, group, body); } } -- GitLab