| # Copyright 2022 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """This presubmit ensures that all known test suites in the current component |
| are included in the launcher filter file.""" |
| |
| from typing import Dict, List |
| |
| TOOL_PATH = 'tools/testing/launcher_filter_file.py' |
| |
| |
| def GetToolPathRelativeToRepositoryRoot(input_api) -> str: |
| # Returns the path to the launcher_filter_file.py tool, relative to the |
| # chromium src directory to simplify copy-paste of a command on errors. |
| presubmit_local_path = input_api.PresubmitLocalPath() |
| repository_root = input_api.change.RepositoryRoot() |
| common_path = input_api.os_path.commonpath( |
| [repository_root, presubmit_local_path]) |
| component_relative_path = presubmit_local_path[len(common_path) + 1:] |
| return input_api.os_path.join(component_relative_path, TOOL_PATH) |
| |
| |
| def FetchLauncherFilterFileData(input_api, cwd: str) -> Dict[str, str]: |
| # Fetches the actual and expected filter file content so they can be |
| # compared. Returns a dictionary that contains 'expected' and 'actual' as |
| # comparable strings. |
| try: |
| old_sys_path = input_api.sys.path |
| cwd = input_api.PresubmitLocalPath() |
| input_api.sys.path += [input_api.os_path.join(cwd, 'tools')] |
| from testing import launcher_filter_file as lff |
| ret = {} |
| ret['expected'] = lff.GetExpectedLauncherFilterFileContent() |
| ret['actual'] = lff.GetActualLauncherFilterFileContent() |
| return ret |
| finally: |
| input_api.sys.path = old_sys_path |
| |
| |
| def GetPylintConfiguration(input_api, output_api) -> List: |
| disabled_warnings = [ |
| 'C0415', # import-outside-toplevel |
| ] |
| return input_api.canned_checks.RunPylint( |
| input_api, |
| output_api, |
| version='2.7', |
| disabled_warnings=disabled_warnings) |
| |
| |
| def _CommonChecks(input_api, output_api): |
| output = GetPylintConfiguration(input_api, output_api) |
| cwd = input_api.PresubmitLocalPath() |
| tool_help_path = GetToolPathRelativeToRepositoryRoot(input_api) |
| |
| filter_file_data = FetchLauncherFilterFileData(input_api, cwd) |
| |
| if filter_file_data['expected'] == filter_file_data['actual']: |
| return output |
| |
| output.append( |
| output_api.PresubmitPromptWarning( |
| 'The test launcher filter file does not match the ' + |
| f'available tests.\n\nPlease run:\n{tool_help_path}', [])) |
| return output |
| |
| |
| def CheckChangeOnUpload(*args): |
| return _CommonChecks(*args) |
| |
| |
| def CheckChangeOnCommit(*args): |
| return _CommonChecks(*args) |