diff options
| author | 2022-11-16 05:05:43 +0000 | |
|---|---|---|
| committer | 2022-11-16 05:05:43 +0000 | |
| commit | 3e49ad4d13369ce744ad1e94c87b040eb08beebe (patch) | |
| tree | 95475502847bfda1c958f646c17ccd33cb25463d | |
| parent | a8c0dd747c7aa7127d0bf0f53bcea5ac955b8339 (diff) | |
| parent | ce94b75b68df3e07e9c73d42eaa59cfce0929e53 (diff) | |
Merge "servicemanager: add tests for updatable-via-apex"
| -rw-r--r-- | cmds/servicemanager/ServiceManager.cpp | 3 | ||||
| -rw-r--r-- | cmds/servicemanager/test_sm.cpp | 54 |
2 files changed, 54 insertions, 3 deletions
diff --git a/cmds/servicemanager/ServiceManager.cpp b/cmds/servicemanager/ServiceManager.cpp index 2ae61b9603..cc038ae0d4 100644 --- a/cmds/servicemanager/ServiceManager.cpp +++ b/cmds/servicemanager/ServiceManager.cpp @@ -136,6 +136,7 @@ static std::optional<std::string> getVintfUpdatableApex(const std::string& name) updatableViaApex = manifestInstance.updatableViaApex(); return false; // break (libvintf uses opposite convention) }); + if (updatableViaApex.has_value()) return true; // break (found match) return false; // continue }); @@ -154,7 +155,7 @@ static std::vector<std::string> getVintfUpdatableInstances(const std::string& ap manifestInstance.interface() + "/" + manifestInstance.instance(); instances.push_back(aname); } - return false; // continue + return true; // continue (libvintf uses opposite convention) }); return false; // continue }); diff --git a/cmds/servicemanager/test_sm.cpp b/cmds/servicemanager/test_sm.cpp index 5d5a75e174..0fd8d8ee2a 100644 --- a/cmds/servicemanager/test_sm.cpp +++ b/cmds/servicemanager/test_sm.cpp @@ -14,13 +14,15 @@ * limitations under the License. */ +#include <android-base/properties.h> +#include <android-base/strings.h> #include <android/os/BnServiceCallback.h> #include <binder/Binder.h> -#include <binder/ProcessState.h> #include <binder/IServiceManager.h> +#include <binder/ProcessState.h> #include <cutils/android_filesystem_config.h> -#include <gtest/gtest.h> #include <gmock/gmock.h> +#include <gtest/gtest.h> #include "Access.h" #include "ServiceManager.h" @@ -75,6 +77,11 @@ static sp<ServiceManager> getPermissiveServiceManager() { return sm; } +static bool isCuttlefish() { + return android::base::StartsWith(android::base::GetProperty("ro.product.vendor.device", ""), + "vsoc_"); +} + TEST(AddService, HappyHappy) { auto sm = getPermissiveServiceManager(); EXPECT_TRUE(sm->addService("foo", getBinder(), false /*allowIsolated*/, @@ -306,6 +313,49 @@ TEST(ListServices, CriticalServices) { EXPECT_THAT(out, ElementsAre("sa")); } +TEST(Vintf, UpdatableViaApex) { + if (!isCuttlefish()) GTEST_SKIP() << "Skipping non-Cuttlefish devices"; + + auto sm = getPermissiveServiceManager(); + std::optional<std::string> updatableViaApex; + EXPECT_TRUE(sm->updatableViaApex("android.hardware.camera.provider.ICameraProvider/internal/0", + &updatableViaApex) + .isOk()); + EXPECT_EQ(std::make_optional<std::string>("com.google.emulated.camera.provider.hal"), + updatableViaApex); +} + +TEST(Vintf, UpdatableViaApex_InvalidNameReturnsNullOpt) { + if (!isCuttlefish()) GTEST_SKIP() << "Skipping non-Cuttlefish devices"; + + auto sm = getPermissiveServiceManager(); + std::optional<std::string> updatableViaApex; + EXPECT_TRUE(sm->updatableViaApex("android.hardware.camera.provider.ICameraProvider", + &updatableViaApex) + .isOk()); // missing instance name + EXPECT_EQ(std::nullopt, updatableViaApex); +} + +TEST(Vintf, GetUpdatableNames) { + if (!isCuttlefish()) GTEST_SKIP() << "Skipping non-Cuttlefish devices"; + + auto sm = getPermissiveServiceManager(); + std::vector<std::string> names; + EXPECT_TRUE(sm->getUpdatableNames("com.google.emulated.camera.provider.hal", &names).isOk()); + EXPECT_EQ(std::vector< + std::string>{"android.hardware.camera.provider.ICameraProvider/internal/0"}, + names); +} + +TEST(Vintf, GetUpdatableNames_InvalidApexNameReturnsEmpty) { + if (!isCuttlefish()) GTEST_SKIP() << "Skipping non-Cuttlefish devices"; + + auto sm = getPermissiveServiceManager(); + std::vector<std::string> names; + EXPECT_TRUE(sm->getUpdatableNames("non.existing.apex.name", &names).isOk()); + EXPECT_EQ(std::vector<std::string>{}, names); +} + class CallbackHistorian : public BnServiceCallback { Status onRegistration(const std::string& name, const sp<IBinder>& binder) override { registrations.push_back(name); |