| # Copyright 2020 The Fuchsia Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| """API for recipe_engine testing.""" | |
| import datetime | |
| from recipe_engine import post_process | |
| from PB.recipe_modules.flutter.recipe_testing.tests.full import InputProperties | |
| DEPS = [ | |
| "fuchsia/buildbucket_util", | |
| "fuchsia/commit_queue", | |
| "flutter/recipe_testing", | |
| "fuchsia/swarming_retry", | |
| "recipe_engine/path", | |
| "recipe_engine/properties", | |
| ] | |
| ONE_DAY = int(datetime.timedelta(days=1).total_seconds()) | |
| MAX_BUILD_AGE_SECONDS = int(datetime.timedelta(days=28).total_seconds()) | |
| PROPERTIES = InputProperties | |
| def RunSteps(api, props): # pylint: disable=invalid-name | |
| recipes_path = api.path["start_dir"].join("recipe_path") | |
| api.recipe_testing.run_lint(recipes_path, allowlist=r"allowed_module") | |
| api.recipe_testing.run_unit_tests(recipes_path) | |
| selftest_cl = "https://flutter-review.googlesource.com/c/recipes/+/123456" | |
| selftest_builder = "flutter/try/foo.bar-debug" | |
| api.recipe_testing.run_tests( | |
| recipes_path, | |
| selftest_cl, | |
| props.recipe_testing_options, | |
| selftest_builder=selftest_builder, | |
| ) | |
| def GenTests(api): # pylint: disable=invalid-name | |
| test = api.recipe_testing | |
| project = "flutter" | |
| yield ( | |
| api.buildbucket_util.test("recursive_ls") | |
| + api.recipe_testing.options() | |
| + api.commit_queue.test_data(project, "empty") | |
| + test.affected_recipes_data( | |
| affected_recipes=[], | |
| recipe_files=["flutter/flutter.py", "abc.resources/bar.py", "abc.py"], | |
| ) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("recipes_cfg") | |
| + api.recipe_testing.options() | |
| + api.commit_queue.test_data(project, "empty") | |
| + test.affected_recipes_data( | |
| affected_recipes=[], | |
| recipe_files=["a.py", "b.py", "c.py", "d.py", "e.py"], | |
| changed_files=["infra/config/recipes.cfg"], | |
| ) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("recipe_proto") | |
| + api.recipe_testing.options() | |
| + api.commit_queue.test_data(project) | |
| + test.affected_recipes_data( | |
| affected_recipes=[], | |
| changed_files=["recipe_proto/infra/flutter.proto"], | |
| ) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("no_build_old_build_ignored_build") | |
| + api.recipe_testing.options() | |
| + api.commit_queue.test_data(project) | |
| + test.affected_recipes_data(["flutter"]) | |
| + test.build_data( | |
| "fuchsia/try/cobalt-x64-linux", | |
| "cobalt", | |
| age_seconds=MAX_BUILD_AGE_SECONDS - ONE_DAY, | |
| skip=True, | |
| ) | |
| + test.build_data( | |
| "fuchsia/try/core.x64-debug", | |
| "fuchsia", | |
| age_seconds=MAX_BUILD_AGE_SECONDS + ONE_DAY, | |
| ) | |
| + test.no_build("fuchsia/try/core.arm64-debug") | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("excluded") | |
| + api.recipe_testing.options( | |
| [api.recipe_testing.project(excluded_buckets=("try",))] | |
| ) | |
| + api.properties(ignored_buckets=["try"]) | |
| + api.commit_queue.test_data(project) | |
| + test.affected_recipes_data(["flutter"]) | |
| + api.post_process( | |
| post_process.MustRun, | |
| "excluding 3 builders from bucket flutter/try", | |
| ) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("two_pass_one_skip") | |
| + api.recipe_testing.options() | |
| + api.commit_queue.test_data(project) | |
| + test.affected_recipes_data(["fuchsia"]) | |
| + test.build_data("fuchsia/try/cobalt-x64-linux", "cobalt", skip=True) | |
| + test.build_data( | |
| "fuchsia/try/core.x64-debug", "fuchsia", cl_cached=True, fake_id=100 | |
| ) | |
| + test.build_data("fuchsia/try/core.arm64-debug", "fuchsia", fake_id=200) | |
| + api.swarming_retry.collect_data( | |
| [ | |
| test.task_result(100, "fuchsia/try/core.x64-debug"), | |
| test.task_result(200, "fuchsia/try/core.arm64-debug"), | |
| ] | |
| ) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("fuchsia_recipe_unaffected") | |
| + api.recipe_testing.options() | |
| + api.commit_queue.test_data(project) | |
| + test.affected_recipes_data(["qemu"]) | |
| + test.build_data("fuchsia/try/cobalt-x64-linux", "cobalt", skip=True) | |
| + test.build_data("fuchsia/try/core.x64-debug", "fuchsia", skip=True) | |
| + test.build_data("fuchsia/try/core.arm64-debug", "fuchsia", skip=True) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("recipes") | |
| + api.recipe_testing.options() | |
| + api.commit_queue.test_data(project, "recipes-only") | |
| + test.affected_recipes_data(["recipes"]) | |
| + test.build_data("fuchsia/try/recipes", "recipes") | |
| + api.swarming_retry.collect_data( | |
| [test.task_result(100, "fuchsia/try/recipes")] | |
| ) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("with_buildbucket") | |
| + api.commit_queue.test_data(project) | |
| + test.affected_recipes_data(["fuchsia"]) | |
| + test.build_data( | |
| "fuchsia/try/cobalt-x64-linux", "cobalt", skip=True, using_led=False | |
| ) | |
| + test.build_data( | |
| "fuchsia/try/core.x64-debug", | |
| "fuchsia", | |
| cl_cached=True, | |
| fake_id=100, | |
| using_led=False, | |
| ) | |
| + test.build_data( | |
| "fuchsia/try/core.arm64-debug", | |
| "fuchsia", | |
| fake_id=200, | |
| using_led=False, | |
| ) | |
| + test.existing_green_tryjobs(["fuchsia/try/core.arm64-release"]) | |
| # This line only affects coverage. It's sufficiently tested in other | |
| # modules that use this module. | |
| + api.recipe_testing.options( | |
| use_buildbucket=True, | |
| projects=(api.recipe_testing.project(),), | |
| ) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("recipes_with_buildbucket") | |
| + api.commit_queue.test_data(project, "recipes-only") | |
| + test.affected_recipes_data(["recipes"]) | |
| + test.build_data("fuchsia/try/recipes", "recipes", using_led=False) | |
| + api.recipe_testing.options(use_buildbucket=True) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("no_latest_cl") | |
| + api.recipe_testing.options() | |
| + api.commit_queue.test_data(project) | |
| + test.affected_recipes_data(["fuchsia"]) | |
| + test.build_data("fuchsia/try/core.x64-debug", "fuchsia", cl_cached=True) | |
| + test.build_data( | |
| "fuchsia/try/core.arm64-debug", | |
| "fuchsia", | |
| num_log_entries=0, | |
| fake_id=200, | |
| ) | |
| + api.swarming_retry.collect_data( | |
| [ | |
| test.task_result(100, "fuchsia/try/core.x64-debug"), | |
| test.task_result(200, "fuchsia/try/core.arm64-debug"), | |
| ] | |
| ) | |
| ) | |
| yield ( | |
| api.buildbucket_util.test("depth", status="infra_failure") | |
| + api.properties(**{"$flutter/recipe_testing": {"recipe_depth": 2}}) | |
| ) |