From 909bc47536ac841061511695c2d191c8632da58d Mon Sep 17 00:00:00 2001 From: "deyaoren@google.com" Date: Wed, 7 Sep 2022 22:25:44 +0000 Subject: [PATCH] Clean up services created after running test Services created during new tests weren't properly cleaned up after tests. It caused slowdown of subsequent tests as described in b/244486404. This change kills/terminates services after test with apex services. To provide some context, original change is at https://android-review.googlesource.com/q/topic:vapex_stop_service. The issue was discovered by android test monitor and filed as a P0 bug. Bug: 244486404 Change-Id: Ie64e0eb1686e94ef543a457ea49d1d7aeab38c97 --- init/init_test.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/init/init_test.cpp b/init/init_test.cpp index 8362390cc..5c1e9efb0 100644 --- a/init/init_test.cpp +++ b/init/init_test.cpp @@ -246,6 +246,27 @@ void InitApexService(const std::string_view& init_template) { &ServiceList::GetInstance()); } +void CleanupApexServices() { + std::vector names; + for (const auto& s : ServiceList::GetInstance()) { + names.push_back(s->name()); + } + + for (const auto& name : names) { + auto s = ServiceList::GetInstance().FindService(name); + auto pid = s->pid(); + ServiceList::GetInstance().RemoveService(*s); + if (pid > 0) { + kill(pid, SIGTERM); + kill(pid, SIGKILL); + } + } + + ActionManager::GetInstance().RemoveActionIf([&](const std::unique_ptr& s) -> bool { + return true; + }); +} + void TestApexServicesInit(const std::vector& apex_services, const std::vector& other_apex_services, const std::vector non_apex_services) { @@ -270,13 +291,7 @@ void TestApexServicesInit(const std::vector& apex_services, TestRemoveApexService(other_apex_services, /*exist*/ true); TestRemoveApexService(non_apex_services, /*exist*/ true); - ServiceList::GetInstance().RemoveServiceIf([&](const std::unique_ptr& s) -> bool { - return true; - }); - - ActionManager::GetInstance().RemoveActionIf([&](const std::unique_ptr& s) -> bool { - return true; - }); + CleanupApexServices(); } TEST(init, StopServiceByApexName) {