@@ -32,6 +32,52 @@ 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 (100 ))
43+ .failureDetector (opts -> opts .pingInterval (100 ))
44+ .membership (opts -> opts .syncInterval (100 ))
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 (100 ))
53+ .failureDetector (opts -> opts .pingInterval (100 ))
54+ .membership (opts -> opts .syncInterval (100 ))
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 < 10 ; i ++) {
62+ seedNode .shutdown ();
63+ seedNode .onShutdown ().then (Mono .delay (Duration .ofMillis (100 ))).block ();
64+
65+ seedNode =
66+ new ClusterImpl ()
67+ .gossip (opts -> opts .gossipInterval (100 ))
68+ .failureDetector (opts -> opts .pingInterval (100 ))
69+ .membership (opts -> opts .syncInterval (100 ))
70+ .transport (opts -> opts .host (address .host ()).port (address .port ()))
71+ .transport (opts -> opts .connectTimeout (CONNECT_TIMEOUT ))
72+ .startAwait ();
73+
74+ TimeUnit .SECONDS .sleep (1 );
75+
76+ assertEquals (2 , seedNode .members ().size ());
77+ assertEquals (2 , otherNode .members ().size ());
78+ }
79+ }
80+
3581 @ Test
3682 public void testMembersAccessFromScheduler () {
3783 // Start seed node
0 commit comments