@@ -1366,4 +1366,122 @@ public void accept(final Collection<NameAndTypes> local, Collection<NameAndTypes
13661366 publisher .dispose ();
13671367 remoteNode .dispose ();
13681368 }
1369+
1370+ @ Test
1371+ public final void testGetServiceNamesAndTypesByNode () throws Exception {
1372+ final Node remoteNode = RCLJava .createNode ("test_get_service_names_and_types_remote_node" );
1373+ Service <rcljava .srv .AddTwoInts > service1 = node .<rcljava .srv .AddTwoInts >createService (
1374+ rcljava .srv .AddTwoInts .class , "test_get_service_names_and_types_one" ,
1375+ new TriConsumer <
1376+ RMWRequestId , rcljava .srv .AddTwoInts_Request , rcljava .srv .AddTwoInts_Response >()
1377+ {
1378+ public final void accept (
1379+ final RMWRequestId header ,
1380+ final rcljava .srv .AddTwoInts_Request request ,
1381+ final rcljava .srv .AddTwoInts_Response response )
1382+ {}
1383+ });
1384+ Service <rcljava .srv .AddTwoInts > service2 = node .<rcljava .srv .AddTwoInts >createService (
1385+ rcljava .srv .AddTwoInts .class , "test_get_service_names_and_types_two" ,
1386+ new TriConsumer <
1387+ RMWRequestId , rcljava .srv .AddTwoInts_Request , rcljava .srv .AddTwoInts_Response >()
1388+ {
1389+ public final void accept (
1390+ final RMWRequestId header ,
1391+ final rcljava .srv .AddTwoInts_Request request ,
1392+ final rcljava .srv .AddTwoInts_Response response )
1393+ {}
1394+ });
1395+ Service <rcljava .srv .AddTwoInts > service3 = remoteNode .<rcljava .srv .AddTwoInts >createService (
1396+ rcljava .srv .AddTwoInts .class , "test_get_service_names_and_types_two" ,
1397+ new TriConsumer <
1398+ RMWRequestId , rcljava .srv .AddTwoInts_Request , rcljava .srv .AddTwoInts_Response >()
1399+ {
1400+ public final void accept (
1401+ final RMWRequestId header ,
1402+ final rcljava .srv .AddTwoInts_Request request ,
1403+ final rcljava .srv .AddTwoInts_Response response )
1404+ {}
1405+ });
1406+ Service <rcljava .srv .AddTwoInts > service4 = remoteNode .<rcljava .srv .AddTwoInts >createService (
1407+ rcljava .srv .AddTwoInts .class , "test_get_service_names_and_types_three" ,
1408+ new TriConsumer <
1409+ RMWRequestId , rcljava .srv .AddTwoInts_Request , rcljava .srv .AddTwoInts_Response >()
1410+ {
1411+ public final void accept (
1412+ final RMWRequestId header ,
1413+ final rcljava .srv .AddTwoInts_Request request ,
1414+ final rcljava .srv .AddTwoInts_Response response )
1415+ {}
1416+ });
1417+ Client <rcljava .srv .AddTwoInts > client = node .<rcljava .srv .AddTwoInts >createClient (
1418+ rcljava .srv .AddTwoInts .class , "test_get_service_names_and_types_this_should_not_appear" );
1419+
1420+ BiConsumer <Collection <NameAndTypes >, Collection <NameAndTypes >> validateNameAndTypes =
1421+ new BiConsumer <Collection <NameAndTypes >, Collection <NameAndTypes >>() {
1422+ public void accept (final Collection <NameAndTypes > local , Collection <NameAndTypes > remote ) {
1423+ // TODO(ivanpauno): Using assertj may help a lot here https://assertj.github.io/doc/.
1424+ assertEquals (local .size (), 2 );
1425+ assertTrue (
1426+ "service 'test_get_service_names_and_types_one' was not discovered for local node" ,
1427+ local .contains (
1428+ new NameAndTypes (
1429+ "/test_get_service_names_and_types_one" ,
1430+ new ArrayList (Arrays .asList ("rcljava/srv/AddTwoInts" )))));
1431+ assertTrue (
1432+ "service 'test_get_service_names_and_types_two' was not discovered for local node" ,
1433+ local .contains (
1434+ new NameAndTypes (
1435+ "/test_get_service_names_and_types_two" ,
1436+ new ArrayList (Arrays .asList ("rcljava/srv/AddTwoInts" )))));
1437+
1438+ assertEquals (remote .size (), 2 );
1439+ assertTrue (
1440+ "service 'test_get_service_names_and_types_two' was not discovered for remote node" ,
1441+ remote .contains (
1442+ new NameAndTypes (
1443+ "/test_get_service_names_and_types_two" ,
1444+ new ArrayList (Arrays .asList ("rcljava/srv/AddTwoInts" )))));
1445+ assertTrue (
1446+ "service 'test_get_service_names_and_types_three' was not discovered for remote node" ,
1447+ remote .contains (
1448+ new NameAndTypes (
1449+ "/test_get_service_names_and_types_three" ,
1450+ new ArrayList (Arrays .asList ("rcljava/srv/AddTwoInts" )))));
1451+ }
1452+ };
1453+
1454+ long start = System .currentTimeMillis ();
1455+ boolean ok = false ;
1456+ Collection <NameAndTypes > local = null ;
1457+ Collection <NameAndTypes > remote = null ;
1458+ do {
1459+ local = this .node .getServiceNamesAndTypesByNode ("test_node" , "/" );
1460+ remote = this .node .getServiceNamesAndTypesByNode (
1461+ "test_get_service_names_and_types_remote_node" , "/" );
1462+ try {
1463+ validateNameAndTypes .accept (local , remote );
1464+ ok = true ;
1465+ } catch (AssertionError err ) {
1466+ // ignore here, it's going to be validated again at the end.
1467+ }
1468+ // TODO(ivanpauno): We could wait for the graph guard condition to be triggered if that
1469+ // would be available.
1470+ try {
1471+ TimeUnit .MILLISECONDS .sleep (100 );
1472+ } catch (InterruptedException err ) {
1473+ // ignore
1474+ }
1475+ } while (!ok && System .currentTimeMillis () < start + 1000 );
1476+ assertNotNull (local );
1477+ assertNotNull (remote );
1478+ validateNameAndTypes .accept (local , remote );
1479+
1480+ service1 .dispose ();
1481+ service2 .dispose ();
1482+ service3 .dispose ();
1483+ service4 .dispose ();
1484+ client .dispose ();
1485+ remoteNode .dispose ();
1486+ }
13691487}
0 commit comments