use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class ElectionHandlerTest method setup.
@Before
public void setup() throws GeneralSecurityException, IOException {
lenient().when(keyManager.getMainKeyPair()).thenReturn(SENDER_KEY);
lenient().when(keyManager.getMainPublicKey()).thenReturn(SENDER);
laoRepository = new LAORepository();
when(messageSender.subscribe(any())).then(args -> Completable.complete());
laoRepository = new LAORepository();
messageHandler = new MessageHandler(DataRegistryModule.provideDataRegistry(), keyManager);
// Create one LAO
lao = new Lao(CREATE_LAO.getName(), CREATE_LAO.getOrganizer(), CREATE_LAO.getCreation());
lao.setLastModified(lao.getCreation());
// Create one Roll Call and add it to the LAO
rollCall = new RollCall(lao.getId(), Instant.now().getEpochSecond(), "roll call 1");
lao.setRollCalls(new HashMap<String, RollCall>() {
{
put(rollCall.getId(), rollCall);
}
});
// Create one Election and add it to the LAO
election = new Election(lao.getId(), Instant.now().getEpochSecond(), "election 1");
election.setStart(Instant.now().getEpochSecond());
election.setEnd(Instant.now().getEpochSecond() + 20L);
election.setChannel(lao.getChannel().subChannel(election.getId()));
electionQuestion = new ElectionQuestion("question", "Plurality", false, Arrays.asList("a", "b"), election.getId());
election.setElectionQuestions(Collections.singletonList(electionQuestion));
lao.setElections(new HashMap<String, Election>() {
{
put(election.getId(), election);
}
});
// Add the LAO to the LAORepository
laoRepository.getLaoById().put(lao.getId(), new LAOState(lao));
laoRepository.setAllLaoSubject();
// Add the CreateLao message to the LAORepository
MessageGeneral createLaoMessage = new MessageGeneral(SENDER_KEY, CREATE_LAO, GSON);
laoRepository.getMessageById().put(createLaoMessage.getMessageId(), createLaoMessage);
}
use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class LAONetworkManagerTest method unsubscribeSendsTheRightMessage.
@Test
public void unsubscribeSendsTheRightMessage() {
TestSchedulerProvider schedulerProvider = new TestSchedulerProvider();
TestScheduler testScheduler = schedulerProvider.getTestScheduler();
LAONetworkManager networkManager = new LAONetworkManager(laoRepository, handler, connection, JsonModule.provideGson(DataRegistryModule.provideDataRegistry()), schedulerProvider);
Answer<?> answer = args -> {
// Retrieve subscribe object
Unsubscribe subscribe = args.getArgument(0);
// Make sure the channel is correct
assertEquals(CHANNEL, subscribe.getChannel());
// Return a positive result
messages.onNext(new Result(subscribe.getRequestId()));
return null;
};
doAnswer(answer).when(connection).sendMessage(any(Unsubscribe.class));
// Actual test
Disposable disposable = networkManager.unsubscribe(CHANNEL).subscribe();
testScheduler.advanceTimeBy(5, TimeUnit.SECONDS);
disposable.dispose();
networkManager.dispose();
verify(connection).sendMessage(any(Unsubscribe.class));
verify(connection, atLeastOnce()).observeMessage();
verify(connection).observeConnectionEvents();
verify(connection).close();
verifyNoMoreInteractions(connection);
}
use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class LAONetworkManagerTest method multipleRequestsAtATimeShouldAllSucceed.
@Test
public void multipleRequestsAtATimeShouldAllSucceed() {
TestSchedulerProvider schedulerProvider = new TestSchedulerProvider();
TestScheduler testScheduler = schedulerProvider.getTestScheduler();
LAONetworkManager networkManager = new LAONetworkManager(laoRepository, handler, connection, JsonModule.provideGson(DataRegistryModule.provideDataRegistry()), schedulerProvider);
// Set a response that stores requested ids
Set<Integer> requests = new HashSet<>();
Set<Integer> catchups = new HashSet<>();
// Setup mock answer
Answer<?> answer = args -> {
// Retrieve subscribe object
Query query = args.getArgument(0);
if (query instanceof Catchup)
catchups.add(query.getRequestId());
else
requests.add(query.getRequestId());
return null;
};
doAnswer(answer).when(connection).sendMessage(any());
// Actual test
// Create
AtomicBoolean sub1Called = new AtomicBoolean(false);
AtomicBoolean sub2Called = new AtomicBoolean(false);
Disposable disposable1 = networkManager.subscribe(CHANNEL).subscribe(() -> sub1Called.set(true));
Disposable disposable2 = networkManager.subscribe(CHANNEL).subscribe(() -> sub2Called.set(true));
testScheduler.advanceTimeBy(1, TimeUnit.SECONDS);
// Responses for subscribes
requests.forEach(id -> messages.onNext(new Result(id)));
testScheduler.advanceTimeBy(1, TimeUnit.SECONDS);
// Expect catchups to be sent now
testScheduler.advanceTimeBy(1, TimeUnit.SECONDS);
// Responses to catchups
catchups.forEach(id -> messages.onNext(new ResultMessages(id, Collections.emptyList())));
testScheduler.advanceTimeBy(1, TimeUnit.SECONDS);
// Make sure the subscription succeed
assertTrue(sub1Called.get());
assertTrue(sub2Called.get());
disposable1.dispose();
disposable2.dispose();
networkManager.dispose();
verify(connection, times(2)).sendMessage(any(Subscribe.class));
verify(connection, times(2)).sendMessage(any(Catchup.class));
verify(connection, atLeastOnce()).observeMessage();
verify(connection).observeConnectionEvents();
verify(connection).close();
verifyNoMoreInteractions(connection);
}
use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class LAONetworkManagerTest method publishSendsRightMessage.
@Test
public void publishSendsRightMessage() {
TestSchedulerProvider schedulerProvider = new TestSchedulerProvider();
TestScheduler testScheduler = schedulerProvider.getTestScheduler();
LAONetworkManager networkManager = new LAONetworkManager(laoRepository, handler, connection, JsonModule.provideGson(DataRegistryModule.provideDataRegistry()), schedulerProvider);
Answer<?> answer = args -> {
// Retrieve subscribe object
Publish publish = args.getArgument(0);
// Make sure the channel is correct
assertEquals(CHANNEL, publish.getChannel());
MessageGeneral messageGeneral = publish.getMessage();
assertEquals(DATA, messageGeneral.getData());
// Return a positive result
messages.onNext(new Result(publish.getRequestId()));
return null;
};
doAnswer(answer).when(connection).sendMessage(any(Publish.class));
// Actual test
Disposable disposable = networkManager.publish(KEY_PAIR, CHANNEL, DATA).subscribe();
testScheduler.advanceTimeBy(5, TimeUnit.SECONDS);
disposable.dispose();
networkManager.dispose();
verify(connection).sendMessage(any(Publish.class));
verify(connection, atLeastOnce()).observeMessage();
verify(connection).observeConnectionEvents();
verify(connection).close();
verifyNoMoreInteractions(connection);
}
use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class LAONetworkManagerTest method resubscribeToChannelWhenConnectionReopened.
@Test
public void resubscribeToChannelWhenConnectionReopened() {
TestSchedulerProvider schedulerProvider = new TestSchedulerProvider();
TestScheduler testScheduler = schedulerProvider.getTestScheduler();
LAONetworkManager networkManager = new LAONetworkManager(laoRepository, handler, connection, JsonModule.provideGson(DataRegistryModule.provideDataRegistry()), schedulerProvider);
// First subscribe
networkManager.subscribe(CHANNEL).subscribe();
testScheduler.advanceTimeBy(5, TimeUnit.SECONDS);
verify(connection).sendMessage(any(Subscribe.class));
verify(connection).sendMessage(any(Catchup.class));
// Setup mock answer
Answer<?> answer = args -> {
// Retrieve subscribe object
Subscribe subscribe = args.getArgument(0);
// Make sure the channel is correct
assertEquals(CHANNEL, subscribe.getChannel());
// Return a positive result
messages.onNext(new Result(subscribe.getRequestId()));
return null;
};
doAnswer(answer).when(connection).sendMessage(any(Subscribe.class));
// Push Connection open event
events.onNext(new WebSocket.Event.OnConnectionOpened<>(mock(WebSocket.class)));
testScheduler.advanceTimeBy(5, TimeUnit.SECONDS);
networkManager.dispose();
verify(connection, times(2)).sendMessage(any(Subscribe.class));
verify(connection, times(2)).sendMessage(any(Catchup.class));
verify(connection, atLeastOnce()).observeMessage();
verify(connection).observeConnectionEvents();
verify(connection).close();
verifyNoMoreInteractions(connection);
}
Aggregations