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

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. Revised tests. Rebased. 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 e64896611bf4681d922bba966dcb4542f71ec5cf..f86798d6a87f83f475b29e57416dc438a816f6be 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}
@@ -398,8 +436,9 @@ 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']),
@@ -1120,8 +1159,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 +1173,10 @@ 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', [])
+ # The variable substitution and precommit/non-precommit arguments
+ # could be supported for the other test types too, but that wasn't
+ # desired at the time of this writing.
+ args = get_args_for_test(api, chromium_tests_api, spec, bot_update_step)
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