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
This commit is contained in:
deyaoren@google.com 2022-09-07 22:25:44 +00:00 committed by Deyao Ren
parent 344f71605c
commit 909bc47536

View file

@ -246,6 +246,27 @@ void InitApexService(const std::string_view& init_template) {
&ServiceList::GetInstance());
}
void CleanupApexServices() {
std::vector<std::string> 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<Action>& s) -> bool {
return true;
});
}
void TestApexServicesInit(const std::vector<std::string>& apex_services,
const std::vector<std::string>& other_apex_services,
const std::vector<std::string> non_apex_services) {
@ -270,13 +291,7 @@ void TestApexServicesInit(const std::vector<std::string>& apex_services,
TestRemoveApexService(other_apex_services, /*exist*/ true);
TestRemoveApexService(non_apex_services, /*exist*/ true);
ServiceList::GetInstance().RemoveServiceIf([&](const std::unique_ptr<Service>& s) -> bool {
return true;
});
ActionManager::GetInstance().RemoveActionIf([&](const std::unique_ptr<Action>& s) -> bool {
return true;
});
CleanupApexServices();
}
TEST(init, StopServiceByApexName) {