mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
101 lines
3.7 KiB
Java
101 lines
3.7 KiB
Java
package org.briarproject.introduction;
|
|
|
|
import org.briarproject.BriarTestCase;
|
|
import org.briarproject.TestUtils;
|
|
import org.briarproject.api.FormatException;
|
|
import org.briarproject.api.clients.ClientHelper;
|
|
import org.briarproject.api.clients.MessageQueueManager;
|
|
import org.briarproject.api.clients.SessionId;
|
|
import org.briarproject.api.data.BdfDictionary;
|
|
import org.briarproject.api.data.BdfEntry;
|
|
import org.briarproject.api.data.BdfList;
|
|
import org.briarproject.api.data.MetadataEncoder;
|
|
import org.briarproject.api.db.DatabaseComponent;
|
|
import org.briarproject.api.db.DbException;
|
|
import org.briarproject.api.db.Metadata;
|
|
import org.briarproject.api.db.Transaction;
|
|
import org.briarproject.api.sync.ClientId;
|
|
import org.briarproject.api.sync.Group;
|
|
import org.briarproject.api.sync.GroupId;
|
|
import org.briarproject.api.system.Clock;
|
|
import org.jmock.Expectations;
|
|
import org.jmock.Mockery;
|
|
import org.junit.Test;
|
|
|
|
import static org.briarproject.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
|
|
import static org.briarproject.api.introduction.IntroductionConstants.GROUP_ID;
|
|
import static org.briarproject.api.introduction.IntroductionConstants.MAC;
|
|
import static org.briarproject.api.introduction.IntroductionConstants.SESSION_ID;
|
|
import static org.briarproject.api.introduction.IntroductionConstants.SIGNATURE;
|
|
import static org.briarproject.api.introduction.IntroductionConstants.TYPE;
|
|
import static org.briarproject.api.introduction.IntroductionConstants.TYPE_ACK;
|
|
import static org.junit.Assert.assertFalse;
|
|
|
|
public class MessageSenderTest extends BriarTestCase {
|
|
|
|
private final Mockery context;
|
|
private final MessageSender messageSender;
|
|
private final DatabaseComponent db;
|
|
private final ClientHelper clientHelper;
|
|
private final MetadataEncoder metadataEncoder;
|
|
private final MessageQueueManager messageQueueManager;
|
|
private final Clock clock;
|
|
|
|
public MessageSenderTest() {
|
|
context = new Mockery();
|
|
db = context.mock(DatabaseComponent.class);
|
|
clientHelper = context.mock(ClientHelper.class);
|
|
metadataEncoder =
|
|
context.mock(MetadataEncoder.class);
|
|
messageQueueManager =
|
|
context.mock(MessageQueueManager.class);
|
|
clock = context.mock(Clock.class);
|
|
|
|
messageSender =
|
|
new MessageSender(db, clientHelper, clock, metadataEncoder,
|
|
messageQueueManager);
|
|
}
|
|
|
|
@Test
|
|
public void testSendMessage() throws DbException, FormatException {
|
|
final Transaction txn = new Transaction(null, false);
|
|
final Group privateGroup =
|
|
new Group(new GroupId(TestUtils.getRandomId()),
|
|
new ClientId(TestUtils.getRandomId()), new byte[0]);
|
|
final SessionId sessionId = new SessionId(TestUtils.getRandomId());
|
|
byte[] mac = TestUtils.getRandomBytes(42);
|
|
byte[] sig = TestUtils.getRandomBytes(MAX_SIGNATURE_LENGTH);
|
|
final long time = 42L;
|
|
final BdfDictionary msg = BdfDictionary.of(
|
|
new BdfEntry(TYPE, TYPE_ACK),
|
|
new BdfEntry(GROUP_ID, privateGroup.getId()),
|
|
new BdfEntry(SESSION_ID, sessionId),
|
|
new BdfEntry(MAC, mac),
|
|
new BdfEntry(SIGNATURE, sig)
|
|
);
|
|
final BdfList bodyList =
|
|
BdfList.of(TYPE_ACK, sessionId.getBytes(), mac, sig);
|
|
final byte[] body = TestUtils.getRandomBytes(8);
|
|
final Metadata metadata = new Metadata();
|
|
|
|
context.checking(new Expectations() {{
|
|
oneOf(clientHelper).toByteArray(bodyList);
|
|
will(returnValue(body));
|
|
oneOf(db).getGroup(txn, privateGroup.getId());
|
|
will(returnValue(privateGroup));
|
|
oneOf(metadataEncoder).encode(msg);
|
|
will(returnValue(metadata));
|
|
oneOf(clock).currentTimeMillis();
|
|
will(returnValue(time));
|
|
oneOf(messageQueueManager)
|
|
.sendMessage(txn, privateGroup, time, body, metadata);
|
|
}});
|
|
|
|
messageSender.sendMessage(txn, msg);
|
|
|
|
context.assertIsSatisfied();
|
|
assertFalse(txn.isCommitted());
|
|
}
|
|
|
|
}
|