11package com .datastax .oss .driver .core .metadata ;
22
33import static org .assertj .core .api .Assertions .assertThat ;
4- import static org .junit .Assume .assumeTrue ;
54
65import com .datastax .oss .driver .api .core .CqlSession ;
7- import com .datastax .oss .driver .api .core .Version ;
86import com .datastax .oss .driver .api .core .config .DefaultDriverOption ;
97import com .datastax .oss .driver .api .core .config .DriverConfigLoader ;
108import com .datastax .oss .driver .api .core .cql .ResultSet ;
119import com .datastax .oss .driver .api .core .metadata .EndPoint ;
1210import com .datastax .oss .driver .api .core .metadata .Node ;
11+ import com .datastax .oss .driver .api .testinfra .ScyllaRequirement ;
1312import com .datastax .oss .driver .api .testinfra .ccm .CcmBridge ;
1413import com .datastax .oss .driver .api .testinfra .session .SessionUtils ;
1514import java .net .InetAddress ;
1918import java .util .Objects ;
2019import java .util .Set ;
2120import java .util .stream .Collectors ;
22- import org .junit .Before ;
2321import org .junit .Test ;
2422
23+ @ ScyllaRequirement (minOSS = "6.2.0" , minEnterprise = "2025.1.0" )
2524public class ZeroTokenNodesIT {
26-
27- @ Before
28- public void checkScyllaVersion () {
29- // minOSS = "6.2.0",
30- // minEnterprise = "2025.1.0",
31- // Zero-token nodes introduced in scylladb/scylladb#19684
32- // 2025.1 is an estimated future version and it still may not have this change in.
33- // This number may need to be adjusted once CI picks up this test.
34- assumeTrue (CcmBridge .SCYLLA_ENABLEMENT );
35- if (CcmBridge .SCYLLA_ENTERPRISE ) {
36- assumeTrue (
37- CcmBridge .VERSION .compareTo (Objects .requireNonNull (Version .parse ("2025.1.0" ))) >= 0 );
38- } else {
39- assumeTrue (CcmBridge .VERSION .compareTo (Objects .requireNonNull (Version .parse ("6.2.0" ))) >= 0 );
40- }
41- }
42-
4325 @ Test
4426 public void should_not_ignore_zero_token_peer_when_option_is_enabled () {
4527 CqlSession session = null ;
4628 CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
47- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (3 ).withIpPrefix ( "127.0.1." ). build ()) {
29+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (3 ).build ()) {
4830 ccmBridge .create ();
4931 ccmBridge .startWithArgs ("--wait-for-binary-proto" );
5032 ccmBridge .addWithoutStart (4 , "dc1" );
@@ -63,8 +45,13 @@ public void should_not_ignore_zero_token_peer_when_option_is_enabled() {
6345 Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
6446 Set <String > toStrings =
6547 nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
48+
6649 assertThat (toStrings )
67- .containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" , "/127.0.1.3:9042" , "/127.0.1.4:9042" );
50+ .containsOnly (
51+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
52+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )),
53+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (3 )),
54+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (4 )));
6855 } finally {
6956 if (session != null ) session .close ();
7057 }
@@ -74,7 +61,7 @@ public void should_not_ignore_zero_token_peer_when_option_is_enabled() {
7461 public void should_not_discover_zero_token_DC_when_option_is_disabled () {
7562 CqlSession session = null ;
7663 CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
77- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).withIpPrefix ( "127.0.1." ). build ()) {
64+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).build ()) {
7865 ccmBridge .create ();
7966 ccmBridge .updateNodeConfig (3 , "join_ring" , false );
8067 ccmBridge .updateNodeConfig (4 , "join_ring" , false );
@@ -97,11 +84,15 @@ public void should_not_discover_zero_token_DC_when_option_is_disabled() {
9784 Objects .requireNonNull (rs .one ()).getInetAddress ("rpc_address" );
9885 landedOn .add (Objects .requireNonNull (broadcastRpcInetAddress ).toString ());
9986 }
100- assertThat (landedOn ).containsOnly ("/127.0.1.1" , "/127.0.1.2" );
87+ assertThat (landedOn )
88+ .containsOnly ("/" + ccmBridge .getNodeIpAddress (1 ), "/" + ccmBridge .getNodeIpAddress (2 ));
10189 Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
10290 Set <String > toStrings =
10391 nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
104- assertThat (toStrings ).containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" );
92+ assertThat (toStrings )
93+ .containsOnly (
94+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
95+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )));
10596 } finally {
10697 if (session != null ) session .close ();
10798 }
@@ -111,7 +102,7 @@ public void should_not_discover_zero_token_DC_when_option_is_disabled() {
111102 public void should_discover_zero_token_DC_when_option_is_enabled () {
112103 CqlSession session = null ;
113104 CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
114- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).withIpPrefix ( "127.0.1." ). build ()) {
105+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).build ()) {
115106 ccmBridge .create ();
116107 ccmBridge .updateNodeConfig (3 , "join_ring" , false );
117108 ccmBridge .updateNodeConfig (4 , "join_ring" , false );
@@ -136,13 +127,18 @@ public void should_discover_zero_token_DC_when_option_is_enabled() {
136127 landedOn .add (Objects .requireNonNull (broadcastRpcInetAddress ).toString ());
137128 }
138129 // LBP should still target local datacenter:
139- assertThat (landedOn ).containsOnly ("/127.0.1.1" , "/127.0.1.2" );
130+ assertThat (landedOn )
131+ .containsOnly ("/" + ccmBridge .getNodeIpAddress (1 ), "/" + ccmBridge .getNodeIpAddress (2 ));
140132 Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
141133 Set <String > toStrings =
142134 nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
143135 // Metadata should have all nodes:
144136 assertThat (toStrings )
145- .containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" , "/127.0.1.3:9042" , "/127.0.1.4:9042" );
137+ .containsOnly (
138+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
139+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )),
140+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (3 )),
141+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (4 )));
146142 } finally {
147143 if (session != null ) session .close ();
148144 }
@@ -152,7 +148,7 @@ public void should_discover_zero_token_DC_when_option_is_enabled() {
152148 public void should_connect_to_zero_token_contact_point () {
153149 CqlSession session = null ;
154150 CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
155- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 ).withIpPrefix ( "127.0.1." ). build ()) {
151+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 ).build ()) {
156152 ccmBridge .create ();
157153 ccmBridge .startWithArgs ("--wait-for-binary-proto" );
158154 ccmBridge .addWithoutStart (3 , "dc1" );
@@ -169,7 +165,11 @@ public void should_connect_to_zero_token_contact_point() {
169165 Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
170166 Set <String > toStrings =
171167 nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
172- assertThat (toStrings ).containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" , "/127.0.1.3:9042" );
168+ assertThat (toStrings )
169+ .containsOnly (
170+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
171+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )),
172+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (3 )));
173173 } finally {
174174 if (session != null ) session .close ();
175175 }
@@ -182,7 +182,7 @@ public void should_connect_to_zero_token_DC() {
182182 // method.
183183 CqlSession session = null ;
184184 CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
185- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).withIpPrefix ( "127.0.1." ). build ()) {
185+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).build ()) {
186186 ccmBridge .create ();
187187 ccmBridge .updateNodeConfig (3 , "join_ring" , false );
188188 ccmBridge .updateNodeConfig (4 , "join_ring" , false );
@@ -207,12 +207,17 @@ public void should_connect_to_zero_token_DC() {
207207 landedOn .add (Objects .requireNonNull (broadcastRpcInetAddress ).toString ());
208208 }
209209 // LBP should still target local datacenter:
210- assertThat (landedOn ).containsOnly ("/127.0.1.1" , "/127.0.1.2" );
210+ assertThat (landedOn )
211+ .containsOnly ("/" + ccmBridge .getNodeIpAddress (1 ), "/" + ccmBridge .getNodeIpAddress (2 ));
211212 Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
212213 Set <String > toStrings =
213214 nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
214215 // Metadata should have valid ordinary peers plus zero-token contact point:
215- assertThat (toStrings ).containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" , "/127.0.1.3:9042" );
216+ assertThat (toStrings )
217+ .containsOnly (
218+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
219+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )),
220+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (3 )));
216221 } finally {
217222 if (session != null ) session .close ();
218223 }
0 commit comments