diff options
Diffstat (limited to 'libs/fakeservicemanager/FakeServiceManager.cpp')
-rw-r--r-- | libs/fakeservicemanager/FakeServiceManager.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libs/fakeservicemanager/FakeServiceManager.cpp b/libs/fakeservicemanager/FakeServiceManager.cpp index 80661c1cbd..241c866558 100644 --- a/libs/fakeservicemanager/FakeServiceManager.cpp +++ b/libs/fakeservicemanager/FakeServiceManager.cpp @@ -16,6 +16,10 @@ #include "fakeservicemanager/FakeServiceManager.h" +using android::sp; +using android::FakeServiceManager; +using android::setDefaultServiceManager; + namespace android { FakeServiceManager::FakeServiceManager() {} @@ -123,3 +127,24 @@ void FakeServiceManager::clear() { mNameToService.clear(); } } // namespace android + +[[clang::no_destroy]] static sp<FakeServiceManager> gFakeServiceManager; +[[clang::no_destroy]] static std::once_flag gSmOnce; + +extern "C" { + +// Setup FakeServiceManager to mock dependencies in test using this API for rust backend +void setupFakeServiceManager() { + /* Create a FakeServiceManager instance and add required services */ + std::call_once(gSmOnce, [&]() { + gFakeServiceManager = new FakeServiceManager(); + android::setDefaultServiceManager(gFakeServiceManager); + }); +} + +// Clear existing services from Fake SM for rust backend +void clearFakeServiceManager() { + LOG_ALWAYS_FATAL_IF(gFakeServiceManager == nullptr, "Fake Service Manager is not available. Forgot to call setupFakeServiceManager?"); + gFakeServiceManager->clear(); +} +} //extern "C"
\ No newline at end of file |