diff --git a/cluster/src/test/java/io/scalecube/cluster/ClusterTest.java b/cluster/src/test/java/io/scalecube/cluster/ClusterTest.java index 98412215..3c880189 100644 --- a/cluster/src/test/java/io/scalecube/cluster/ClusterTest.java +++ b/cluster/src/test/java/io/scalecube/cluster/ClusterTest.java @@ -32,6 +32,52 @@ public class ClusterTest extends BaseTest { public static final Duration TIMEOUT = Duration.ofSeconds(30); public static final int CONNECT_TIMEOUT = 3000; + @Test + public void testStartStopRepeatedly() throws Exception { + Address address = Address.from("localhost:4848"); + + // Start seed node + Cluster seedNode = + new ClusterImpl() + .gossip(opts -> opts.gossipInterval(100)) + .failureDetector(opts -> opts.pingInterval(100)) + .membership(opts -> opts.syncInterval(100)) + .transport(opts -> opts.host(address.host()).port(address.port())) + .transport(opts -> opts.connectTimeout(CONNECT_TIMEOUT)) + .startAwait(); + + Cluster otherNode = + new ClusterImpl() + .membership(opts -> opts.seedMembers(address)) + .gossip(opts -> opts.gossipInterval(100)) + .failureDetector(opts -> opts.pingInterval(100)) + .membership(opts -> opts.syncInterval(100)) + .transport(opts -> opts.connectTimeout(CONNECT_TIMEOUT)) + .startAwait(); + + assertEquals(2, seedNode.members().size()); + assertEquals(2, otherNode.members().size()); + + for (int i = 0; i < 10; i++) { + seedNode.shutdown(); + seedNode.onShutdown().then(Mono.delay(Duration.ofMillis(100))).block(); + + seedNode = + new ClusterImpl() + .gossip(opts -> opts.gossipInterval(100)) + .failureDetector(opts -> opts.pingInterval(100)) + .membership(opts -> opts.syncInterval(100)) + .transport(opts -> opts.host(address.host()).port(address.port())) + .transport(opts -> opts.connectTimeout(CONNECT_TIMEOUT)) + .startAwait(); + + TimeUnit.SECONDS.sleep(1); + + assertEquals(2, seedNode.members().size()); + assertEquals(2, otherNode.members().size()); + } + } + @Test public void testMembersAccessFromScheduler() { // Start seed node