@@ -36,7 +36,8 @@ void shouldLoadPeersFromMainnetSnapshot() {
3636 // then
3737 assertNotNull (peers );
3838 assertThat (peers ).isNotEmpty ();
39- assertThat (peers .size ()).isGreaterThan (100 ); // Mainnet has many big ledger pools
39+ assertThat (peers .size ()).isLessThanOrEqualTo (25 ); // Limited to MAX_PEERS (25)
40+ assertThat (peers .size ()).isEqualTo (25 ); // Should have exactly 25 peers if snapshot has enough
4041 }
4142
4243 @ Test
@@ -56,11 +57,18 @@ void shouldExtractDomainRelaysCorrectly() {
5657 })
5758 .toList ();
5859
60+ // Due to randomization, we can't guarantee specific domains are present
61+ // Just verify that domain peers exist and have correct format
5962 assertThat (domainPeers ).isNotEmpty ();
6063
61- // Verify at least one known domain relay
62- assertThat (domainPeers )
63- .anyMatch (peer -> peer .getPeerId ().contains ("cardano.figment.io" ));
64+ domainPeers .forEach (peer -> {
65+ // Domain peers should have format address:port
66+ assertThat (peer .getPeerId ()).contains (":" );
67+
68+ // Metadata should indicate domain type
69+ Map <String , Object > metadata = (Map <String , Object >) peer .getMetadata ();
70+ assertThat (metadata .get ("type" )).isEqualTo ("domain" );
71+ });
6472 }
6573
6674 @ Test
@@ -182,13 +190,19 @@ void shouldExtractMultipleRelaysFromSinglePool() {
182190 List <Peer > peers = peerSnapshotService .loadPeersFromSnapshot (peerSnapshotFile , baseDirectory );
183191
184192 // then
185- // Nordic pool has multiple relays (Relay1-6.NordicPool.org)
186- List < Peer > nordicPoolRelays = peers . stream ()
187- . filter ( peer -> peer . getPeerId (). contains ( "NordicPool.org" ))
188- . toList ();
193+ // Due to randomization, we can't guarantee specific pools are in the selection
194+ // Verify we have peers limited to MAX_PEERS
195+ assertThat ( peers ). hasSizeLessThanOrEqualTo ( 25 );
196+ assertThat ( peers ). isNotEmpty ();
189197
190- assertThat (nordicPoolRelays ).isNotEmpty ();
191- assertThat (nordicPoolRelays .size ()).isGreaterThan (1 );
198+ // Verify all peers have valid format (address:port)
199+ peers .forEach (peer -> {
200+ assertThat (peer .getPeerId ()).contains (":" );
201+
202+ // All peers should have metadata with type
203+ Map <String , Object > metadata = (Map <String , Object >) peer .getMetadata ();
204+ assertThat (metadata ).containsKey ("type" );
205+ });
192206 }
193207
194208 @ Test
@@ -216,15 +230,20 @@ void shouldVerifyKnownMainnetRelays() {
216230 List <Peer > peers = peerSnapshotService .loadPeersFromSnapshot (peerSnapshotFile , baseDirectory );
217231
218232 // then
219- List <String > peerIds = peers .stream ()
220- .map (Peer ::getPeerId )
221- .toList ();
233+ // Due to randomization, we can't guarantee specific relays are present
234+ // Instead verify that all peers have valid format and metadata
235+ assertThat (peers ).isNotEmpty ();
236+ assertThat (peers .size ()).isEqualTo (25 );
222237
223- // Verify some known mainnet relays exist
224- assertThat (peerIds )
225- .anyMatch (id -> id .contains ("cardano.figment.io" ))
226- .anyMatch (id -> id .contains ("NordicPool.org" ))
227- .anyMatch (id -> id .contains ("cardanosuisse.com" ));
238+ peers .forEach (peer -> {
239+ // All peers should have a peer ID with port
240+ assertThat (peer .getPeerId ()).contains (":" );
241+
242+ // All peers should have metadata with type
243+ Map <String , Object > metadata = (Map <String , Object >) peer .getMetadata ();
244+ assertThat (metadata ).containsKey ("type" );
245+ assertThat (metadata .get ("type" )).isIn ("domain" , "IPv4" , "IPv6" );
246+ });
228247 }
229248
230249 @ Test
@@ -237,9 +256,9 @@ void shouldExtractAllRelaysFromAllPools() {
237256 List <Peer > peers = peerSnapshotService .loadPeersFromSnapshot (peerSnapshotFile , baseDirectory );
238257
239258 // then
240- // Mainnet snapshot has many pools with multiple relays each
241- // Total should be significantly higher than the number of pools
242- assertThat (peers .size ()).isGreaterThan ( 200 );
259+ // Peers are now limited to MAX_PEERS (25) and randomized
260+ assertThat ( peers . size ()). isLessThanOrEqualTo ( 25 );
261+ assertThat (peers .size ()).isEqualTo ( 25 ); // Should have exactly 25 peers
243262 }
244263
245264 @ Test
@@ -290,5 +309,31 @@ void shouldVerifyCommonPorts() {
290309 assertThat (ports )
291310 .contains ("3001" , "6000" );
292311 }
312+
313+ @ Test
314+ void shouldRandomizePeerSelection () {
315+ // given
316+ String peerSnapshotFile = "peer-snapshot.json" ;
317+ String baseDirectory = "../config/node/mainnet" ;
318+
319+ // when - load peers multiple times
320+ List <Peer > firstLoad = peerSnapshotService .loadPeersFromSnapshot (peerSnapshotFile , baseDirectory );
321+ List <Peer > secondLoad = peerSnapshotService .loadPeersFromSnapshot (peerSnapshotFile , baseDirectory );
322+
323+ // then - both should have 25 peers
324+ assertThat (firstLoad .size ()).isEqualTo (25 );
325+ assertThat (secondLoad .size ()).isEqualTo (25 );
326+
327+ // And they should be different due to randomization (very high probability)
328+ // We check if at least 5 peers are different in order
329+ long differentPeers = 0 ;
330+ for (int i = 0 ; i < Math .min (firstLoad .size (), secondLoad .size ()); i ++) {
331+ if (!firstLoad .get (i ).getPeerId ().equals (secondLoad .get (i ).getPeerId ())) {
332+ differentPeers ++;
333+ }
334+ }
335+
336+ assertThat (differentPeers ).isGreaterThan (5 );
337+ }
293338 }
294339}
0 commit comments