| # 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 = [ |
| "flutter/recipe_testing", |
| "fuchsia/buildbucket_util", |
| "fuchsia/commit_queue", |
| "recipe_engine/json", |
| "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) |
| ) |
| |
| 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") |
| ) |
| |
| 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, |
| exe_cipd_version="refs/heads/main" |
| ) + test.build_data( |
| "fuchsia/try/core.x64-debug", |
| "fuchsia", |
| cl_cached=True, |
| fake_id=100, |
| using_led=False, |
| exe_cipd_version="refs/heads/main" |
| ) + test.build_data( |
| "fuchsia/try/core.arm64-debug", |
| "fuchsia", |
| fake_id=200, |
| using_led=False, |
| exe_cipd_version="refs/heads/main" |
| ) + 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(),), |
| ) + api.step_data("gerrit get cl info 12345", api.json.output({})) + |
| api.properties( |
| buildset='patch/gerrit/flutter-review.googlesource.com/12345/1' |
| ) |
| ) |
| |
| 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, |
| ) |
| ) |
| |
| yield ( |
| api.buildbucket_util.test("depth", status="INFRA_FAILURE") + |
| api.properties(**{"$flutter/recipe_testing": {"recipe_depth": 2}}) |
| ) |