blob: 2b3d799ab73981fa8c169362e41728a4d5d1fccf [file] [log] [blame]
# 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 / "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}})
)