Search in sources :

Example 11 with Transport

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

the class MembershipProtocolTest method testNetworkDisabledThenRecovered.

@Test
public void testNetworkDisabledThenRecovered() {
    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);
        a.networkEmulator().block(members);
        b.networkEmulator().block(members);
        c.networkEmulator().block(members);
        awaitSeconds(1);
        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, a.address(), b.address());
        a.networkEmulator().unblockAll();
        b.networkEmulator().unblockAll();
        c.networkEmulator().unblockAll();
        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 12 with Transport

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

the class MembershipProtocolTest method testNetworkPartitionThenRecovery.

@Test
public void testNetworkPartitionThenRecovery() {
    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);
    // Block traffic
    a.networkEmulator().block(members);
    b.networkEmulator().block(members);
    c.networkEmulator().block(members);
    try {
        awaitSeconds(6);
        assertTrusted(cm_a, a.address());
        assertNoSuspected(cm_a);
        assertTrusted(cm_b, b.address());
        assertNoSuspected(cm_b);
        assertTrusted(cm_c, c.address());
        assertNoSuspected(cm_c);
        a.networkEmulator().unblockAll();
        b.networkEmulator().unblockAll();
        c.networkEmulator().unblockAll();
        awaitSeconds(6);
        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 13 with Transport

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

the class MembershipProtocolTest method testLimitedSeedMembers.

@Test
public void testLimitedSeedMembers() {
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    Transport c = Transport.bindAwait(true);
    Transport d = Transport.bindAwait(true);
    Transport e = Transport.bindAwait(true);
    MembershipProtocolImpl cm_a = createMembership(a, Collections.emptyList());
    MembershipProtocolImpl cm_b = createMembership(b, Collections.singletonList(a.address()));
    MembershipProtocolImpl cm_c = createMembership(c, Collections.singletonList(a.address()));
    MembershipProtocolImpl cm_d = createMembership(d, Collections.singletonList(b.address()));
    MembershipProtocolImpl cm_e = createMembership(e, Collections.singletonList(b.address()));
    try {
        awaitSeconds(3);
        assertTrusted(cm_a, a.address(), b.address(), c.address(), d.address(), e.address());
        assertNoSuspected(cm_a);
        assertTrusted(cm_b, a.address(), b.address(), c.address(), d.address(), e.address());
        assertNoSuspected(cm_b);
        assertTrusted(cm_c, a.address(), b.address(), c.address(), d.address(), e.address());
        assertNoSuspected(cm_c);
        assertTrusted(cm_d, a.address(), b.address(), c.address(), d.address(), e.address());
        assertNoSuspected(cm_d);
        assertTrusted(cm_e, a.address(), b.address(), c.address(), d.address(), e.address());
        assertNoSuspected(cm_e);
    } finally {
        stopAll(cm_a, cm_b, cm_c, cm_d, cm_e);
    }
}
Also used : Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 14 with Transport

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

the class MembershipProtocolTest method testMemberAddressOverrides.

@Test
public void testMemberAddressOverrides() {
    Transport t = Transport.bindAwait(true);
    String host = "host1";
    // Default behavior
    Address address = MembershipProtocolImpl.memberAddress(t, testConfig(Collections.emptyList()).build());
    assertEquals(t.address(), address);
    // Override host only
    address = MembershipProtocolImpl.memberAddress(t, testConfig(Collections.emptyList()).memberHost(host).build());
    assertEquals(Address.create(host, t.address().port()), address);
    // Override host and port
    address = MembershipProtocolImpl.memberAddress(t, testConfig(Collections.emptyList()).memberHost(host).memberPort(80).build());
    assertEquals(Address.create(host, 80), address);
    // Override port only (override is ignored)
    address = MembershipProtocolImpl.memberAddress(t, testConfig(Collections.emptyList()).memberPort(8080).build());
    assertEquals(t.address(), address);
}
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 15 with Transport

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

the class FailureDetectorTest method testTrustedDespiteDifferentPingTimings.

@Test
public void testTrustedDespiteDifferentPingTimings() throws Exception {
    // Create transports
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    Transport c = Transport.bindAwait(true);
    List<Address> members = Arrays.asList(a.address(), b.address(), c.address());
    // Create failure detectors
    FailureDetectorImpl fd_a = createFD(a, members);
    FailureDetectorConfig fd_b_config = ClusterConfig.builder().pingTimeout(500).pingInterval(1000).build();
    FailureDetectorImpl fd_b = createFD(b, members, fd_b_config);
    FailureDetectorImpl fd_c = createFD(c, members, ClusterConfig.defaultConfig());
    List<FailureDetectorImpl> fdetectors = Arrays.asList(fd_a, fd_b, fd_c);
    try {
        start(fdetectors);
        Future<List<FailureDetectorEvent>> list_a = listenNextEventFor(fd_a, members);
        Future<List<FailureDetectorEvent>> list_b = listenNextEventFor(fd_b, members);
        Future<List<FailureDetectorEvent>> list_c = listenNextEventFor(fd_c, members);
        assertStatus(a.address(), ALIVE, awaitEvents(list_a), b.address(), c.address());
        assertStatus(b.address(), ALIVE, awaitEvents(list_b), a.address(), c.address());
        assertStatus(c.address(), ALIVE, awaitEvents(list_c), a.address(), b.address());
    } finally {
        stop(fdetectors);
    }
}
Also used : Address(io.scalecube.transport.Address) ArrayList(java.util.ArrayList) List(java.util.List) Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

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