Merge pull request #10884 from matt-kwong/fix_1.3.x_tests

Cherry-pick: fix Jenkins testing 1.3.x
pull/10895/head
Matt Kwong 8 years ago committed by GitHub
commit ca678fcaed
  1. 49
      tools/jenkins/run_c_cpp_test.sh
  2. 25
      tools/run_tests/python_utils/filter_pull_request_tests.py
  3. 5
      tools/run_tests/run_tests_matrix.py

@ -0,0 +1,49 @@
#!/usr/bin/env bash
# Copyright 2017, Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# This script is invoked by a Jenkins pull request job and executes all
# args passed to this script if the pull request affect C/C++ code
set -ex
# Enter the gRPC repo root
cd $(dirname $0)/../..
AFFECTS_C_CPP=`python -c 'import os; \
import sys; \
sys.path.insert(0, "tools/run_tests/python_utils"); \
import filter_pull_request_tests as filter; \
github_target_branch = os.environ.get("ghprbTargetBranch"); \
print(filter.affects_c_cpp("origin/%s" % github_target_branch))'`
if [ $AFFECTS_C_CPP == "False" ] ; then
echo "This pull request does not affect C/C++. Tests do not need to be run."
else
$@
fi

@ -127,6 +127,9 @@ _WHITELIST_DICT = {
'setup\.py$': [_PYTHON_TEST_SUITE]
}
# Regex that combines all keys in _WHITELIST_DICT
_ALL_TRIGGERS = "(" + ")|(".join(_WHITELIST_DICT.keys()) + ")"
# Add all triggers to their respective test suites
for trigger, test_suites in six.iteritems(_WHITELIST_DICT):
for test_suite in test_suites:
@ -169,6 +172,21 @@ def _remove_irrelevant_tests(tests, skippable_labels):
test.labels[2] not in skippable_labels]
def affects_c_cpp(base_branch):
"""
Determines if a pull request's changes affect C/C++. This function exists because
there are pull request tests that only test C/C++ code
:param base_branch: branch that a pull request is requesting to merge into
:return: boolean indicating whether C/C++ changes are made in pull request
"""
changed_files = _get_changed_files(base_branch)
# Run all tests if any changed file is not in the whitelist dictionary
for changed_file in changed_files:
if not re.match(_ALL_TRIGGERS, changed_file):
return True
return not _can_skip_tests(changed_files, _CPP_TEST_SUITE.triggers + _CORE_TEST_SUITE.triggers)
def filter_tests(tests, base_branch):
"""
Filters out tests that are safe to ignore
@ -181,11 +199,9 @@ def filter_tests(tests, base_branch):
print(' %s' % changed_file)
print('')
# Regex that combines all keys in _WHITELIST_DICT
all_triggers = "(" + ")|(".join(_WHITELIST_DICT.keys()) + ")"
# Check if all tests have to be run
# Run all tests if any changed file is not in the whitelist dictionary
for changed_file in changed_files:
if not re.match(all_triggers, changed_file):
if not re.match(_ALL_TRIGGERS, changed_file):
return(tests)
# Figure out which language and platform tests to run
skippable_labels = []
@ -196,4 +212,3 @@ def filter_tests(tests, base_branch):
skippable_labels.append(label)
tests = _remove_irrelevant_tests(tests, skippable_labels)
return tests

@ -368,6 +368,9 @@ if __name__ == "__main__":
argp.add_argument('-n', '--runs_per_test', default=1, type=_runs_per_test_type,
help='How many times to run each tests. >1 runs implies ' +
'omitting passing test from the output & reports.')
argp.add_argument('--max_time', default=-1, type=int,
help='Maximum amount of time to run tests for' +
'(other tests will be skipped)')
args = argp.parse_args()
extra_args = []
@ -379,6 +382,8 @@ if __name__ == "__main__":
extra_args.append('-n')
extra_args.append('%s' % args.runs_per_test)
extra_args.append('--quiet_success')
if args.max_time > 0:
extra_args.extend(('--max_time', '%d' % args.max_time))
all_jobs = _create_test_jobs(extra_args=extra_args, inner_jobs=args.inner_jobs) + \
_create_portability_test_jobs(extra_args=extra_args, inner_jobs=args.inner_jobs)

Loading…
Cancel
Save