Prepare vts to use libvintf.
* Move method getHals() and getInstances() to HalGroup.h.
* Add method getHal() in HalGroup.h which identify a hal that
matches the given name and version.
* Add method containsVersion() in MatrixHal.h and ManifestHal.h
which checkes whether the hal supports the given version.
* Add methods getInstances() and hasInstance() in MatrixHal.h and
ManifestHal.h
Bug: 68023937
Test: make libvintf
run libvintf_test
Change-Id: If6afa789f84af95f9752aee17b6fd9d97236f85c
diff --git a/test/main.cpp b/test/main.cpp
index 507e0d1..8ec02a8 100644
--- a/test/main.cpp
+++ b/test/main.cpp
@@ -398,25 +398,25 @@
TEST_F(LibVintfTest, HalManifestInstances) {
HalManifest vm = testDeviceManifest();
- EXPECT_EQ(vm.getInstances("android.hardware.camera", "ICamera"),
- std::set<std::string>({"default", "legacy/0"}));
- EXPECT_EQ(vm.getInstances("android.hardware.camera", "IBetterCamera"),
- std::set<std::string>({"camera"}));
- EXPECT_EQ(vm.getInstances("android.hardware.camera", "INotExist"),
- std::set<std::string>({}));
- EXPECT_EQ(vm.getInstances("android.hardware.nfc", "INfc"),
- std::set<std::string>({"default"}));
+ EXPECT_EQ(vm.getInstances("android.hardware.camera", {2, 0}, "ICamera"),
+ std::set<std::string>({"default", "legacy/0"}));
+ EXPECT_EQ(vm.getInstances("android.hardware.camera", {2, 0}, "IBetterCamera"),
+ std::set<std::string>({"camera"}));
+ EXPECT_EQ(vm.getInstances("android.hardware.camera", {2, 0}, "INotExist"),
+ std::set<std::string>({}));
+ EXPECT_EQ(vm.getInstances("android.hardware.nfc", {1, 0}, "INfc"),
+ std::set<std::string>({"default"}));
- EXPECT_TRUE(vm.hasInstance("android.hardware.camera", "ICamera", "default"));
- EXPECT_TRUE(vm.hasInstance("android.hardware.camera", "ICamera", "legacy/0"));
- EXPECT_TRUE(vm.hasInstance("android.hardware.camera", "IBetterCamera", "camera"));
- EXPECT_TRUE(vm.hasInstance("android.hardware.nfc", "INfc", "default"));
+ EXPECT_TRUE(vm.hasInstance("android.hardware.camera", {2, 0}, "ICamera", "default"));
+ EXPECT_TRUE(vm.hasInstance("android.hardware.camera", {2, 0}, "ICamera", "legacy/0"));
+ EXPECT_TRUE(vm.hasInstance("android.hardware.camera", {2, 0}, "IBetterCamera", "camera"));
+ EXPECT_TRUE(vm.hasInstance("android.hardware.nfc", {1, 0}, "INfc", "default"));
- EXPECT_FALSE(vm.hasInstance("android.hardware.camera", "INotExist", "default"));
- EXPECT_FALSE(vm.hasInstance("android.hardware.camera", "ICamera", "notexist"));
- EXPECT_FALSE(vm.hasInstance("android.hardware.camera", "IBetterCamera", "default"));
- EXPECT_FALSE(vm.hasInstance("android.hardware.camera", "INotExist", "notexist"));
- EXPECT_FALSE(vm.hasInstance("android.hardware.nfc", "INfc", "notexist"));
+ EXPECT_FALSE(vm.hasInstance("android.hardware.camera", {2, 0}, "INotExist", "default"));
+ EXPECT_FALSE(vm.hasInstance("android.hardware.camera", {2, 0}, "ICamera", "notexist"));
+ EXPECT_FALSE(vm.hasInstance("android.hardware.camera", {2, 0}, "IBetterCamera", "default"));
+ EXPECT_FALSE(vm.hasInstance("android.hardware.camera", {2, 0}, "INotExist", "notexist"));
+ EXPECT_FALSE(vm.hasInstance("android.hardware.nfc", {1, 0}, "INfc", "notexist"));
}
TEST_F(LibVintfTest, VersionConverter) {
@@ -663,15 +663,7 @@
{"android.hardware.camera", "android.hardware.nfc"}));
}
-TEST_F(LibVintfTest, HalManifestGetInterfaceNames) {
- HalManifest vm = testDeviceManifest();
- EXPECT_EQ(vm.getInterfaceNames("android.hardware.camera"),
- std::set<std::string>({"ICamera", "IBetterCamera"}));
- EXPECT_EQ(vm.getInterfaceNames("android.hardware.nfc"),
- std::set<std::string>({"INfc"}));
-}
-
-TEST_F(LibVintfTest, HalManifestGetHal) {
+TEST_F(LibVintfTest, HalManifestGetAllHals) {
HalManifest vm = testDeviceManifest();
EXPECT_NE(getAnyHal(vm, "android.hardware.camera"), nullptr);
EXPECT_EQ(getAnyHal(vm, "non-existent"), nullptr);
@@ -683,6 +675,113 @@
}
}
+TEST_F(LibVintfTest, HalManifestGetHals) {
+ HalManifest vm;
+ EXPECT_TRUE(
+ add(vm, ManifestHal{.format = HalFormat::HIDL,
+ .name = "android.hardware.camera",
+ .versions = {Version(1, 2)},
+ .transportArch = {Transport::HWBINDER, Arch::ARCH_EMPTY},
+ .interfaces = {{"ICamera", {"ICamera", {"legacy/0", "default"}}},
+ {"IBetterCamera", {"IBetterCamera", {"camera"}}}}}));
+ EXPECT_TRUE(
+ add(vm, ManifestHal{.format = HalFormat::HIDL,
+ .name = "android.hardware.camera",
+ .versions = {Version(2, 0)},
+ .transportArch = {Transport::HWBINDER, Arch::ARCH_EMPTY},
+ .interfaces = {{"ICamera", {"ICamera", {"legacy/0", "default"}}},
+ {"IBetterCamera", {"IBetterCamera", {"camera"}}}}}));
+ EXPECT_TRUE(add(vm, ManifestHal{.format = HalFormat::HIDL,
+ .name = "android.hardware.nfc",
+ .versions = {Version(1, 0), Version(2, 1)},
+ .transportArch = {Transport::PASSTHROUGH, Arch::ARCH_32_64},
+ .interfaces = {{"INfc", {"INfc", {"default"}}}}}));
+ ManifestHal expectedCameraHalV1_2 =
+ ManifestHal{.format = HalFormat::HIDL,
+ .name = "android.hardware.camera",
+ .versions = {Version(1, 2)},
+ .transportArch = {Transport::HWBINDER, Arch::ARCH_EMPTY},
+ .interfaces = {{"ICamera", {"ICamera", {"legacy/0", "default"}}},
+ {"IBetterCamera", {"IBetterCamera", {"camera"}}}}};
+ ManifestHal expectedCameraHalV2_0 =
+ ManifestHal{.format = HalFormat::HIDL,
+ .name = "android.hardware.camera",
+ .versions = {Version(2, 0)},
+ .transportArch = {Transport::HWBINDER, Arch::ARCH_EMPTY},
+ .interfaces = {{"ICamera", {"ICamera", {"legacy/0", "default"}}},
+ {"IBetterCamera", {"IBetterCamera", {"camera"}}}}};
+ ManifestHal expectedNfcHal =
+ ManifestHal{.format = HalFormat::HIDL,
+ .name = "android.hardware.nfc",
+ .versions = {Version(1, 0), Version(2, 1)},
+ .transportArch = {Transport::PASSTHROUGH, Arch::ARCH_32_64},
+ .interfaces = {{"INfc", {"INfc", {"default"}}}}};
+ auto cameraHals = vm.getHals("android.hardware.camera");
+ EXPECT_EQ((int)cameraHals.size(), 2);
+ EXPECT_EQ(*cameraHals[0], expectedCameraHalV1_2);
+ EXPECT_EQ(*cameraHals[1], expectedCameraHalV2_0);
+ auto nfcHals = vm.getHals("android.hardware.nfc");
+ EXPECT_EQ((int)nfcHals.size(), 1);
+ EXPECT_EQ(*nfcHals[0], expectedNfcHal);
+
+ EXPECT_EQ(*vm.getHal("android.hardware.camera", {1, 1}), expectedCameraHalV1_2);
+ EXPECT_EQ(*vm.getHal("android.hardware.camera", {2, 0}), expectedCameraHalV2_0);
+ EXPECT_EQ(*vm.getHal("android.hardware.nfc", {1, 0}), expectedNfcHal);
+ EXPECT_EQ(*vm.getHal("android.hardware.nfc", {2, 0}), expectedNfcHal);
+ EXPECT_EQ(*vm.getHal("android.hardware.nfc", {2, 1}), expectedNfcHal);
+
+ EXPECT_EQ(vm.getHal("non-existent", {1, 0}), nullptr);
+ EXPECT_EQ(vm.getHal("android.hardware.camera", {2, 1}), nullptr);
+ EXPECT_EQ(vm.getHal("android.hardware.camera", {1, 3}), nullptr);
+ EXPECT_EQ(vm.getHal("android.hardware.nfc", {1, 1}), nullptr);
+ EXPECT_EQ(vm.getHal("android.hardware.nfc", {3, 0}), nullptr);
+}
+
+TEST_F(LibVintfTest, CompatibilityMatrixGetHals) {
+ CompatibilityMatrix cm;
+ EXPECT_TRUE(add(cm, MatrixHal{HalFormat::NATIVE,
+ "android.hardware.camera",
+ {{VersionRange(1, 2, 3), VersionRange(4, 5, 6)}},
+ false /* optional */,
+ testHalInterfaces()}));
+ EXPECT_TRUE(add(cm, MatrixHal{HalFormat::NATIVE,
+ "android.hardware.nfc",
+ {{VersionRange(4, 5, 6), VersionRange(10, 11, 12)}},
+ true /* optional */,
+ testHalInterfaces()}));
+
+ MatrixHal expectedCameraHal = MatrixHal{
+ HalFormat::NATIVE,
+ "android.hardware.camera",
+ {{VersionRange(1, 2, 3), VersionRange(4, 5, 6)}},
+ false /* optional */,
+ testHalInterfaces(),
+ };
+ MatrixHal expectedNfcHal = MatrixHal{HalFormat::NATIVE,
+ "android.hardware.nfc",
+ {{VersionRange(4, 5, 6), VersionRange(10, 11, 12)}},
+ true /* optional */,
+ testHalInterfaces()};
+ auto cameraHals = cm.getHals("android.hardware.camera");
+ EXPECT_EQ((int)cameraHals.size(), 1);
+ EXPECT_EQ(*cameraHals[0], expectedCameraHal);
+ auto nfcHals = cm.getHals("android.hardware.nfc");
+ EXPECT_EQ((int)nfcHals.size(), 1);
+ EXPECT_EQ(*nfcHals[0], expectedNfcHal);
+
+ EXPECT_EQ(*cm.getHal("android.hardware.camera", {1, 2}), expectedCameraHal);
+ EXPECT_EQ(*cm.getHal("android.hardware.camera", {1, 3}), expectedCameraHal);
+ EXPECT_EQ(*cm.getHal("android.hardware.camera", {4, 5}), expectedCameraHal);
+ EXPECT_EQ(*cm.getHal("android.hardware.nfc", {4, 5}), expectedNfcHal);
+ EXPECT_EQ(*cm.getHal("android.hardware.nfc", {10, 12}), expectedNfcHal);
+
+ EXPECT_EQ(cm.getHal("non-existent", {1, 0}), nullptr);
+ EXPECT_EQ(cm.getHal("android.hardware.camera", {2, 1}), nullptr);
+ EXPECT_EQ(cm.getHal("android.hardware.camera", {1, 0}), nullptr);
+ EXPECT_EQ(cm.getHal("android.hardware.nfc", {3, 0}), nullptr);
+ EXPECT_EQ(cm.getHal("android.hardware.nfc", {4, 7}), nullptr);
+}
+
TEST_F(LibVintfTest, RuntimeInfo) {
RuntimeInfo ki = testRuntimeInfo();
using KernelConfigs = std::vector<KernelConfig>;