blob: 2b02e6f9b9980efaf1153a1044c65d6e8b955cd8 [file] [log] [blame]
# Copyright 2017 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.
DEPS = [
'chromium',
'chromium_tests',
'depot_tools/tryserver',
'recipe_engine/platform',
'recipe_engine/properties',
'recipe_engine/step',
'swarming',
'test_results',
'test_utils',
]
from recipe_engine.recipe_api import Property
from recipe_engine import post_process
PROPERTIES = {
'abort_on_failure': Property(default=False),
'test_swarming': Property(default=False),
'test_name': Property(default='MockTest'),
}
def RunSteps(api, test_swarming, test_name, abort_on_failure):
api.chromium.set_config('chromium')
api.chromium_tests.set_config('chromium')
api.test_results.set_config('public_server')
if test_swarming:
tests = [
api.chromium_tests.steps.MockSwarmingTest(name=test_name),
api.chromium_tests.steps.MockSwarmingTest(name=test_name + '_2'),
api.chromium_tests.steps.MockTest(name='test3')
]
api.chromium_tests.set_config('staging')
else:
tests = [
api.chromium_tests.steps.MockTest(
name=test_name, abort_on_failure=abort_on_failure),
api.chromium_tests.steps.MockTest(name='test2')
]
_, failed_tests = api.test_utils.run_tests(
api.chromium_tests.m, tests, '')
if failed_tests:
raise api.step.StepFailure(
'failed: %s' % ' '.join(t.name for t in failed_tests))
def GenTests(api):
failure_code = api.chromium_tests.steps.MockTest.ExitCodes.FAILURE
infra_code = api.chromium_tests.steps.MockTest.ExitCodes.INFRA_FAILURE
yield (
api.test('success') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests') +
api.post_process(post_process.MustRun, 'test2') +
api.post_process(post_process.StatusSuccess) +
api.post_process(post_process.DropExpectation)
)
yield (
api.test('success_swarming') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests',
test_swarming=True,
swarm_hashes={
'base_unittests': '[dummy hash for base_unittests]',
'base_unittests_2': '[dummy hash for base_unittests_2]',
}) +
api.swarming.wait_for_finished_task_set([
([], 1),
([['10000'], ['110000']], 1),
]) +
api.post_process(post_process.StatusSuccess) +
api.post_process(post_process.DropExpectation)
)
yield (
# Tests that test_utils will poll swarming several times, waiting for the
# task to complete.
api.test('success_swarming_one_task_still_pending') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests',
test_swarming=True,
swarm_hashes={
'base_unittests': '[dummy hash for base_unittests]',
'base_unittests_2': '[dummy hash for base_unittests_2]',
}) +
api.swarming.wait_for_finished_task_set([
([], 1),
([['110000']], 1),
]) +
# There's no call to get_states after there's only one test left pending,
# as the test_utils logic just calls the regular collect logic on that
# test.
api.post_process(post_process.MustRun, 'base_unittests') +
api.post_process(post_process.StatusSuccess) +
api.post_process(post_process.DropExpectation)
)
yield (
# Tests that test_utils will poll swarming several times, waiting for the
# task to complete.
api.test('success_swarming_long_pending') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests',
test_swarming=True,
swarm_hashes={
'base_unittests': '[dummy hash for base_unittests]',
'base_unittests_2': '[dummy hash for base_unittests_2]',
}) +
api.swarming.wait_for_finished_task_set([
([], 1),
([], 1),
([], 1),
([], 1),
([], 1),
([['10000'], ['110000']], 1),
]) +
api.post_process(post_process.StatusSuccess) +
api.post_process(post_process.DropExpectation)
)
yield (
api.test('failure') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests') +
api.override_step_data('base_unittests', retcode=failure_code) +
api.post_process(post_process.MustRun, 'test2') +
api.post_process(post_process.StatusFailure) +
api.post_process(post_process.DropExpectation)
)
yield (
api.test('failure_abort') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests',
abort_on_failure=True) +
api.override_step_data('base_unittests', retcode=failure_code) +
api.post_process(post_process.DoesNotRun, 'test2') +
api.post_process(post_process.StatusFailure) +
api.post_process(post_process.DropExpectation)
)
yield (
api.test('infra_failure') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests') +
api.override_step_data('base_unittests', retcode=infra_code) +
api.post_process(post_process.DoesNotRun, 'test2') +
api.post_process(post_process.StatusFailure) +
api.post_process(post_process.DropExpectation)
)
yield (
api.test('pre_run_failure') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests') +
api.override_step_data(
'test_pre_run.pre_run base_unittests',
retcode=failure_code) +
api.post_process(post_process.MustRun, 'base_unittests') +
api.post_process(post_process.MustRun, 'test2') +
api.post_process(post_process.StatusFailure) +
api.post_process(post_process.DropExpectation)
)
yield (
api.test('pre_run_infra_failure') +
api.properties(
mastername='test_mastername',
buildername='test_buildername',
bot_id='test_bot_id',
buildnumber=123,
test_name='base_unittests') +
api.override_step_data(
'test_pre_run.pre_run base_unittests',
retcode=infra_code) +
api.post_process(post_process.DoesNotRun, 'base_unittests') +
api.post_process(post_process.StatusFailure) +
api.post_process(post_process.DropExpectation)
)