use of com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider 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);
}
use of com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider in project popstellar by dedis.
the class LAONetworkManagerTest method errorsAreDispatchedCorrectly.
@Test
public void errorsAreDispatchedCorrectly() {
TestSchedulerProvider schedulerProvider = new TestSchedulerProvider();
TestScheduler testScheduler = schedulerProvider.getTestScheduler();
LAONetworkManager networkManager = new LAONetworkManager(laoRepository, handler, connection, JsonModule.provideGson(DataRegistryModule.provideDataRegistry()), schedulerProvider);
ErrorCode error = new ErrorCode(3, "error");
// Setup mock answer
Answer<?> answer = args -> {
// Retrieve subscribe object
Query query = args.getArgument(0);
// Return a negative result
messages.onNext(new Error(query.getRequestId(), error));
return null;
};
doAnswer(answer).when(connection).sendMessage(any());
Disposable disposable = networkManager.subscribe(CHANNEL).subscribe(() -> {
throw new IllegalAccessException("The subscription should have failed.");
}, err -> assertTrue(err instanceof JsonRPCErrorException));
testScheduler.advanceTimeBy(5, TimeUnit.SECONDS);
disposable.dispose();
networkManager.dispose();
verify(connection).sendMessage(any(Subscribe.class));
verify(connection, atLeastOnce()).observeMessage();
verify(connection).observeConnectionEvents();
verify(connection).close();
verifyNoMoreInteractions(connection);
}
use of com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider in project popstellar by dedis.
the class LAONetworkManagerTest method subscribeSendsTheRightMessages.
@Test
public void subscribeSendsTheRightMessages() {
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
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));
// Actual test
Disposable disposable = networkManager.subscribe(CHANNEL).subscribe(() -> verify(connection, never()).sendMessage(any(Catchup.class)));
testScheduler.advanceTimeBy(5, TimeUnit.SECONDS);
disposable.dispose();
networkManager.dispose();
verify(connection).sendMessage(any(Subscribe.class));
verify(connection).sendMessage(any(Catchup.class));
verify(connection, atLeastOnce()).observeMessage();
verify(connection).observeConnectionEvents();
verify(connection).close();
verifyNoMoreInteractions(connection);
}
Aggregations