@@ -1328,6 +1328,109 @@ TEST_P(BinderRpcAccessor, InjectNoSockaddrProvided) {
13281328 EXPECT_EQ (status, OK);
13291329}
13301330
1331+ class BinderRpcAccessorNoConnection : public ::testing::Test {};
1332+
1333+ TEST_F (BinderRpcAccessorNoConnection, listServices) {
1334+ const String16 kInstanceName (" super.cool.service/better_than_default" );
1335+ const String16 kInstanceName2 (" super.cool.service/better_than_default2" );
1336+
1337+ auto receipt =
1338+ addAccessorProvider ({String8 (kInstanceName ).c_str (), String8 (kInstanceName2 ).c_str ()},
1339+ [&](const String16&) -> sp<IBinder> { return nullptr ; });
1340+ EXPECT_FALSE (receipt.expired ());
1341+ Vector<String16> list =
1342+ defaultServiceManager ()->listServices (IServiceManager::DUMP_FLAG_PRIORITY_ALL);
1343+ bool name1 = false ;
1344+ bool name2 = false ;
1345+ for (auto name : list) {
1346+ if (name == kInstanceName ) name1 = true ;
1347+ if (name == kInstanceName2 ) name2 = true ;
1348+ }
1349+ EXPECT_TRUE (name1);
1350+ EXPECT_TRUE (name2);
1351+ status_t status = removeAccessorProvider (receipt);
1352+ EXPECT_EQ (status, OK);
1353+ }
1354+
1355+ TEST_F (BinderRpcAccessorNoConnection, isDeclared) {
1356+ const String16 kInstanceName (" super.cool.service/default" );
1357+ const String16 kInstanceName2 (" still_counts_as_declared" );
1358+
1359+ auto receipt =
1360+ addAccessorProvider ({String8 (kInstanceName ).c_str (), String8 (kInstanceName2 ).c_str ()},
1361+ [&](const String16&) -> sp<IBinder> { return nullptr ; });
1362+ EXPECT_FALSE (receipt.expired ());
1363+ EXPECT_TRUE (defaultServiceManager ()->isDeclared (kInstanceName ));
1364+ EXPECT_TRUE (defaultServiceManager ()->isDeclared (kInstanceName2 ));
1365+ EXPECT_FALSE (defaultServiceManager ()->isDeclared (String16 (" doesnt_exist" )));
1366+ status_t status = removeAccessorProvider (receipt);
1367+ EXPECT_EQ (status, OK);
1368+ }
1369+
1370+ TEST_F (BinderRpcAccessorNoConnection, getDeclaredInstances) {
1371+ const String16 kInstanceName (" super.cool.service.IFoo/default" );
1372+ const String16 kInstanceName2 (" super.cool.service.IFoo/extra/default" );
1373+ const String16 kInstanceName3 (" super.cool.service.IFoo" );
1374+
1375+ auto receipt =
1376+ addAccessorProvider ({String8 (kInstanceName ).c_str (), String8 (kInstanceName2 ).c_str (),
1377+ String8 (kInstanceName3 ).c_str ()},
1378+ [&](const String16&) -> sp<IBinder> { return nullptr ; });
1379+ EXPECT_FALSE (receipt.expired ());
1380+ Vector<String16> list =
1381+ defaultServiceManager ()->getDeclaredInstances (String16 (" super.cool.service.IFoo" ));
1382+ // We would prefer ASSERT_EQ here, but we must call removeAccessorProvider
1383+ EXPECT_EQ (list.size (), 3u );
1384+ if (list.size () == 3 ) {
1385+ bool name1 = false ;
1386+ bool name2 = false ;
1387+ bool name3 = false ;
1388+ for (auto name : list) {
1389+ if (name == String16 (" default" )) name1 = true ;
1390+ if (name == String16 (" extra/default" )) name2 = true ;
1391+ if (name == String16 ()) name3 = true ;
1392+ }
1393+ EXPECT_TRUE (name1) << String8 (list[0 ]);
1394+ EXPECT_TRUE (name2) << String8 (list[1 ]);
1395+ EXPECT_TRUE (name3) << String8 (list[2 ]);
1396+ }
1397+
1398+ status_t status = removeAccessorProvider (receipt);
1399+ EXPECT_EQ (status, OK);
1400+ }
1401+
1402+ TEST_F (BinderRpcAccessorNoConnection, getDeclaredWrongInstances) {
1403+ const String16 kInstanceName (" super.cool.service.IFoo" );
1404+
1405+ auto receipt = addAccessorProvider ({String8 (kInstanceName ).c_str ()},
1406+ [&](const String16&) -> sp<IBinder> { return nullptr ; });
1407+ EXPECT_FALSE (receipt.expired ());
1408+ Vector<String16> list = defaultServiceManager ()->getDeclaredInstances (String16 (" unknown" ));
1409+ EXPECT_TRUE (list.empty ());
1410+
1411+ status_t status = removeAccessorProvider (receipt);
1412+ EXPECT_EQ (status, OK);
1413+ }
1414+
1415+ TEST_F (BinderRpcAccessorNoConnection, getDeclaredInstancesSlash) {
1416+ // This is treated as if there were no '/' and the declared instance is ""
1417+ const String16 kInstanceName (" super.cool.service.IFoo/" );
1418+
1419+ auto receipt = addAccessorProvider ({String8 (kInstanceName ).c_str ()},
1420+ [&](const String16&) -> sp<IBinder> { return nullptr ; });
1421+ EXPECT_FALSE (receipt.expired ());
1422+ Vector<String16> list =
1423+ defaultServiceManager ()->getDeclaredInstances (String16 (" super.cool.service.IFoo" ));
1424+ bool name1 = false ;
1425+ for (auto name : list) {
1426+ if (name == String16 (" " )) name1 = true ;
1427+ }
1428+ EXPECT_TRUE (name1);
1429+
1430+ status_t status = removeAccessorProvider (receipt);
1431+ EXPECT_EQ (status, OK);
1432+ }
1433+
13311434constexpr const char * kARpcInstance = " some.instance.name.IFoo/default" ;
13321435const char * kARpcSupportedServices [] = {
13331436 kARpcInstance ,
0 commit comments