Search in sources :

Example 21 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class ServiceTransportTest method test_transport_sender.

@Test
public void test_transport_sender() throws InterruptedException {
    Transport transport = Transport.bindAwait();
    ServiceTransport sender = new ServiceTransport(transport);
    assertEquals(transport.address(), sender.address());
    CountDownLatch latch = new CountDownLatch(1);
    sender.listen().subscribe(onNext -> {
        latch.countDown();
    });
    sender.send(transport.address(), Message.builder().data("ping").build());
    latch.await(1, TimeUnit.SECONDS);
    assertTrue(latch.getCount() == 0);
    sender.shutdown();
}
Also used : Transport(io.scalecube.transport.Transport) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 22 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class MembershipProtocolTest method testInitialPhaseOk.

@Test
public void testInitialPhaseOk() {
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    Transport c = Transport.bindAwait(true);
    List<Address> members = ImmutableList.of(a.address(), b.address(), c.address());
    MembershipProtocolImpl cm_a = createMembership(a, members);
    MembershipProtocolImpl cm_b = createMembership(b, members);
    MembershipProtocolImpl cm_c = createMembership(c, members);
    try {
        awaitSeconds(1);
        assertTrusted(cm_a, a.address(), b.address(), c.address());
        assertNoSuspected(cm_a);
        assertTrusted(cm_b, a.address(), b.address(), c.address());
        assertNoSuspected(cm_b);
        assertTrusted(cm_c, a.address(), b.address(), c.address());
        assertNoSuspected(cm_c);
    } finally {
        stopAll(cm_a, cm_b, cm_c);
    }
}
Also used : Address(io.scalecube.transport.Address) InetAddress(java.net.InetAddress) Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 23 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class MembershipProtocolTest method testDoublePartitionThenRecover.

@Test
public void testDoublePartitionThenRecover() {
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    Transport c = Transport.bindAwait(true);
    List<Address> members = ImmutableList.of(a.address(), b.address(), c.address());
    MembershipProtocolImpl cm_a = createMembership(a, members);
    MembershipProtocolImpl cm_b = createMembership(b, members);
    MembershipProtocolImpl cm_c = createMembership(c, members);
    try {
        awaitSeconds(1);
        // Check all trusted
        assertTrusted(cm_a, a.address(), b.address(), c.address());
        assertNoSuspected(cm_a);
        assertTrusted(cm_b, a.address(), b.address(), c.address());
        assertNoSuspected(cm_b);
        assertTrusted(cm_c, a.address(), b.address(), c.address());
        assertNoSuspected(cm_c);
        // Node b lost network
        b.networkEmulator().block(Arrays.asList(a.address(), c.address()));
        a.networkEmulator().block(b.address());
        c.networkEmulator().block(b.address());
        awaitSeconds(1);
        // Check partition: {b}, {a, c}
        assertTrusted(cm_a, a.address(), c.address());
        assertSuspected(cm_a, b.address());
        assertTrusted(cm_b, b.address());
        assertSuspected(cm_b, a.address(), c.address());
        assertTrusted(cm_c, a.address(), c.address());
        assertSuspected(cm_c, b.address());
        // Node a and c lost network
        a.networkEmulator().block(c.address());
        c.networkEmulator().block(a.address());
        awaitSeconds(1);
        // Check partition: {a}, {b}, {c}
        assertTrusted(cm_a, a.address());
        assertSuspected(cm_a, b.address(), c.address());
        assertTrusted(cm_b, b.address());
        assertSuspected(cm_b, a.address(), c.address());
        assertTrusted(cm_c, c.address());
        assertSuspected(cm_c, b.address(), a.address());
        // Recover network
        a.networkEmulator().unblockAll();
        b.networkEmulator().unblockAll();
        c.networkEmulator().unblockAll();
        awaitSeconds(1);
        // Check all trusted again
        assertTrusted(cm_a, a.address(), b.address(), c.address());
        assertNoSuspected(cm_a);
        assertTrusted(cm_b, a.address(), b.address(), c.address());
        assertNoSuspected(cm_b);
        assertTrusted(cm_c, a.address(), b.address(), c.address());
        assertNoSuspected(cm_c);
    } finally {
        stopAll(cm_a, cm_b, cm_c);
    }
}
Also used : Address(io.scalecube.transport.Address) InetAddress(java.net.InetAddress) Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 24 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class MembershipProtocolTest method testMemberLostNetworkThenRecover.

@Test
public void testMemberLostNetworkThenRecover() {
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    Transport c = Transport.bindAwait(true);
    List<Address> members = ImmutableList.of(a.address(), b.address(), c.address());
    MembershipProtocolImpl cm_a = createMembership(a, members);
    MembershipProtocolImpl cm_b = createMembership(b, members);
    MembershipProtocolImpl cm_c = createMembership(c, members);
    try {
        awaitSeconds(1);
        // Check all trusted
        assertTrusted(cm_a, a.address(), b.address(), c.address());
        assertNoSuspected(cm_a);
        assertTrusted(cm_b, a.address(), b.address(), c.address());
        assertNoSuspected(cm_b);
        assertTrusted(cm_c, a.address(), b.address(), c.address());
        assertNoSuspected(cm_c);
        // Node b lost network
        b.networkEmulator().block(Arrays.asList(a.address(), c.address()));
        a.networkEmulator().block(b.address());
        c.networkEmulator().block(b.address());
        awaitSeconds(1);
        // Check partition: {b}, {a, c}
        assertTrusted(cm_a, a.address(), c.address());
        assertSuspected(cm_a, b.address());
        assertTrusted(cm_b, b.address());
        assertSuspected(cm_b, a.address(), c.address());
        assertTrusted(cm_c, a.address(), c.address());
        assertSuspected(cm_c, b.address());
        // Node b recover network
        a.networkEmulator().unblockAll();
        b.networkEmulator().unblockAll();
        c.networkEmulator().unblockAll();
        awaitSeconds(1);
        // Check all trusted again
        assertTrusted(cm_a, a.address(), b.address(), c.address());
        assertNoSuspected(cm_a);
        assertTrusted(cm_b, a.address(), b.address(), c.address());
        assertNoSuspected(cm_b);
        assertTrusted(cm_c, a.address(), b.address(), c.address());
        assertNoSuspected(cm_c);
    } finally {
        stopAll(cm_a, cm_b, cm_c);
    }
}
Also used : Address(io.scalecube.transport.Address) InetAddress(java.net.InetAddress) Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 25 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class MembershipProtocolTest method stop.

private void stop(MembershipProtocolImpl membership) {
    membership.stop();
    membership.getGossipProtocol().stop();
    membership.getFailureDetector().stop();
    Transport transport = membership.getTransport();
    CompletableFuture<Void> close = new CompletableFuture<>();
    transport.stop(close);
    try {
        close.get(1, TimeUnit.SECONDS);
    } catch (Exception ignore) {
    // ignore
    }
}
Also used : CompletableFuture(java.util.concurrent.CompletableFuture) Transport(io.scalecube.transport.Transport) UnknownHostException(java.net.UnknownHostException)

Aggregations

Transport (io.scalecube.transport.Transport)25 BaseTest (io.scalecube.testlib.BaseTest)21 Test (org.junit.Test)21 Address (io.scalecube.transport.Address)20 ArrayList (java.util.ArrayList)13 List (java.util.List)10 InetAddress (java.net.InetAddress)8 CompletableFuture (java.util.concurrent.CompletableFuture)4 Message (io.scalecube.transport.Message)3 TransportConfig (io.scalecube.transport.TransportConfig)3 Map (java.util.Map)3 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 ClusterConfig (io.scalecube.cluster.ClusterConfig)2 ClusterMath (io.scalecube.cluster.ClusterMath)2 ClusterMath.gossipConvergencePercent (io.scalecube.cluster.ClusterMath.gossipConvergencePercent)2 ClusterMath.gossipDisseminationTime (io.scalecube.cluster.ClusterMath.gossipDisseminationTime)2 ClusterMath.maxMessagesPerGossipPerNode (io.scalecube.cluster.ClusterMath.maxMessagesPerGossipPerNode)2 ClusterMath.maxMessagesPerGossipTotal (io.scalecube.cluster.ClusterMath.maxMessagesPerGossipTotal)2