blob: beda537e07f279832b0fbe56704f5aa250bf8af8 [file]
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from dataclasses import dataclass
from recipe_engine.recipe_api import RecipeScriptApi
from recipe_engine.recipe_test_api import RecipeTestApi
from RECIPE_MODULES.build import (
chromium,
chromium_swarming,
chromium_tests,
chromium_tests_builder_config,
)
from RECIPE_MODULES.recipe_engine import (
buildbucket,
context,
json,
platform,
properties,
step,
)
@dataclass
class DEPS(RecipeScriptApi):
buildbucket: buildbucket.API
chromium: chromium.API
chromium_swarming: chromium_swarming.API
chromium_tests: chromium_tests.API
chromium_tests_builder_config: chromium_tests_builder_config.API
context: context.API
json: json.API
platform: platform.API
properties: properties.API
step: step.API
@dataclass
class TEST_DEPS(RecipeTestApi):
chromium_tests: chromium_tests.TEST_API
chromium_tests_builder_config: chromium_tests_builder_config.TEST_API
platform: platform.TEST_API
properties: properties.TEST_API
NO_SUFFIX = ''
from recipe_engine import post_process
from PB.recipes.build.chromium_speed_tester import InputProperties
from RECIPE_MODULES.build import chromium_tests_builder_config as ctbc
PROPERTIES = InputProperties
def RunSteps(api: DEPS, properties):
with api.chromium.chromium_layout():
builder_id, builder_config = (
api.chromium_tests_builder_config.lookup_builder()
)
api.chromium_tests.report_builders(builder_config)
execution_mode = builder_config.execution_mode
if execution_mode != ctbc.TEST:
api.step.empty(
'chromium_speed_tester',
status=api.step.INFRA_FAILURE,
step_text=(
'Unexpected execution mode. Expect: %s, Actual: %s'
% (ctbc.TEST, execution_mode)
),
)
api.chromium_tests.configure_build(builder_config)
update_result, build_dir, build_config = (
api.chromium_tests.prepare_checkout(
builder_config, timeout=3600, no_fetch_tags=True
)
)
checkout_dir = update_result.checkout_dir
source_dir = update_result.source_root.path
api.chromium_tests.lookup_builder_gn_args(
source_dir, builder_id, builder_config
)
tests = build_config.tests_on(builder_id)
api.chromium_tests.download_command_lines_for_tests(
source_dir, build_dir, tests, builder_config
)
env = {}
# Mac perf testers have a different behaviour when this environment var is
# set i.e. Chrome is started using 'open' command. See crbug/1454294
if api.platform.is_mac:
env['START_BROWSER_WITH_DEFAULT_PRIORITY'] = '1'
with api.context(env=env):
test_failure_summary = api.chromium_tests.run_tests(
checkout_dir,
source_dir,
build_dir,
builder_id,
builder_config,
tests,
)
task_groups = {
t.get_task(NO_SUFFIX).request.name: t.get_task(
NO_SUFFIX
).collect_cmd_input()
for t in tests
}
tester_properties = {
'buildername': api.buildbucket.builder_name,
'buildnumber': api.buildbucket.build.number,
'perf_dashboard_machine_group': properties.perf_dashboard_machine_group,
'got_revision_cp': properties.parent_got_revision_cp,
'got_v8_revision': properties.parent_got_v8_revision,
'got_webrtc_revision': properties.parent_got_webrtc_revision,
}
additional_trigger_properties = {
'tasks_groups': api.json.dumps(task_groups),
'tester_properties': api.json.dumps(tester_properties),
}
api.chromium_tests.trigger_child_builds(
builder_id,
update_result,
builder_config,
additional_properties=additional_trigger_properties,
)
return test_failure_summary
def GenTests(api: TEST_DEPS):
yield api.test(
'tester-coverage',
api.chromium_tests_builder_config.ci_build(
builder_group='chromium.perf',
builder='linux-r350-perf',
parent_buildername='linux-builder-perf',
),
api.post_process(post_process.DropExpectation),
)
yield api.test(
'builder-coverage',
api.chromium_tests_builder_config.ci_build(
builder_group='chromium.perf', builder='linux-builder-perf'
),
api.expect_status('INFRA_FAILURE'),
api.post_process(post_process.DropExpectation),
)
yield api.test(
'mac-tester-coverage',
api.chromium_tests_builder_config.ci_build(
builder_group='chromium.perf',
builder='mac-intel-perf',
parent_buildername='mac-builder-perf',
),
api.post_process(post_process.DropExpectation),
)
yield api.test(
'tester_does_not_trigger_processor',
api.properties(
swarm_hashes={'fake_test': 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeee/size'},
),
api.platform('linux', 64),
api.chromium_tests_builder_config.ci_build(
builder_group='fake_group',
builder='fake_triggered_tester',
builder_db=ctbc.BuilderDatabase.create(
{
'fake_group': {
'fake_builder': ctbc.BuilderSpec.create(
chromium_config='chromium',
gclient_config='chromium',
),
'fake_triggered_tester': ctbc.BuilderSpec.create(
chromium_config='chromium',
gclient_config='chromium',
parent_buildername='fake_builder',
execution_mode=ctbc.TEST,
),
}
}
),
),
api.chromium_tests.read_targets_spec(
'fake_group',
{
'fake_triggered_tester': {
'isolated_scripts': [
{
'name': 'fake_test',
'merge': {
'args': ['--foo', '--bar'],
'script': '//path/to/script.py',
},
'swarming': {
'dimensions': {
'os': 'Ubuntu-22.04',
},
},
}
],
}
},
),
api.post_process(post_process.MustRun, 'fake_test on Ubuntu-22.04'),
api.post_process(post_process.DoesNotRun, 'trigger'),
api.post_process(post_process.DropExpectation),
)
yield api.test(
'tester_pass_trigger_properties_to_processor',
api.properties(
swarm_hashes={'fake_test': 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeee/size'},
),
api.platform('linux', 64),
api.chromium_tests_builder_config.ci_build(
builder_group='fake_group',
builder='fake_triggered_tester',
builder_db=ctbc.BuilderDatabase.create(
{
'fake_group': {
'fake_builder': ctbc.BuilderSpec.create(
chromium_config='chromium',
gclient_config='chromium',
),
'fake_triggered_tester': ctbc.BuilderSpec.create(
chromium_config='chromium',
gclient_config='chromium',
parent_buildername='fake_builder',
execution_mode=ctbc.TEST,
),
'fake_triggered_processor': ctbc.BuilderSpec.create(
chromium_config='chromium',
gclient_config='chromium',
parent_buildername='fake_triggered_tester',
execution_mode=ctbc.TEST,
),
}
}
),
),
api.chromium_tests.read_targets_spec(
'fake_group',
{
'fake_triggered_tester': {
'isolated_scripts': [
{
'name': 'fake_test',
'merge': {
'args': ['--foo', '--bar'],
'script': '//path/to/script.py',
},
'swarming': {
'dimensions': {
'os': 'Ubuntu-22.04',
},
},
}
],
}
},
),
api.post_process(post_process.MustRun, 'fake_test on Ubuntu-22.04'),
api.post_process(post_process.MustRun, 'trigger'),
api.post_process(
post_process.LogContains,
'trigger',
'input',
[
'buildername',
'buildnumber',
'perf_dashboard_machine_group',
'got_revision_cp',
'got_v8_revision',
'got_webrtc_revision',
],
),
api.post_process(post_process.DropExpectation),
)