Search in sources :

Example 1 with TestSchedulerProvider

use of com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider in project popstellar by dedis.

the class GlobalNetworkManagerTest method connectingToANewConnectionClosesTheLast.

@Test
public void connectingToANewConnectionClosesTheLast() {
    ConnectionFactory factory = mock(ConnectionFactory.class);
    Connection firstConnection = mock(Connection.class);
    when(firstConnection.observeMessage()).thenReturn(BehaviorSubject.create());
    when(firstConnection.observeConnectionEvents()).thenReturn(BehaviorSubject.create());
    when(factory.createConnection(anyString())).thenReturn(firstConnection);
    GlobalNetworkManager networkManager = new GlobalNetworkManager(repository, handler, factory, gson, new TestSchedulerProvider());
    verify(factory).createConnection(anyString());
    Connection secondConnection = mock(Connection.class);
    when(secondConnection.observeMessage()).thenReturn(BehaviorSubject.create());
    when(secondConnection.observeConnectionEvents()).thenReturn(BehaviorSubject.create());
    when(factory.createConnection(anyString())).thenReturn(secondConnection);
    networkManager.connect("new url");
    verify(firstConnection).close();
}
Also used : TestSchedulerProvider(com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider) Test(org.junit.Test)

Example 2 with TestSchedulerProvider

use of com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider in project popstellar by dedis.

the class GlobalNetworkManagerTest method initializationProducesAValidConnection.

@Test
public void initializationProducesAValidConnection() {
    ConnectionFactory factory = mock(ConnectionFactory.class);
    Connection firstConnection = mock(Connection.class);
    when(firstConnection.observeMessage()).thenReturn(BehaviorSubject.create());
    when(firstConnection.observeConnectionEvents()).thenReturn(BehaviorSubject.create());
    when(factory.createConnection(anyString())).thenReturn(firstConnection);
    GlobalNetworkManager networkManager = new GlobalNetworkManager(repository, handler, factory, gson, new TestSchedulerProvider());
    verify(factory).createConnection(anyString());
    networkManager.getMessageSender().unsubscribe(Channel.ROOT);
    verify(firstConnection).sendMessage(any());
}
Also used : TestSchedulerProvider(com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider) Test(org.junit.Test)

Example 3 with TestSchedulerProvider

use of com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider 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);
}
Also used : TestSchedulerProvider(com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) Publish(com.github.dedis.popstellar.model.network.method.Publish) Mock(org.mockito.Mock) RunWith(org.junit.runner.RunWith) BehaviorSubject(io.reactivex.subjects.BehaviorSubject) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) TestSchedulerProvider(com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider) ResultMessages(com.github.dedis.popstellar.model.network.answer.ResultMessages) Subscribe(com.github.dedis.popstellar.model.network.method.Subscribe) LAORepository(com.github.dedis.popstellar.repository.LAORepository) Unsubscribe(com.github.dedis.popstellar.model.network.method.Unsubscribe) DataRegistryModule(com.github.dedis.popstellar.di.DataRegistryModule) HashSet(java.util.HashSet) WebSocket(com.tinder.scarlet.WebSocket) Answer(org.mockito.stubbing.Answer) GenericMessage(com.github.dedis.popstellar.model.network.GenericMessage) JsonRPCErrorException(com.github.dedis.popstellar.utility.error.JsonRPCErrorException) CreateLao(com.github.dedis.popstellar.model.network.method.message.data.lao.CreateLao) Mockito.verifyNoMoreInteractions(org.mockito.Mockito.verifyNoMoreInteractions) Error(com.github.dedis.popstellar.model.network.answer.Error) KeyPair(com.github.dedis.popstellar.model.objects.security.KeyPair) Mockito.doAnswer(org.mockito.Mockito.doAnswer) ErrorCode(com.github.dedis.popstellar.model.network.answer.ErrorCode) JsonModule(com.github.dedis.popstellar.di.JsonModule) Before(org.junit.Before) Channel(com.github.dedis.popstellar.model.objects.Channel) Result(com.github.dedis.popstellar.model.network.answer.Result) Catchup(com.github.dedis.popstellar.model.network.method.Catchup) MessageGeneral(com.github.dedis.popstellar.model.network.method.message.MessageGeneral) Data(com.github.dedis.popstellar.model.network.method.message.data.Data) Base64DataUtils(com.github.dedis.popstellar.testutils.Base64DataUtils) Query(com.github.dedis.popstellar.model.network.method.Query) Mockito.atLeastOnce(org.mockito.Mockito.atLeastOnce) Assert.assertTrue(org.junit.Assert.assertTrue) Set(java.util.Set) Mockito.times(org.mockito.Mockito.times) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Mockito.verify(org.mockito.Mockito.verify) MessageHandler(com.github.dedis.popstellar.utility.handler.MessageHandler) TimeUnit(java.util.concurrent.TimeUnit) Mockito.never(org.mockito.Mockito.never) Disposable(io.reactivex.disposables.Disposable) TestScheduler(io.reactivex.schedulers.TestScheduler) MockitoJUnitRunner(org.mockito.junit.MockitoJUnitRunner) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) Mockito.mock(org.mockito.Mockito.mock) Disposable(io.reactivex.disposables.Disposable) TestScheduler(io.reactivex.schedulers.TestScheduler) Unsubscribe(com.github.dedis.popstellar.model.network.method.Unsubscribe) Result(com.github.dedis.popstellar.model.network.answer.Result) Test(org.junit.Test)

Example 4 with TestSchedulerProvider

use of com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider 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);
}
Also used : TestSchedulerProvider(com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) Publish(com.github.dedis.popstellar.model.network.method.Publish) Mock(org.mockito.Mock) RunWith(org.junit.runner.RunWith) BehaviorSubject(io.reactivex.subjects.BehaviorSubject) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) TestSchedulerProvider(com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider) ResultMessages(com.github.dedis.popstellar.model.network.answer.ResultMessages) Subscribe(com.github.dedis.popstellar.model.network.method.Subscribe) LAORepository(com.github.dedis.popstellar.repository.LAORepository) Unsubscribe(com.github.dedis.popstellar.model.network.method.Unsubscribe) DataRegistryModule(com.github.dedis.popstellar.di.DataRegistryModule) HashSet(java.util.HashSet) WebSocket(com.tinder.scarlet.WebSocket) Answer(org.mockito.stubbing.Answer) GenericMessage(com.github.dedis.popstellar.model.network.GenericMessage) JsonRPCErrorException(com.github.dedis.popstellar.utility.error.JsonRPCErrorException) CreateLao(com.github.dedis.popstellar.model.network.method.message.data.lao.CreateLao) Mockito.verifyNoMoreInteractions(org.mockito.Mockito.verifyNoMoreInteractions) Error(com.github.dedis.popstellar.model.network.answer.Error) KeyPair(com.github.dedis.popstellar.model.objects.security.KeyPair) Mockito.doAnswer(org.mockito.Mockito.doAnswer) ErrorCode(com.github.dedis.popstellar.model.network.answer.ErrorCode) JsonModule(com.github.dedis.popstellar.di.JsonModule) Before(org.junit.Before) Channel(com.github.dedis.popstellar.model.objects.Channel) Result(com.github.dedis.popstellar.model.network.answer.Result) Catchup(com.github.dedis.popstellar.model.network.method.Catchup) MessageGeneral(com.github.dedis.popstellar.model.network.method.message.MessageGeneral) Data(com.github.dedis.popstellar.model.network.method.message.data.Data) Base64DataUtils(com.github.dedis.popstellar.testutils.Base64DataUtils) Query(com.github.dedis.popstellar.model.network.method.Query) Mockito.atLeastOnce(org.mockito.Mockito.atLeastOnce) Assert.assertTrue(org.junit.Assert.assertTrue) Set(java.util.Set) Mockito.times(org.mockito.Mockito.times) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Mockito.verify(org.mockito.Mockito.verify) MessageHandler(com.github.dedis.popstellar.utility.handler.MessageHandler) TimeUnit(java.util.concurrent.TimeUnit) Mockito.never(org.mockito.Mockito.never) Disposable(io.reactivex.disposables.Disposable) TestScheduler(io.reactivex.schedulers.TestScheduler) MockitoJUnitRunner(org.mockito.junit.MockitoJUnitRunner) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) Mockito.mock(org.mockito.Mockito.mock) Disposable(io.reactivex.disposables.Disposable) Query(com.github.dedis.popstellar.model.network.method.Query) Subscribe(com.github.dedis.popstellar.model.network.method.Subscribe) Catchup(com.github.dedis.popstellar.model.network.method.Catchup) Result(com.github.dedis.popstellar.model.network.answer.Result) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ResultMessages(com.github.dedis.popstellar.model.network.answer.ResultMessages) TestScheduler(io.reactivex.schedulers.TestScheduler) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 5 with TestSchedulerProvider

use of com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider 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);
}
Also used : TestSchedulerProvider(com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) Publish(com.github.dedis.popstellar.model.network.method.Publish) Mock(org.mockito.Mock) RunWith(org.junit.runner.RunWith) BehaviorSubject(io.reactivex.subjects.BehaviorSubject) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) TestSchedulerProvider(com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider) ResultMessages(com.github.dedis.popstellar.model.network.answer.ResultMessages) Subscribe(com.github.dedis.popstellar.model.network.method.Subscribe) LAORepository(com.github.dedis.popstellar.repository.LAORepository) Unsubscribe(com.github.dedis.popstellar.model.network.method.Unsubscribe) DataRegistryModule(com.github.dedis.popstellar.di.DataRegistryModule) HashSet(java.util.HashSet) WebSocket(com.tinder.scarlet.WebSocket) Answer(org.mockito.stubbing.Answer) GenericMessage(com.github.dedis.popstellar.model.network.GenericMessage) JsonRPCErrorException(com.github.dedis.popstellar.utility.error.JsonRPCErrorException) CreateLao(com.github.dedis.popstellar.model.network.method.message.data.lao.CreateLao) Mockito.verifyNoMoreInteractions(org.mockito.Mockito.verifyNoMoreInteractions) Error(com.github.dedis.popstellar.model.network.answer.Error) KeyPair(com.github.dedis.popstellar.model.objects.security.KeyPair) Mockito.doAnswer(org.mockito.Mockito.doAnswer) ErrorCode(com.github.dedis.popstellar.model.network.answer.ErrorCode) JsonModule(com.github.dedis.popstellar.di.JsonModule) Before(org.junit.Before) Channel(com.github.dedis.popstellar.model.objects.Channel) Result(com.github.dedis.popstellar.model.network.answer.Result) Catchup(com.github.dedis.popstellar.model.network.method.Catchup) MessageGeneral(com.github.dedis.popstellar.model.network.method.message.MessageGeneral) Data(com.github.dedis.popstellar.model.network.method.message.data.Data) Base64DataUtils(com.github.dedis.popstellar.testutils.Base64DataUtils) Query(com.github.dedis.popstellar.model.network.method.Query) Mockito.atLeastOnce(org.mockito.Mockito.atLeastOnce) Assert.assertTrue(org.junit.Assert.assertTrue) Set(java.util.Set) Mockito.times(org.mockito.Mockito.times) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Mockito.verify(org.mockito.Mockito.verify) MessageHandler(com.github.dedis.popstellar.utility.handler.MessageHandler) TimeUnit(java.util.concurrent.TimeUnit) Mockito.never(org.mockito.Mockito.never) Disposable(io.reactivex.disposables.Disposable) TestScheduler(io.reactivex.schedulers.TestScheduler) MockitoJUnitRunner(org.mockito.junit.MockitoJUnitRunner) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) Mockito.mock(org.mockito.Mockito.mock) Disposable(io.reactivex.disposables.Disposable) MessageGeneral(com.github.dedis.popstellar.model.network.method.message.MessageGeneral) TestScheduler(io.reactivex.schedulers.TestScheduler) Publish(com.github.dedis.popstellar.model.network.method.Publish) Result(com.github.dedis.popstellar.model.network.answer.Result) Test(org.junit.Test)

Aggregations

TestSchedulerProvider (com.github.dedis.popstellar.utility.scheduler.TestSchedulerProvider)8 Test (org.junit.Test)8 DataRegistryModule (com.github.dedis.popstellar.di.DataRegistryModule)6 JsonModule (com.github.dedis.popstellar.di.JsonModule)6 GenericMessage (com.github.dedis.popstellar.model.network.GenericMessage)6 Error (com.github.dedis.popstellar.model.network.answer.Error)6 ErrorCode (com.github.dedis.popstellar.model.network.answer.ErrorCode)6 Result (com.github.dedis.popstellar.model.network.answer.Result)6 ResultMessages (com.github.dedis.popstellar.model.network.answer.ResultMessages)6 Catchup (com.github.dedis.popstellar.model.network.method.Catchup)6 Publish (com.github.dedis.popstellar.model.network.method.Publish)6 Query (com.github.dedis.popstellar.model.network.method.Query)6 Subscribe (com.github.dedis.popstellar.model.network.method.Subscribe)6 Unsubscribe (com.github.dedis.popstellar.model.network.method.Unsubscribe)6 MessageGeneral (com.github.dedis.popstellar.model.network.method.message.MessageGeneral)6 Data (com.github.dedis.popstellar.model.network.method.message.data.Data)6 CreateLao (com.github.dedis.popstellar.model.network.method.message.data.lao.CreateLao)6 Channel (com.github.dedis.popstellar.model.objects.Channel)6 KeyPair (com.github.dedis.popstellar.model.objects.security.KeyPair)6 LAORepository (com.github.dedis.popstellar.repository.LAORepository)6