Add getHal and getHals to VendorManifest.

Part of the effort to hide implementation details in libvintf.

Bug: 34620633

Test: libvintf_test
Change-Id: I673fa29be833f023ffe29ece0b3295cec2203e19
diff --git a/test/main.cpp b/test/main.cpp
index 97971e2..9f39d87 100644
--- a/test/main.cpp
+++ b/test/main.cpp
@@ -34,14 +34,20 @@
     }
 };
 
-TEST_F(LibVintfTest, Stringify) {
+static VendorManifest testVendorManifest() {
     VendorManifest vm;
-    vm.add(ManifestHal::hal("camera", ImplLevel::SOC, "msm8892",
+    vm.add(ManifestHal::hal("android.hardware.camera", ImplLevel::SOC, "msm8892",
             Version(2,0), Transport::HWBINDER));
-    vm.add(ManifestHal::hal("nfc", ImplLevel::GENERIC, "generic",
+    vm.add(ManifestHal::hal("android.hardware.nfc", ImplLevel::GENERIC, "generic",
             Version(1,0), Transport::PASSTHROUGH));
-    EXPECT_EQ(dump(vm), "hidl/camera/hwbinder/soc/msm8892/2.0:"
-                        "hidl/nfc/passthrough/generic/generic/1.0");
+
+    return vm;
+}
+
+TEST_F(LibVintfTest, Stringify) {
+    VendorManifest vm = testVendorManifest();
+    EXPECT_EQ(dump(vm), "hidl/android.hardware.camera/hwbinder/soc/msm8892/2.0:"
+                        "hidl/android.hardware.nfc/passthrough/generic/generic/1.0");
 
     EXPECT_EQ(to_string(HalFormat::HIDL), "hidl");
     EXPECT_EQ(to_string(HalFormat::NATIVE), "native");
@@ -54,22 +60,18 @@
 }
 
 TEST_F(LibVintfTest, VendorManifestConverter) {
-    VendorManifest vm;
-    vm.add(ManifestHal::hal("camera", ImplLevel::SOC, "msm8892",
-            Version(2,0), Transport::HWBINDER));
-    vm.add(ManifestHal::hal("nfc", ImplLevel::GENERIC, "generic",
-            Version(1,0), Transport::PASSTHROUGH));
+    VendorManifest vm = testVendorManifest();
     std::string xml = gVendorManifestConverter(vm);
     EXPECT_EQ(xml,
         "<manifest version=\"1.0\">\n"
         "    <hal format=\"hidl\">\n"
-        "        <name>camera</name>\n"
+        "        <name>android.hardware.camera</name>\n"
         "        <transport>hwbinder</transport>\n"
         "        <impl level=\"soc\">msm8892</impl>\n"
         "        <version>2.0</version>\n"
         "    </hal>\n"
         "    <hal format=\"hidl\">\n"
-        "        <name>nfc</name>\n"
+        "        <name>android.hardware.nfc</name>\n"
         "        <transport>passthrough</transport>\n"
         "        <impl level=\"generic\">generic</impl>\n"
         "        <version>1.0</version>\n"
@@ -97,13 +99,13 @@
 }
 
 TEST_F(LibVintfTest, MatrixHalConverter) {
-    MatrixHal mh{HalFormat::NATIVE, "camera",
+    MatrixHal mh{HalFormat::NATIVE, "android.hardware.camera",
             {{VersionRange(1,2,3), VersionRange(4,5,6)}},
             false /* optional */};
     std::string xml = gMatrixHalConverter(mh);
     EXPECT_EQ(xml,
         "<hal format=\"native\" optional=\"false\">\n"
-        "    <name>camera</name>\n"
+        "    <name>android.hardware.camera</name>\n"
         "    <version>1.2-3</version>\n"
         "    <version>4.5-6</version>\n"
         "</hal>\n");
@@ -114,10 +116,10 @@
 
 TEST_F(LibVintfTest, CompatibilityMatrixCoverter) {
     CompatibilityMatrix cm;
-    cm.add(MatrixHal{HalFormat::NATIVE, "camera",
+    cm.add(MatrixHal{HalFormat::NATIVE, "android.hardware.camera",
             {{VersionRange(1,2,3), VersionRange(4,5,6)}},
             false /* optional */});
-    cm.add(MatrixHal{HalFormat::NATIVE, "nfc",
+    cm.add(MatrixHal{HalFormat::NATIVE, "android.hardware.nfc",
             {{VersionRange(4,5,6), VersionRange(10,11,12)}},
             true /* optional */});
     cm.add(MatrixKernel{Version(3, 18),
@@ -128,12 +130,12 @@
     EXPECT_EQ(xml,
         "<compatibility-matrix version=\"1.0\">\n"
         "    <hal format=\"native\" optional=\"false\">\n"
-        "        <name>camera</name>\n"
+        "        <name>android.hardware.camera</name>\n"
         "        <version>1.2-3</version>\n"
         "        <version>4.5-6</version>\n"
         "    </hal>\n"
         "    <hal format=\"native\" optional=\"true\">\n"
-        "        <name>nfc</name>\n"
+        "        <name>android.hardware.nfc</name>\n"
         "        <version>4.5-6</version>\n"
         "        <version>10.11-12</version>\n"
         "    </hal>\n"
@@ -157,14 +159,10 @@
     EXPECT_TRUE(ManifestHal().isValid());
     EXPECT_TRUE(VendorManifest().isValid());
 
-    VendorManifest vm;
-    vm.add(ManifestHal::hal("camera", ImplLevel::SOC, "msm8892",
-            Version(2,0), Transport::HWBINDER));
-    vm.add(ManifestHal::hal("nfc", ImplLevel::GENERIC, "generic",
-            Version(1,0), Transport::PASSTHROUGH));
+    VendorManifest vm = testVendorManifest();
     EXPECT_TRUE(vm.isValid());
 
-    ManifestHal invalidHal = ManifestHal::hal("camera", ImplLevel::SOC, "msm8892",
+    ManifestHal invalidHal = ManifestHal::hal("android.hardware.camera", ImplLevel::SOC, "msm8892",
             {{Version(2,0), Version(2,1)}}, Transport::PASSTHROUGH);
     EXPECT_FALSE(invalidHal.isValid());
     VendorManifest vm2;
@@ -172,6 +170,18 @@
     EXPECT_FALSE(vm2.isValid());
 }
 
+TEST_F(LibVintfTest, VendorManifestGetHal) {
+    VendorManifest vm = testVendorManifest();
+    EXPECT_NE(vm.getHal("android.hardware.camera"), nullptr);
+    EXPECT_EQ(vm.getHal("non-existent"), nullptr);
+
+    std::vector<std::string> arr{"android.hardware.camera", "android.hardware.nfc"};
+    size_t i = 0;
+    for (const auto &hal : vm.getHals()) {
+        EXPECT_EQ(hal.name, arr[i++]);
+    }
+}
+
 int main(int argc, char **argv) {
     ::testing::InitGoogleTest(&argc, argv);
     return RUN_ALL_TESTS();