blob: 6a3aa6f92e22b7c5beb6494a2ef82c2a9e9ce2b5 [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.go.chromium.org.luci.buildbucket.proto import (
build as build_pb2,
common as common_pb2,
)
from PB.recipe_modules.fuchsia.recipe_testing.tests.full import InputProperties
DEPS = [
"fuchsia/buildbucket_util",
"fuchsia/commit_queue",
"fuchsia/recipe_testing",
"recipe_engine/buildbucket",
"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://fuchsia-review.googlesource.com/c/fuchsia/+/123456"
selftest_builder = "fuchsia/try/recipes"
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 = "fuchsia"
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=["fuchsia/fuchsia.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/fuchsia.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(["fuchsia"])
+ 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_buckets")
+ api.recipe_testing.options(
[api.recipe_testing.project(excluded_buckets=("*try*",))]
)
+ api.commit_queue.test_data(project)
+ test.affected_recipes_data(["fuchsia"])
+ api.post_process(
post_process.MustRun,
"excluding 3 builders from bucket fuchsia/try",
)
)
yield (
api.buildbucket_util.test("excluded_builders")
+ api.recipe_testing.options(
[api.recipe_testing.project(excluded_builders=("*cobalt*",))]
)
+ api.commit_queue.test_data(project)
+ test.affected_recipes_data(["fuchsia"])
+ api.post_process(
post_process.MustRun,
"excluding 1 builders from bucket fuchsia/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
)
+ 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,
)
)
yield (
api.buildbucket_util.test("all_green")
+ api.recipe_testing.options()
+ api.commit_queue.test_data(project)
+ test.affected_recipes_data(["fuchsia"])
+ api.buildbucket.simulated_search_results(
[
build_pb2.Build(
id=881001,
builder=api.recipe_testing.builder_id(
"fuchsia/try/core.arm64-debug"
),
status=common_pb2.SUCCESS,
),
],
"get builders.get green tryjobs (881000)",
)
+ api.buildbucket.simulated_search_results(
[
build_pb2.Build(
id=882001,
builder=api.recipe_testing.builder_id("fuchsia/try/core.x64-debug"),
status=common_pb2.SUCCESS,
),
],
"get builders.get green tryjobs (882000)",
)
)
yield (
api.buildbucket_util.test("depth", status="INFRA_FAILURE")
+ api.properties(**{"$fuchsia/recipe_testing": {"recipe_depth": 2}})
)