| # 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 recipe_engine.recipe_api import Property |
| |
| DEPS = [ |
| 'flutter/retry', |
| 'recipe_engine/properties', |
| 'recipe_engine/raw_io', |
| 'recipe_engine/step', |
| ] |
| |
| PROPERTIES = { |
| "max_attempts": |
| Property( |
| kind=int, |
| help="How many times to try before giving up.", |
| default=1, |
| ), |
| } |
| |
| |
| def RunSteps(api, max_attempts): |
| api.retry.step( |
| 'test: Run FEMU Test Suite', [ |
| 'echo', 'hello', '>', |
| api.raw_io.output_text(name='syslog'), ';', 'echo', 'hello', '>', |
| api.raw_io.output_text(name='emulator_log') |
| ], |
| max_attempts=max_attempts, |
| step_test_data=( |
| lambda: api.raw_io.test_api.output_text('failure', name='syslog') |
| ) |
| ) |
| api.retry.step('test: mytest', ['ls', '-la'], max_attempts=max_attempts) |
| |
| def func1(): |
| api.step('test: mytest_func', ['ls', '-a']) |
| |
| def func2(): |
| api.step('test: mytest_func_basic', ['ls', '-a']) |
| |
| api.retry.wrap(func1, step_name='test: mytest_func', max_attempts=max_attempts) |
| api.retry.basic_wrap(func2, max_attempts=max_attempts) |
| |
| |
| def GenTests(api): |
| yield api.test('passing') + api.properties(max_attempts=1) |
| yield api.test('failing_step') + api.properties(max_attempts=1 |
| ) + api.step_data( |
| 'test: mytest', retcode=1 |
| ) |
| yield api.test('failing_wrap') + api.properties(max_attempts=1 |
| ) + api.step_data( |
| 'test: mytest_func', |
| retcode=1 |
| ) |
| yield api.test('failing_basic_wrap') + api.properties(max_attempts=1 |
| ) + api.step_data( |
| 'test: mytest_func_basic', |
| retcode=1 |
| ) |
| yield api.test('pass_with_retries') + api.properties( |
| max_attempts=2 |
| ) + api.step_data( |
| 'test: mytest', retcode=1 |
| ) + api.step_data( |
| 'test: mytest_func', retcode=1 |
| ) + api.step_data( |
| 'test: mytest_func_basic', retcode=1 |
| ) |