Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(834)

Unified Diff: scripts/slave/recipe_modules/chromium_tests/steps.py

Issue 1588793002: Support variable substitution and tryserver- and waterfall-only cmd line args. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Addressed review feedback. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: scripts/slave/recipe_modules/chromium_tests/steps.py
diff --git a/scripts/slave/recipe_modules/chromium_tests/steps.py b/scripts/slave/recipe_modules/chromium_tests/steps.py
index d1b727dc19fc9fa7c0c966a6d633dfdd9de8059b..50b203c9005329ed65248af9e2a0e4f58be478d6 100644
--- a/scripts/slave/recipe_modules/chromium_tests/steps.py
+++ b/scripts/slave/recipe_modules/chromium_tests/steps.py
@@ -347,8 +347,46 @@ class LocalGTestTest(Test):
return self._test_runs[suffix].test_utils.gtest_results.failures
-def generate_gtest(api, mastername, buildername, test_spec,
- enable_swarming=False, scripts_compile_targets=None):
+def get_args_for_test(api, chromium_tests_api, test_spec, bot_update_step):
+ """Gets the argument list for a dynamically generated test, as
+ provided by the JSON files in src/testing/buildbot/ in the Chromium
+ workspace. This function provides the following build properties in
+ the form of variable substitutions in the tests' argument lists:
+
+ buildername
+ got_revision
+
+ so, for example, a test can declare the argument:
+
+ --test-machine-name=\"${buildername}\"
+
+ and ${buildername} will be replaced with the associated build
+ property. In this example, it will also be double-quoted, to handle
+ the case where the machine name contains contains spaces.
+
+ This function also supports trybot-only and waterfall-only
+ arguments, so that a test can pass a different argument lists on the
+ continuous builders compared to tryjobs. This is useful when the
+ waterfall bots generate some reference data that is tested against
+ during tryjobs.
+ """
+
+ args = test_spec.get('args', [])
+ if chromium_tests_api.is_precommit_mode():
+ args = args + test_spec.get('precommit_args', [])
+ else:
+ args = args + test_spec.get('non_precommit_args', [])
+ # Perform substitution of known variables.
+ substitutions = {
+ 'buildername': api.properties.get('buildername'),
+ 'got_revision': bot_update_step.presentation.properties['got_revision']
+ }
+ return [string.Template(arg).safe_substitute(substitutions) for arg in args]
+
+
+def generate_gtest(api, chromium_tests_api, mastername, buildername, test_spec,
+ bot_update_step, enable_swarming=False,
+ scripts_compile_targets=None):
def canonicalize_test(test):
if isinstance(test, basestring):
canonical_test = {'test': test}
@@ -364,7 +402,7 @@ def generate_gtest(api, mastername, buildername, test_spec,
test_spec.get(buildername, {}).get('gtest_tests', [])]
for test in get_tests(api):
- args = test.get('args', [])
+ args = get_args_for_test(api, chromium_tests_api, test, bot_update_step)
if test['shard_index'] != 0 or test['total_shards'] != 1:
args.extend(['--test-launcher-shard-index=%d' % test['shard_index'],
'--test-launcher-total-shards=%d' % test['total_shards']])
@@ -398,14 +436,16 @@ def generate_gtest(api, mastername, buildername, test_spec,
override_compile_targets=override_compile_targets)
-def generate_script(api, mastername, buildername, test_spec,
- enable_swarming=False, scripts_compile_targets=None):
+def generate_script(api, chromium_tests_api, mastername, buildername, test_spec,
+ bot_update_step, enable_swarming=False,
+ scripts_compile_targets=None):
for script_spec in test_spec.get(buildername, {}).get('scripts', []):
yield ScriptTest(
str(script_spec['name']),
script_spec['script'],
scripts_compile_targets, # pragma: no cover
- script_spec.get('args', []))
+ get_args_for_test(
+ api, chromium_tests_api, script_spec, bot_update_step))
class DynamicPerfTests(Test):
@@ -1120,8 +1160,8 @@ class SwarmingIsolatedScriptTest(SwarmingTest):
return valid, failures
-def generate_isolated_script(api, mastername, buildername, test_spec,
- enable_swarming=False,
+def generate_isolated_script(api, chromium_tests_api, mastername, buildername,
+ test_spec, bot_update_step, enable_swarming=False,
scripts_compile_targets=None):
for spec in test_spec.get(buildername, {}).get('isolated_scripts', []):
use_swarming = False
@@ -1134,7 +1174,7 @@ def generate_isolated_script(api, mastername, buildername, test_spec,
swarming_shards = swarming_spec.get('shards', 1)
swarming_dimension_sets = swarming_spec.get('dimension_sets')
name = str(spec['name'])
- args = args=spec.get('args', [])
+ args = get_args_for_test(api, chromium_tests_api, spec, bot_update_step)
Paweł Hajdan Jr. 2016/01/20 15:10:38 If the support is intended for isolated script tes
Ken Russell (switch to Gerrit) 2016/01/21 01:29:27 Done and tests updated.
target_name = spec['isolate_name']
# This features is only needed for the cases in which the *_run compile
# target is needed to generate isolate files that contains dynamically libs.
« no previous file with comments | « scripts/slave/recipe_modules/chromium_tests/bot_config_and_test_db.py ('k') | scripts/slave/recipes/android/perf.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698