Reland "autotest.py: Support policy to pref mappings tests"
This relands commite7481c5056
. Which was reverted in commitdc8e02663b
. There was an issue in the original CL where the argument --test_policy_to_pref_mappings_filter gets popuplated when there are no policy pref mapping test files. This wasn't noticed because c++ unit tests and browser tests ignore this flag and work correctly. Android tests OTOH throw an error because the flag is unknown. This CL filters policy pref mapping files when building the flag. Original change's description: > autotest.py: Support policy to pref mappings tests > > Pref mapping test files now work, for example: > $ tools/autotest.py -C out/Default \ > components/policy/test/data/pref_mapping/NewWindowsInKioskAllowed.json > $ tools/autotest.py -C out/Default \ > components/policy/test/data/pref_mapping \ > --test_policy_to_pref_mappings_filter=NewWindowsInKioskAllowed > > Which are equivalent to: > $ autoninja -C out/Default browser_tests > $ out/Default/browser_tests \ > --gtest_filter="*PolicyPrefsTest.PolicyToPrefsMapping" \ > --test_policy_to_pref_mappings_filter="NewWindowsInKioskAllowed" > > Bug: b:319254568 > Test: tools/autotest.py -C out/Default components/policy/test/data/pref_mapping > Test: tools/autotest.py -C out/Default components/policy/test/data/pref_mapping/NewWindowsInKioskAllowed.json > Change-Id: I8eb36a69abd717bf69c56a7f1aa453209c3da5a2 > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5185801 > Reviewed-by: Maksim Ivanov <emaxx@chromium.org> > Reviewed-by: Michael Thiessen <mthiesse@chromium.org> > Commit-Queue: Edman Anjos <edman@chromium.org> > Cr-Commit-Position: refs/heads/main@{#1254565} Bug: b:319254568 Change-Id: I4f3aab804b27ae5939a87804be270b15304d8561 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5257580 Reviewed-by: Maksim Ivanov <emaxx@chromium.org> Reviewed-by: Michael Thiessen <mthiesse@chromium.org> Commit-Queue: Edman Anjos <edman@chromium.org> Cr-Commit-Position: refs/heads/main@{#1255138}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
219580efad
commit
5617af5ed6
@@ -29,19 +29,39 @@ such a test is missing (see `reason_for_missing_test`).
|
|||||||
|
|
||||||
## Running the tests
|
## Running the tests
|
||||||
|
|
||||||
To run the preference mapping tests, use `browser_tests` command with a
|
The simplest way to run preference mapping tests is to use `tools/autotest.py`
|
||||||
`--gtest_filter` for one of the following
|
and list the files you want to test. For example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ testing/xvfb.py tools/autotest.py -C out/Default \
|
||||||
|
components/policy/test/data/pref_mapping/CrostiniAllowed.json \
|
||||||
|
components/policy/test/data/pref_mapping/CrostiniPortForwardingAllowed.json
|
||||||
|
```
|
||||||
|
|
||||||
|
To do the same manually, build and run `browser_tests` with `--gtest_filter`
|
||||||
|
set to one of the following:
|
||||||
|
|
||||||
- `PolicyPrefsTestCoverageTest.AllPoliciesHaveATestCase`
|
- `PolicyPrefsTestCoverageTest.AllPoliciesHaveATestCase`
|
||||||
- `PolicyPrefsTest.PolicyToPrefsMapping`
|
- `*ChunkedPolicyPrefsTest.PolicyToPrefsMapping*`
|
||||||
- `SigninPolicyPrefsTest.PolicyToPrefsMapping` (CrOS only)
|
- `SigninPolicyPrefsTest.PolicyToPrefsMapping` (CrOS only)
|
||||||
- `PolicyTest.AllPoliciesHaveATestCase` (iOS only)
|
|
||||||
- `PolicyTest.PolicyToPrefMappings` (iOS only)
|
|
||||||
|
|
||||||
Individual policies for PolicyPrefsTest.PolicyToPrefsMapping could be filtered
|
Individual policies in `ChunkedPolicyPrefsTest` can be filtered with the
|
||||||
by `--test_policy_to_pref_mappings_filter` flag. The flag accepts policy names
|
`--test_policy_to_pref_mappings_filter` flag. The flag accepts policy names
|
||||||
(with the .optionalTestNameSuffix) separated by colon.
|
(with the .optionalTestNameSuffix) separated by colon.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ autoninja -C out/Default browser_tests
|
||||||
|
$ testing/xvfb.py out/Default/browser_tests \
|
||||||
|
--gtest_filter="*ChunkedPolicyPrefsTest.PolicyToPrefsMapping*" \
|
||||||
|
--test_policy_to_pref_mappings_filter="CrostiniAllowed:CrostiniPortForwardingAllowed"
|
||||||
|
```
|
||||||
|
|
||||||
|
There are also iOS only policy pref mapping `unit_tests`. To run them, execute
|
||||||
|
the test binary with the `--gtest_filter` set to one of:
|
||||||
|
|
||||||
|
- `PolicyTest.AllPoliciesHaveATestCase`
|
||||||
|
- `PolicyTest.PolicyToPrefMappings`
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
The following example tests the `IdleAction` policy, i.e. its mapping to two
|
The following example tests the `IdleAction` policy, i.e. its mapping to two
|
||||||
|
@@ -65,7 +65,12 @@ _TEST_TARGET_ALLOWLIST = [
|
|||||||
_TEST_TARGET_REGEX = re.compile(
|
_TEST_TARGET_REGEX = re.compile(
|
||||||
r'(_browsertests|_perftests|_wpr_tests|_unittests)$')
|
r'(_browsertests|_perftests|_wpr_tests|_unittests)$')
|
||||||
|
|
||||||
TEST_FILE_NAME_REGEX = re.compile(r'(.*Test\.java)|(.*_[a-z]*test\.cc)')
|
_PREF_MAPPING_FILE_PATTERN = re.escape(
|
||||||
|
str(Path('components') / 'policy' / 'test' / 'data' / 'pref_mapping') +
|
||||||
|
r'/') + r'.*\.json'
|
||||||
|
|
||||||
|
TEST_FILE_NAME_REGEX = re.compile(r'(.*Test\.java)|(.*_[a-z]*test\.cc)' +
|
||||||
|
r'|(' + _PREF_MAPPING_FILE_PATTERN + r')')
|
||||||
|
|
||||||
# Some tests don't directly include gtest.h and instead include it via gmock.h
|
# Some tests don't directly include gtest.h and instead include it via gmock.h
|
||||||
# or a test_utils.h file, so make sure these cases are captured. Also include
|
# or a test_utils.h file, so make sure these cases are captured. Also include
|
||||||
@@ -410,8 +415,9 @@ def FindTestTargets(target_cache, out_dir, paths, run_all):
|
|||||||
return (test_targets, used_cache)
|
return (test_targets, used_cache)
|
||||||
|
|
||||||
|
|
||||||
def RunTestTargets(out_dir, targets, gtest_filter, extra_args, dry_run,
|
def RunTestTargets(out_dir, targets, gtest_filter, pref_mapping_filter,
|
||||||
no_try_android_wrappers, no_fast_local_dev):
|
extra_args, dry_run, no_try_android_wrappers,
|
||||||
|
no_fast_local_dev):
|
||||||
|
|
||||||
for target in targets:
|
for target in targets:
|
||||||
target_binary = target.split(':')[1]
|
target_binary = target.split(':')[1]
|
||||||
@@ -426,7 +432,11 @@ def RunTestTargets(out_dir, targets, gtest_filter, extra_args, dry_run,
|
|||||||
# Usually want this flag when developing locally.
|
# Usually want this flag when developing locally.
|
||||||
extra_args = extra_args + ['--fast-local-dev']
|
extra_args = extra_args + ['--fast-local-dev']
|
||||||
|
|
||||||
cmd = [path, f'--gtest_filter={gtest_filter}'] + extra_args
|
cmd = [path, f'--gtest_filter={gtest_filter}']
|
||||||
|
if pref_mapping_filter:
|
||||||
|
cmd.append(f'--test_policy_to_pref_mappings_filter={pref_mapping_filter}')
|
||||||
|
cmd.extend(extra_args)
|
||||||
|
|
||||||
print('Running test: ' + shlex.join(cmd))
|
print('Running test: ' + shlex.join(cmd))
|
||||||
if not dry_run:
|
if not dry_run:
|
||||||
StreamCommandOrExit(cmd)
|
StreamCommandOrExit(cmd)
|
||||||
@@ -449,6 +459,13 @@ def BuildJavaTestFilter(filenames):
|
|||||||
for f in filenames)
|
for f in filenames)
|
||||||
|
|
||||||
|
|
||||||
|
_PREF_MAPPING_GTEST_FILTER = '*PolicyPrefsTest.PolicyToPrefsMapping*'
|
||||||
|
|
||||||
|
_PREF_MAPPING_FILE_REGEX = re.compile(_PREF_MAPPING_FILE_PATTERN)
|
||||||
|
|
||||||
|
SPECIAL_TEST_FILTERS = [(_PREF_MAPPING_FILE_REGEX, _PREF_MAPPING_GTEST_FILTER)]
|
||||||
|
|
||||||
|
|
||||||
def BuildTestFilter(filenames, line):
|
def BuildTestFilter(filenames, line):
|
||||||
java_files = [f for f in filenames if f.endswith('.java')]
|
java_files = [f for f in filenames if f.endswith('.java')]
|
||||||
cc_files = [f for f in filenames if f.endswith('.cc')]
|
cc_files = [f for f in filenames if f.endswith('.cc')]
|
||||||
@@ -457,10 +474,21 @@ def BuildTestFilter(filenames, line):
|
|||||||
filters.append(BuildJavaTestFilter(java_files))
|
filters.append(BuildJavaTestFilter(java_files))
|
||||||
if cc_files:
|
if cc_files:
|
||||||
filters.append(BuildCppTestFilter(cc_files, line))
|
filters.append(BuildCppTestFilter(cc_files, line))
|
||||||
|
for regex, gtest_filter in SPECIAL_TEST_FILTERS:
|
||||||
|
if any(True for f in filenames if regex.match(f)):
|
||||||
|
filters.append(gtest_filter)
|
||||||
|
break
|
||||||
return ':'.join(filters)
|
return ':'.join(filters)
|
||||||
|
|
||||||
|
|
||||||
|
def BuildPrefMappingTestFilter(filenames):
|
||||||
|
mapping_files = [f for f in filenames if _PREF_MAPPING_FILE_REGEX.match(f)]
|
||||||
|
if not mapping_files:
|
||||||
|
return None
|
||||||
|
names_without_extension = [Path(f).stem for f in mapping_files]
|
||||||
|
return ':'.join(names_without_extension)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description=__doc__, formatter_class=argparse.RawTextHelpFormatter)
|
description=__doc__, formatter_class=argparse.RawTextHelpFormatter)
|
||||||
@@ -484,6 +512,10 @@ def main():
|
|||||||
'-f',
|
'-f',
|
||||||
metavar='FILTER',
|
metavar='FILTER',
|
||||||
help='test filter')
|
help='test filter')
|
||||||
|
parser.add_argument('--test-policy-to-pref-mappings-filter',
|
||||||
|
'--test_policy_to_pref_mappings_filter',
|
||||||
|
metavar='FILTER',
|
||||||
|
help='policy pref mappings test filter')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--dry-run',
|
'--dry-run',
|
||||||
'--dry_run',
|
'--dry_run',
|
||||||
@@ -528,6 +560,10 @@ def main():
|
|||||||
if not gtest_filter:
|
if not gtest_filter:
|
||||||
ExitWithMessage('Failed to derive a gtest filter')
|
ExitWithMessage('Failed to derive a gtest filter')
|
||||||
|
|
||||||
|
pref_mapping_filter = args.test_policy_to_pref_mappings_filter
|
||||||
|
if not pref_mapping_filter:
|
||||||
|
pref_mapping_filter = BuildPrefMappingTestFilter(filenames)
|
||||||
|
|
||||||
assert targets
|
assert targets
|
||||||
build_ok = BuildTestTargets(out_dir, targets, args.dry_run)
|
build_ok = BuildTestTargets(out_dir, targets, args.dry_run)
|
||||||
|
|
||||||
@@ -547,8 +583,9 @@ def main():
|
|||||||
|
|
||||||
if not build_ok: sys.exit(1)
|
if not build_ok: sys.exit(1)
|
||||||
|
|
||||||
RunTestTargets(out_dir, targets, gtest_filter, _extras, args.dry_run,
|
RunTestTargets(out_dir, targets, gtest_filter, pref_mapping_filter, _extras,
|
||||||
args.no_try_android_wrappers, args.no_fast_local_dev)
|
args.dry_run, args.no_try_android_wrappers,
|
||||||
|
args.no_fast_local_dev)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Reference in New Issue
Block a user