Atest: add module info attributes

BUG: 209384631

This CL established 3 attributes:
* ModuleInfo.java_dep_path
* ModuleInfo.cc_dep_path
* ModuleInfo.merged_dep_path

and remove has_soong_info() because module_bp_java_deps.json and
module_bp_cc_deps.json will be generated along with module-info.json.

Test: unit test
atest-dev -cv hello_world_test

Change-Id: I3451c8ce45f0cc6ee7fb49cb9b6dab2f5c872abf
diff --git a/atest/module_info.py b/atest/module_info.py
index baec658..945d001 100644
--- a/atest/module_info.py
+++ b/atest/module_info.py
@@ -101,6 +101,15 @@
         if not index_dir.is_dir():
             index_dir.mkdir(parents=True)
         self.module_index = index_dir.joinpath(constants.MODULE_INDEX)
+
+        # Paths to java, cc and merged module info json files.
+        self.java_dep_path = Path(
+            atest_utils.get_build_out_dir()).joinpath('soong', _JAVA_DEP_INFO)
+        self.cc_dep_path = Path(
+            atest_utils.get_build_out_dir()).joinpath('soong', _CC_DEP_INFO)
+        self.merged_dep_path = Path(
+            os.getenv(constants.ANDROID_PRODUCT_OUT, '')).joinpath(_MERGED_INFO)
+
         self.mod_info_file_path = Path(module_file) if module_file else None
         module_info_target, name_to_module_info = self._load_module_info_file(
             module_file)
@@ -194,10 +203,9 @@
             module_info_target, file_path = self._discover_mod_file_and_target(
                 self.force_build)
             self.mod_info_file_path = Path(file_path)
-        merged_file_path = self.get_atest_merged_info_path()
         if (not self.need_update_merged_file()
-            and os.path.exists(merged_file_path)):
-            file_path = merged_file_path
+            and os.path.exists(self.merged_dep_path)):
+            file_path = self.merged_dep_path
         logging.debug('Loading %s as module-info.', file_path)
         with open(file_path) as json_file:
             mod_info = json.load(json_file)
@@ -580,7 +588,7 @@
         """
         # Merge _JAVA_DEP_INFO
         if not java_bp_info_path:
-            java_bp_info_path = self.get_java_dep_info_path()
+            java_bp_info_path = self.java_dep_path
         if atest_utils.is_valid_json_file(java_bp_info_path):
             with open(java_bp_info_path) as json_file:
                 java_bp_infos = json.load(json_file)
@@ -589,7 +597,7 @@
                     name_to_module_info, java_bp_infos)
         # Merge _CC_DEP_INFO
         if not cc_bp_info_path:
-            cc_bp_info_path = self.get_cc_dep_info_path()
+            cc_bp_info_path = self.cc_dep_path
         if atest_utils.is_valid_json_file(cc_bp_info_path):
             with open(cc_bp_info_path) as json_file:
                 cc_bp_infos = json.load(json_file)
@@ -635,16 +643,15 @@
                     mod_info_values.sort()
                     name_to_module_info[
                         module_name][merge_item] = mod_info_values
-        output_file = self.get_atest_merged_info_path()
-        if not os.path.isdir(os.path.dirname(output_file)):
-            os.makedirs(os.path.dirname(output_file))
+        if not os.path.isdir(os.path.dirname(self.merged_dep_path)):
+            os.makedirs(os.path.dirname(self.merged_dep_path))
         # b/178559543 saving merged module info in a temp file and copying it to
         # atest_merged_dep.json can eliminate the possibility of accessing it
         # concurrently and resulting in invalid JSON format.
         temp_file = tempfile.NamedTemporaryFile()
         with open(temp_file.name, 'w') as _temp:
             json.dump(name_to_module_info, _temp, indent=0)
-        shutil.copy(temp_file.name, output_file)
+        shutil.copy(temp_file.name, self.merged_dep_path)
         temp_file.close()
         return name_to_module_info
 
@@ -696,60 +703,18 @@
                       install_deps, module_name)
         return install_deps
 
-    @staticmethod
-    def get_atest_merged_info_path():
-        """Returns the path for atest_merged_dep.json.
-
-        Returns:
-            String for atest_merged_dep.json.
-        """
-        # Move the merged file to the same folder as module-info.json due to it
-        # will not be update if lunch target be changed.
-        return os.path.join(os.environ.get(constants.ANDROID_PRODUCT_OUT, ''),
-                            _MERGED_INFO)
-
-    @staticmethod
-    def get_java_dep_info_path():
-        """Returns the path for module_bp_java_deps.json
-
-        Returns:
-            String for module_bp_java_deps.json.
-        """
-        return os.path.join(atest_utils.get_build_out_dir(),
-                            'soong', _JAVA_DEP_INFO)
-
-    @staticmethod
-    def get_cc_dep_info_path():
-        """Returns the path for module_bp_cc_deps.json.
-
-        Returns:
-            String for module_bp_cc_deps.json.
-        """
-        return os.path.join(atest_utils.get_build_out_dir(),
-                            'soong', _CC_DEP_INFO)
-
-    def has_soong_info(self):
-        """Ensure the existence of soong info files.
-
-        Returns:
-            True if soong info need to merge, false otherwise.
-        """
-        return (os.path.isfile(self.get_java_dep_info_path()) and
-                os.path.isfile(self.get_cc_dep_info_path()))
-
     def need_update_merged_file(self):
         """Check if need to update/generated atest_merged_dep.
 
         If self.force_build == True: always update merged info.
-        Otherwise: only update merged info when soong info exists and the merged
-                   info does not.
+        Otherwise: only update merged info when atest_merged_dep.json does
+                   not exist.
 
         Returns:
             True if atest_merged_dep.json should be updated, false otherwise.
         """
         return (self.force_build or
-                (self.has_soong_info() and
-                 not os.path.exists(self.get_atest_merged_info_path())))
+                not os.path.exists(self.merged_dep_path))
 
     def is_unit_test(self, mod_info):
         """Return True if input module is unit test, False otherwise.
diff --git a/atest/module_info_unittest.py b/atest/module_info_unittest.py
index 16a8e81..9a5d5bf 100755
--- a/atest/module_info_unittest.py
+++ b/atest/module_info_unittest.py
@@ -20,17 +20,21 @@
 # pylint: disable=missing-function-docstring
 
 import os
+import shutil
+import tempfile
 import unittest
 
+from pathlib import Path
 from unittest import mock
 
-import atest_utils
 import constants
 import module_info
 import unittest_utils
 import unittest_constants as uc
 
 JSON_FILE_PATH = os.path.join(uc.TEST_DATA_DIR, uc.JSON_FILE)
+CC_DEP_PATH = os.path.join(uc.TEST_DATA_DIR, uc.CC_DEP_FILE)
+JAVA_DEP_PATH = os.path.join(uc.TEST_DATA_DIR, uc.JAVA_DPE_FILE)
 EXPECTED_MOD_TARGET = 'tradefed'
 EXPECTED_MOD_TARGET_PATH = ['tf/core']
 UNEXPECTED_MOD_TARGET = 'this_should_not_be_in_module-info.json'
@@ -64,17 +68,31 @@
                constants.MODULE_PATH: 'a/b/c/path',
                constants.MODULE_CLASS: ['random_class']}
 NAME_TO_MODULE_INFO = {'random_name' : MODULE_INFO}
-MERGED_DEP = '/tmp/out/atest_merged_dep.json'
+# Mocking path allows str only, use os.path instead of Path.
+BUILD_TOP_DIR = tempfile.TemporaryDirectory().name
+SOONG_OUT_DIR = os.path.join(BUILD_TOP_DIR, 'out/soong')
+PRODUCT_OUT_DIR = os.path.join(BUILD_TOP_DIR, 'out/target/product/vsoc_x86_64')
+HOST_OUT_DIR = os.path.join(BUILD_TOP_DIR, 'out/host/linux-x86')
 
 #pylint: disable=protected-access
 class ModuleInfoUnittests(unittest.TestCase):
     """Unit tests for module_info.py"""
 
-    def tearDown(self):
-        files_to_clean = (MERGED_DEP, uc.MODULE_INDEX, uc.MODULE_INDEX_MD5)
-        for _file in files_to_clean:
-            if os.path.isfile(_file):
-                os.remove(_file)
+    def setUp(self) -> None:
+        for path in [BUILD_TOP_DIR, PRODUCT_OUT_DIR, SOONG_OUT_DIR, HOST_OUT_DIR]:
+            if not Path(path).is_dir():
+                Path(path).mkdir(parents=True)
+        shutil.copy2(JSON_FILE_PATH, PRODUCT_OUT_DIR)
+        self.json_file_path = Path(PRODUCT_OUT_DIR).joinpath(uc.JSON_FILE)
+        shutil.copy2(CC_DEP_PATH, SOONG_OUT_DIR)
+        self.cc_dep_path = Path(SOONG_OUT_DIR).joinpath(uc.CC_DEP_FILE)
+        shutil.copy2(JAVA_DEP_PATH, SOONG_OUT_DIR)
+        self.java_dep_path = Path(SOONG_OUT_DIR).joinpath(uc.JAVA_DPE_FILE)
+        self.merged_dep_path = Path(PRODUCT_OUT_DIR).joinpath(uc.MERGED_DEP_FILE)
+
+    def tearDown(self) -> None:
+        if self.merged_dep_path.is_file():
+            os.remove(self.merged_dep_path)
 
     @mock.patch.object(module_info.ModuleInfo, '_merge_soong_info')
     @mock.patch('json.load', return_value={})
@@ -91,7 +109,7 @@
         default_out_dir_mod_targ = 'out/dir/here/module-info.json'
         # Make sure module_info_target is what we think it is.
         with mock.patch.dict('os.environ', os_environ_mock, clear=True):
-            mod_info = module_info.ModuleInfo()
+            mod_info = module_info.ModuleInfo(index_dir=HOST_OUT_DIR)
             self.assertEqual(default_out_dir_mod_targ,
                              mod_info.module_info_target)
 
@@ -102,7 +120,7 @@
         custom_out_dir_mod_targ = 'out2/dir/here/module-info.json'
         # Make sure module_info_target is what we think it is.
         with mock.patch.dict('os.environ', os_environ_mock, clear=True):
-            mod_info = module_info.ModuleInfo()
+            mod_info = module_info.ModuleInfo(index_dir=HOST_OUT_DIR)
             self.assertEqual(custom_out_dir_mod_targ,
                              mod_info.module_info_target)
 
@@ -113,12 +131,12 @@
         custom_abs_out_dir_mod_targ = '/tmp/out/dir/module-info.json'
         # Make sure module_info_target is what we think it is.
         with mock.patch.dict('os.environ', os_environ_mock, clear=True):
-            mod_info = module_info.ModuleInfo()
+            mod_info = module_info.ModuleInfo(index_dir=HOST_OUT_DIR)
             self.assertEqual(custom_abs_out_dir_mod_targ,
                              mod_info.module_info_target)
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     @mock.patch.object(module_info.ModuleInfo, '_load_module_info_file')
     def test_get_path_to_module_info(self, mock_load_module):
         """Test that we correctly create the path to module info dict."""
@@ -135,12 +153,12 @@
                                             constants.MODULE_PATH: [mod_path_one]}],
                             mod_path_two: [{constants.MODULE_NAME: mod_two,
                                             constants.MODULE_PATH: [mod_path_two]}]}
-        mod_info = module_info.ModuleInfo()
+        mod_info = module_info.ModuleInfo(index_dir=HOST_OUT_DIR)
         self.assertDictEqual(path_to_mod_info,
                              mod_info._get_path_to_module_info(mod_info_dict))
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     def test_is_module(self):
         """Test that we get the module when it's properly loaded."""
         # Load up the test json file and check that module is in it
@@ -149,7 +167,7 @@
         self.assertFalse(mod_info.is_module(UNEXPECTED_MOD_TARGET))
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output/'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     def test_get_path(self):
         """Test that we get the module path when it's properly loaded."""
         # Load up the test json file and check that module is in it
@@ -159,7 +177,7 @@
         self.assertEqual(mod_info.get_paths(MOD_NO_PATH), [])
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output/'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     def test_get_module_names(self):
         """test that we get the module name properly."""
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
@@ -170,7 +188,7 @@
             MULT_MOODULES_WITH_SHARED_PATH)
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output/'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     def test_path_to_mod_info(self):
         """test that we get the module name properly."""
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
@@ -182,7 +200,7 @@
         self.assertEqual(module_list, TESTABLE_MODULES_WITH_SHARED_PATH)
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     def test_is_suite_in_compatibility_suites(self):
         """Test is_suite_in_compatibility_suites."""
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
@@ -196,11 +214,9 @@
         self.assertTrue(mod_info.is_suite_in_compatibility_suites("vts10", info3))
         self.assertFalse(mod_info.is_suite_in_compatibility_suites("ats", info3))
 
-    @mock.patch('constants.INDEX_DIR', uc.INDEX_DIR)
-    @mock.patch('constants.MODULE_INDEX', uc.MODULE_INDEX)
     @mock.patch('constants.MODULE_INDEX_MD5', uc.MODULE_INDEX_MD5)
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output/'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     @mock.patch.object(module_info.ModuleInfo, 'is_testable_module')
     @mock.patch.object(module_info.ModuleInfo, 'is_suite_in_compatibility_suites')
     def test_get_testable_modules(self, mock_is_suite_exist, mock_is_testable):
@@ -223,7 +239,7 @@
         self.assertEqual(1, len(mod_info.get_testable_modules()))
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     @mock.patch.object(module_info.ModuleInfo, 'has_test_config')
     @mock.patch.object(module_info.ModuleInfo, 'is_robolectric_test')
     def test_is_testable_module(self, mock_is_robo_test, mock_has_test_config):
@@ -245,7 +261,7 @@
         self.assertTrue(mod_info.is_testable_module(non_installed_module_info))
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     @mock.patch.object(module_info.ModuleInfo, 'is_auto_gen_test_config')
     def test_has_test_config(self, mock_is_auto_gen):
         """Test has_test_config."""
@@ -267,7 +283,7 @@
         self.assertTrue(mod_info.has_test_config(info2))
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     @mock.patch.object(module_info.ModuleInfo, 'get_module_names')
     def test_get_robolectric_test_name(self, mock_get_module_names):
         """Test get_robolectric_test_name."""
@@ -285,7 +301,7 @@
             ROBO_MODULE), None)
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     @mock.patch.object(module_info.ModuleInfo, 'is_robolectric_module')
     @mock.patch('os.path.isfile', return_value=False)
     @mock.patch.object(module_info.ModuleInfo, 'get_module_info')
@@ -319,7 +335,7 @@
         self.assertEqual(mod_info.get_robolectric_type(ROBO_MODULE), 0)
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     @mock.patch.object(module_info.ModuleInfo, 'get_robolectric_type')
     def test_is_robolectric_test(self, mock_type):
         """Test is_robolectric_test."""
@@ -332,7 +348,7 @@
         self.assertFalse(mod_info.is_robolectric_test(ROBO_MODULE))
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     @mock.patch.object(module_info.ModuleInfo, 'is_module')
     def test_is_auto_gen_test_config(self, mock_is_module):
         """Test is_auto_gen_test_config correctly detects the module."""
@@ -352,7 +368,7 @@
         self.assertFalse(mod_info.is_auto_gen_test_config(MOD_NAME4))
 
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     def test_is_robolectric_module(self):
         """Test is_robolectric_module correctly detects the module."""
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
@@ -364,12 +380,10 @@
         self.assertTrue(mod_info.is_robolectric_module(MOD_INFO_DICT[MOD_NAME1]))
         self.assertFalse(mod_info.is_robolectric_module(MOD_INFO_DICT[MOD_NAME2]))
 
-    @mock.patch.object(module_info.ModuleInfo, 'get_atest_merged_info_path')
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
-    def test_merge_build_system_infos(self, _merge):
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
+    def test_merge_build_system_infos(self):
         """Test _merge_build_system_infos."""
-        _merge.return_value = MERGED_DEP
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
         java_dep_file = os.path.join(uc.TEST_DATA_DIR,
                                      'module_bp_java_deps.json')
@@ -383,12 +397,10 @@
             name_to_mod_info['module_1'].get(constants.MODULE_DEPENDENCIES),
             expect_deps)
 
-    @mock.patch.object(module_info.ModuleInfo, 'get_atest_merged_info_path')
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
-    def test_merge_dependency_with_ori_dependency(self, _merge):
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
+    def test_merge_dependency_with_ori_dependency(self):
         """Test _merge_dependency."""
-        _merge.return_value = MERGED_DEP
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
         java_dep_file = os.path.join(uc.TEST_DATA_DIR,
                                      'module_bp_java_deps.json')
@@ -402,12 +414,10 @@
             name_to_mod_info['module_1'].get(constants.MODULE_DEPENDENCIES),
             expect_deps)
 
-    @mock.patch.object(module_info.ModuleInfo, 'get_atest_merged_info_path')
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
-    def test_get_module_dependency(self, _merge):
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
+    def test_get_module_dependency(self):
         """Test get_module_dependency."""
-        _merge.return_value = MERGED_DEP
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
         java_dep_file = os.path.join(uc.TEST_DATA_DIR,
                                      'module_bp_java_deps.json')
@@ -419,12 +429,10 @@
             mod_info.get_module_dependency('dep_test_module'),
             expect_deps)
 
-    @mock.patch.object(module_info.ModuleInfo, 'get_atest_merged_info_path')
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
-    def test_get_module_dependency_w_loop(self, _merge):
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
+    def test_get_module_dependency_w_loop(self):
         """Test get_module_dependency with problem dep file."""
-        _merge.return_value = MERGED_DEP
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
         # Java dependency file with a endless loop define.
         java_dep_file = os.path.join(uc.TEST_DATA_DIR,
@@ -437,12 +445,10 @@
             mod_info.get_module_dependency('dep_test_module'),
             expect_deps)
 
-    @mock.patch.object(module_info.ModuleInfo, 'get_atest_merged_info_path')
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
-    def test_get_install_module_dependency(self, _merge):
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
+    def test_get_install_module_dependency(self):
         """Test get_install_module_dependency."""
-        _merge.return_value = MERGED_DEP
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
         java_dep_file = os.path.join(uc.TEST_DATA_DIR,
                                      'module_bp_java_deps.json')
@@ -453,12 +459,10 @@
             mod_info.get_install_module_dependency('dep_test_module'),
             expect_deps)
 
-    @mock.patch.object(module_info.ModuleInfo, 'get_atest_merged_info_path')
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
-    def test_cc_merge_build_system_infos(self, _merge):
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
+    def test_cc_merge_build_system_infos(self):
         """Test _merge_build_system_infos for cc."""
-        _merge.return_value = MERGED_DEP
         mod_info = module_info.ModuleInfo(module_file=JSON_FILE_PATH)
         cc_dep_file = os.path.join(uc.TEST_DATA_DIR,
                                      'module_bp_cc_deps.json')
@@ -472,34 +476,8 @@
             name_to_mod_info['module_cc_1'].get(constants.MODULE_DEPENDENCIES),
             expect_deps)
 
-    @mock.patch.dict('os.environ',
-                     {constants.ANDROID_PRODUCT_OUT:'/test/output/'})
-    def test_get_atest_merged_info_path(self):
-        """Test get_atest_merged_info_path."""
-        expect_out = '/test/output/'
-        expect_path = os.path.join(expect_out, module_info._MERGED_INFO)
-        self.assertEqual(expect_path, module_info.ModuleInfo.get_atest_merged_info_path())
-
-    @mock.patch.object(atest_utils, 'get_build_out_dir')
-    def test_get_java_dep_info_path(self, mock_out_dir):
-        """Test get_java_dep_info_path."""
-        expect_out = '/test/output/'
-        mock_out_dir.return_value = expect_out
-        expect_path = os.path.join(expect_out, 'soong',
-                                   module_info._JAVA_DEP_INFO)
-        self.assertEqual(expect_path, module_info.ModuleInfo.get_java_dep_info_path())
-
-    @mock.patch.object(atest_utils, 'get_build_out_dir')
-    def test_get_cc_dep_info_path(self, mock_out_dir):
-        """Test get_cc_dep_info_path."""
-        expect_out = '/test/output/'
-        mock_out_dir.return_value = expect_out
-        expect_path = os.path.join(expect_out, 'soong',
-                                   module_info._CC_DEP_INFO)
-        self.assertEqual(expect_path, module_info.ModuleInfo.get_cc_dep_info_path())
-
     @mock.patch.dict('os.environ', {constants.ANDROID_BUILD_TOP:'/',
-                                    constants.ANDROID_PRODUCT_OUT:'/test/output'})
+                                    constants.ANDROID_PRODUCT_OUT:PRODUCT_OUT_DIR})
     def test_is_unit_test(self):
         """Test is_unit_test."""
         module_name = 'myModule'
diff --git a/atest/unittest_constants.py b/atest/unittest_constants.py
index cf80b92..dd6a1ef 100644
--- a/atest/unittest_constants.py
+++ b/atest/unittest_constants.py
@@ -58,6 +58,9 @@
 CONFIG2_FILE = os.path.join(MODULE2_DIR, constants.MODULE_CONFIG)
 JSON_FILE = 'module-info.json'
 MODULE_INFO_TARGET = '/out/%s' % JSON_FILE
+CC_DEP_FILE = 'module_bp_cc_deps.json'
+JAVA_DPE_FILE = 'module_bp_java_deps.json'
+MERGED_DEP_FILE = 'atest_merged_dep.json'
 MODULE_BUILD_TARGETS = {'tradefed-core', MODULE_INFO_TARGET,
                         'MODULES-IN-%s' % MODULE_DIR.replace('/', '-'),
                         'module-specific-target'}
@@ -307,7 +310,6 @@
 QCLASS_INDEX = os.path.join(INDEX_DIR, 'fqcn.idx')
 CC_CLASS_INDEX = os.path.join(INDEX_DIR, 'cc_classes.idx')
 PACKAGE_INDEX = os.path.join(INDEX_DIR, 'packages.idx')
-MODULE_INDEX = os.path.join(INDEX_DIR, 'modules.idx')
 MODULE_INDEX_MD5 = os.path.join(INDEX_DIR, 'modules.md5')
 
 # TF's log dir
diff --git a/atest/unittest_utils.py b/atest/unittest_utils.py
index 35db172..453662e 100644
--- a/atest/unittest_utils.py
+++ b/atest/unittest_utils.py
@@ -84,6 +84,7 @@
 # pylint: disable=too-many-return-statements
 def isfile_side_effect(value):
     """Mock return values for os.path.isfile."""
+    value = str(value)
     if value == '/%s/%s' % (uc.CC_MODULE_DIR, constants.MODULE_CONFIG):
         return True
     if value == '/%s/%s' % (uc.MODULE_DIR, constants.MODULE_CONFIG):