@@ -32,6 +32,48 @@ public class ClusterTest extends BaseTest {
3232 public static final Duration TIMEOUT = Duration .ofSeconds (30 );
3333 public static final int CONNECT_TIMEOUT = 3000 ;
3434
35+ @ Test
36+ public void testStartStopRepeatedly () throws Exception {
37+ Address address = Address .from ("localhost:4848" );
38+
39+ // Start seed node
40+ Cluster seedNode =
41+ new ClusterImpl ()
42+ .gossip (opts -> opts .gossipInterval (1 ))
43+ .failureDetector (opts -> opts .pingInterval (1 ))
44+ .membership (opts -> opts .syncInterval (1 ))
45+ .transport (opts -> opts .host (address .host ()).port (address .port ()))
46+ .transport (opts -> opts .connectTimeout (CONNECT_TIMEOUT ))
47+ .startAwait ();
48+
49+ Cluster otherNode =
50+ new ClusterImpl ()
51+ .membership (opts -> opts .seedMembers (address ))
52+ .gossip (opts -> opts .gossipInterval (1 ))
53+ .failureDetector (opts -> opts .pingInterval (1 ))
54+ .membership (opts -> opts .syncInterval (1 ))
55+ .transport (opts -> opts .connectTimeout (CONNECT_TIMEOUT ))
56+ .startAwait ();
57+
58+ assertEquals (2 , seedNode .members ().size ());
59+ assertEquals (2 , otherNode .members ().size ());
60+
61+ for (int i = 0 ; i < 15 ; i ++) {
62+ seedNode .shutdown ();
63+ seedNode .onShutdown ().then (Mono .delay (Duration .ofMillis (100 ))).block ();
64+
65+ seedNode =
66+ new ClusterImpl ()
67+ .transport (opts -> opts .host (address .host ()).port (address .port ()))
68+ .startAwait ();
69+
70+ TimeUnit .SECONDS .sleep (1 );
71+
72+ assertEquals (2 , seedNode .members ().size ());
73+ assertEquals (2 , otherNode .members ().size ());
74+ }
75+ }
76+
3577 @ Test
3678 public void testMembersAccessFromScheduler () {
3779 // Start seed node
0 commit comments