Merge "Fuzzer host support case when one hal imports another."
diff --git a/template/iface_fuzzer_test/iface_fuzzer_test.py b/template/iface_fuzzer_test/iface_fuzzer_test.py
index 7733a8d..079c4c7 100644
--- a/template/iface_fuzzer_test/iface_fuzzer_test.py
+++ b/template/iface_fuzzer_test/iface_fuzzer_test.py
@@ -45,9 +45,11 @@
             hal_version: string, version of the hal, e.g '7.4'
         """
         # Push .vts spec files.
-        hal_name_dir = hal_name.replace('.', '/')
+        hal_name_dir = vts_spec_utils.HalNameDir(hal_name)
         src_dir = os.path.join(self.data_file_path, 'spec', 'hardware',
                                'interfaces', hal_name_dir, hal_version, 'vts')
+        dst_dir = os.path.join(self._VTS_SPEC_DIR_TARGET, hal_name_dir,
+                               hal_version)
 
         # Push corresponding VTS drivers.
         driver_name = 'android.hardware.%s@%s-vts.driver.so' % (hal_name,
@@ -56,37 +58,63 @@
         driver32 = os.path.join(asan_path, 'lib', driver_name)
         driver64 = os.path.join(asan_path, 'lib64', driver_name)
         try:
-            self._dut.adb.push(src_dir, self._VTS_SPEC_DIR_TARGET)
+            self._dut.adb.push(src_dir, dst_dir)
             self._dut.adb.push(driver32, 'data/local/tmp/32')
             self._dut.adb.push(driver64, 'data/local/tmp/64')
         except adb.AdbError as e:
             logging.exception(e)
 
+    def _VtsSpecDirsTarget(self, hal_name, hal_version):
+        """Returns a list of directories on target with .vts specs.
+
+        Args:
+            hal_name: string, name of the hal, e.g. 'vibrator'.
+            hal_version: string, version of the hal, e.g '7.4'
+
+        Returns:
+            string list, directories on target
+        """
+        hal_name_dir = vts_spec_utils.HalNameDir(hal_name)
+        spec_dirs = [os.path.join(self._VTS_SPEC_DIR_TARGET, hal_name_dir,
+                                  hal_version)]
+
+        imported_hals = self._vts_spec_parser.ImportedHals(hal_name,
+                                                           hal_version)
+        for name, version in imported_hals:
+            spec_dirs.append(
+                os.path.join(self._VTS_SPEC_DIR_TARGET,
+                             vts_spec_utils.HalNameDir(name), version))
+        return spec_dirs
+
     # Override
     def CreateTestCases(self):
         """See base class."""
         hal_package = self.hal_hidl_package_name
         hal_name, hal_version = vts_spec_utils.HalPackageToNameAndVersion(
             hal_package)
+
+        imported_hals = self._vts_spec_parser.ImportedHals(hal_name,
+                                                           hal_version)
         self._PushVtsResources(hal_name, hal_version)
-        vts_spec_names = self._vts_spec_parser.VtsSpecNames(hal_name,
-                                                            hal_version)
-        registered_interfaces = self._RegisteredInterfaces(
-            self.hal_hidl_package_name)
+        for name, version in imported_hals:
+            self._PushVtsResources(name, version)
+
+        registered_interfaces = self._RegisteredInterfaces(hal_package)
+        spec_dirs = ':'.join(self._VtsSpecDirsTarget(hal_name, hal_version))
 
         test_cases = []
         for iface in registered_interfaces:
             additional_params = {
-                'vts_spec_dir': self._VTS_SPEC_DIR_TARGET,
-                'vts_exec_size': 128,
+                'vts_spec_dir': spec_dirs,
+                'vts_exec_size': 16,
                 'vts_target_iface': iface,
             }
             libfuzzer_params = {
                 'max_len': 65536,
-                'max_total_time': 1,
+                'max_total_time': 10,
             }
             bin_host_path = os.path.join(self.data_file_path, 'DATA', 'bin',
-                                           'vts_proto_fuzzer')
+                                         'vts_proto_fuzzer')
             test_case = libfuzzer_test_case.LibFuzzerTestCase(
                 bin_host_path, libfuzzer_params, additional_params)
             test_case.test_name = iface