0
Files
src/tools/metrics/metrics_python_tests.py
Andrzej Fiedukowicz 2df45ca56e Add test coverage for histogram PRESUBMIT checks
This was done to ensure no regressions in crbug.com/40281617 but while
doing that I realized that there is a lot of ground to cover and
potential controversies in how to actually cover this with tests so for
the sake of keeping CLs relatively small I think it makes sense to
dedicate this one to simply covering existing functionality with tests.

Main changes done here:

1. Add `PRESUBMIT_test.py` for histogram that adds a basic pass/fails
scenarios for the 3 presubmit checks we have.

2. Add 2 extra versions of `.*histogram.xml` within `test_data` with
comments describing what each of them representing.

3. Add basic injectability by exposing internal versions of check
methods in `PRESUBMIT.py` as a lot of those checks relying on various
types of globals - it was a way to inject things like xml paths, or
actually not skip the whole checks where the data comes from `test_data`
directory when testing this functionality.

4. Make `CheckWebViewHistogramsAllowlist` accept histograms_files as
params to allow dependency on global test enabling testing.

Probably the biggest controversy is using PRESUBMIT_test_mocks which
come from top level of the repo. AFAICT there are no official mocks
available and there is a prior art to reusing top level ones for example
(but not limited to):
https://source.chromium.org/chromium/chromium/src/+/main:base/allocator/partition_allocator/PRESUBMIT_test.py;l=12-17

Tested: This whole PR is adding test coverage, but on top of that I
validated that presubmits are still properly passing IRL by checking
that they pass on prod version of histograms.xml and then tripping each
of them intentionally with local changes.

Bug: 391532700
Change-Id: I23a4c29ac8a3dc77abb84b06cdd5864921b6eedf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6187542
Commit-Queue: Andrzej Fiedukowicz <afie@google.com>
Reviewed-by: Nate Fischer <ntfschr@chromium.org>
Reviewed-by: Robert Kaplow <rkaplow@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1411638}
2025-01-27 08:15:27 -08:00

61 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import sys
THIS_DIR = os.path.abspath(os.path.dirname(__file__))
SRC_DIR = os.path.dirname(os.path.dirname(THIS_DIR))
TYP_DIR = os.path.join(SRC_DIR, 'third_party', 'catapult', 'third_party', 'typ')
if not TYP_DIR in sys.path:
sys.path.insert(0, TYP_DIR)
import typ
def resolve(*paths):
return [os.path.join(THIS_DIR, *(p.split('/'))) for p in paths]
sys.exit(
typ.main(
tests=resolve(
'actions/extract_actions_test.py',
# TODO(crbug.com/40772738) - the test ordering is very sensitive due
# to potential name collisions between ukm/pretty_print.py and
# histograms/pretty_print.py and the implementation in typ.
#
# Until this issue is fixed, best to ensure that the 'histograms'
# files show up *after* the 'ukm' files (in order for the histograms
# directory to be added to sys.path *before* ukm), and that we run
# the tests in a single process (jobs=1, below).
'common/codegen_shared_test.py',
'dwa/dwa_model_test.py',
'dwa/dwa_xml_validations_test.py',
'dwa/gen_builders_test.py',
'ukm/gen_builders_test.py',
'ukm/ukm_model_test.py',
'ukm/xml_validations_test.py',
'histograms/expand_owners_unittest.py',
'histograms/extract_histograms_test.py',
'histograms/generate_expired_histograms_array_unittest.py',
'histograms/generate_allowlist_from_histograms_file_unittest.py',
'histograms/merge_xml_test.py',
'histograms/PRESUBMIT_test.py',
'histograms/pretty_print_test.py',
'histograms/validate_token_test.py',
'../json_comment_eater/json_comment_eater_test.py',
'../json_to_struct/element_generator_test.py',
'../json_to_struct/struct_generator_test.py',
'../variations/fieldtrial_to_struct_unittest.py',
'../variations/fieldtrial_util_unittest.py',
'../variations/split_variations_cmd_unittest.py',
'../../components/variations/service/'
'generate_ui_string_overrider_unittest.py',
),
jobs=1))