For test mapping config append modified path
Test: presubmit
Bug: 405154519
Change-Id: I4a2bc3806722be9322f0d40070d00c3fafc9faa3
diff --git a/ci/optimized_targets.py b/ci/optimized_targets.py
index 0e9723c..548e342 100644
--- a/ci/optimized_targets.py
+++ b/ci/optimized_targets.py
@@ -207,6 +207,19 @@
self._change_info_contents = change_info_contents
+ def get_changed_paths(self) -> set[str]:
+ changed_paths = set()
+ for change in self._change_info_contents['changes']:
+ project_path = change.get('projectPath') + '/'
+
+ for revision in change.get('revisions'):
+ for file_info in revision.get('fileInfos'):
+ file_path = file_info.get('path')
+ dir_path = os.path.dirname(file_path)
+ changed_paths.add(project_path + dir_path)
+
+ return changed_paths
+
def find_changed_files(self) -> set[str]:
changed_files = set()
@@ -266,9 +279,11 @@
def _get_test_discovery_modules(self) -> set[str]:
+ change_info = ChangeInfo(os.environ.get('CHANGE_INFO'))
+ change_paths = change_info.get_changed_paths()
test_modules = set()
for test_info in self.test_infos:
- tf_command = self._build_tf_command(test_info)
+ tf_command = self._build_tf_command(test_info, change_paths)
discovery_agent = test_discovery_agent.TestDiscoveryAgent(tradefed_args=tf_command, test_mapping_zip_path=os.environ.get('DIST_DIR')+'/test_mappings.zip')
modules, dependencies = discovery_agent.discover_test_mapping_test_modules()
for regex in modules:
@@ -276,7 +291,7 @@
return test_modules
- def _build_tf_command(self, test_info) -> list[str]:
+ def _build_tf_command(self, test_info, change_paths) -> list[str]:
command = [test_info.command]
for extra_option in test_info.extra_options:
if not extra_option.get('key'):
@@ -292,6 +307,10 @@
command.append(value)
else:
command.append(arg_key)
+ if test_info.is_test_mapping:
+ for change_path in change_paths:
+ command.append('--test-mapping-path')
+ command.append(change_path)
return command
diff --git a/ci/optimized_targets_test.py b/ci/optimized_targets_test.py
index 8256acd..2935c83 100644
--- a/ci/optimized_targets_test.py
+++ b/ci/optimized_targets_test.py
@@ -44,6 +44,7 @@
def _setup_working_build_env(self):
self._write_soong_ui_file()
+ self._write_change_info_file()
self._host_out_testcases = pathlib.Path('/tmp/top/host_out_testcases')
self._host_out_testcases.mkdir(parents=True)
self._target_out_testcases = pathlib.Path('/tmp/top/target_out_testcases')
@@ -62,9 +63,47 @@
self.mock_os_environ.update({
'TOP': '/tmp/top',
'DIST_DIR': '/tmp/top/out/dist',
- 'TMPDIR': '/tmp/'
+ 'TMPDIR': '/tmp/',
+ 'CHANGE_INFO': '/tmp/top/change_info'
})
+ def _write_change_info_file(self):
+ change_info_path = pathlib.Path('/tmp/top/')
+ with open(os.path.join(change_info_path, 'change_info'), 'w') as f:
+ f.write("""
+ {
+ "changes": [
+ {
+ "projectPath": "build/ci",
+ "revisions": [
+ {
+ "revisionNumber": 1,
+ "fileInfos": [
+ {
+ "path": "src/main/java/com/example/MyClass.java",
+ "action": "MODIFIED"
+ },
+ {
+ "path": "src/test/java/com/example/MyClassTest.java",
+ "action": "ADDED"
+ }
+ ]
+ },
+ {
+ "revisionNumber": 2,
+ "fileInfos": [
+ {
+ "path": "src/main/java/com/example/AnotherClass.java",
+ "action": "MODIFIED"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ """)
+
def _write_soong_ui_file(self):
soong_path = pathlib.Path('/tmp/top/build/soong')
soong_path.mkdir(parents=True)
diff --git a/ci/test_discovery_agent.py b/ci/test_discovery_agent.py
index 6812b07..3c1caf4 100644
--- a/ci/test_discovery_agent.py
+++ b/ci/test_discovery_agent.py
@@ -118,15 +118,18 @@
)
java_args.extend(self.tradefed_args)
env = os.environ.copy()
+ env.update({"SKIP_JAVA_QUERY": "1"})
+ env.update({"ALLOW_EMPTY_TEST_MAPPING": "1"})
env.update({"TF_TEST_MAPPING_ZIP_FILE": self.test_mapping_zip_path})
env.update({"DISCOVERY_OUTPUT_FILE": test_discovery_output_file.name})
logging.info(f"Calling test discovery with args: {java_args}")
try:
- result = subprocess.run(args=java_args, env=env, text=True, check=True)
+ result = subprocess.run(args=java_args, env=env, text=True, check=True, stdout = subprocess.PIPE,
+ stderr = subprocess.PIPE)
logging.info(f"Test discovery agent output: {result.stdout}")
except subprocess.CalledProcessError as e:
raise TestDiscoveryError(
- f"Failed to run test discovery, strout: {e.stdout}, strerr:"
+ f"Failed to run test discovery, stdout: {e.stdout}, stderr:"
f" {e.stderr}, returncode: {e.returncode}"
)
data = json.loads(test_discovery_output_file.read())