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}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
cc18b1039b
commit
e7481c5056
@@ -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,12 @@ def BuildJavaTestFilter(filenames):
|
|||||||
for f in filenames)
|
for f in filenames)
|
||||||
|
|
||||||
|
|
||||||
|
_PREF_MAPPING_GTEST_FILTER = '*PolicyPrefsTest.PolicyToPrefsMapping*'
|
||||||
|
|
||||||
|
SPECIAL_TEST_FILTERS = [(re.compile(_PREF_MAPPING_FILE_PATTERN),
|
||||||
|
_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 +473,18 @@ 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):
|
||||||
|
names_without_extension = [Path(f).stem for f in filenames]
|
||||||
|
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 +508,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='PREF_MAPPINGS_FILTER',
|
||||||
|
help='policy pref mappings test filter')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--dry-run',
|
'--dry-run',
|
||||||
'--dry_run',
|
'--dry_run',
|
||||||
@@ -528,6 +556,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 +579,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