blob: 7238498f945248cc89fcf230dbd1fc1dd5037d69 [file]
# Copyright 2025 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from recipe_engine import post_process, recipe_api, turboci
from PB.turboci.graph.orchestrator.v1.check_kind import CheckKind
from PB.turboci.graph.orchestrator.v1.check_state import CheckState
from PB.turboci.graph.orchestrator.v1.graph_view import GraphView
from PB.turboci.data.gerrit.v1.gerrit_change_info import GerritChangeInfo
from PB.turboci.data.chrome.depot_tools.v1.bot_update_results import (
BotUpdateResults)
from PB.turboci.data.gerrit.v1.gob_source_check_options import (
GobSourceCheckOptions)
from PB.turboci.data.gerrit.v1.gob_source_check_results import (
GobSourceCheckResults)
DEPS = [
'bot_update',
'gclient',
'recipe_engine/assertions',
'recipe_engine/buildbucket',
'recipe_engine/path',
'recipe_engine/properties',
]
PROPERTIES = {
'turboci_check_id': recipe_api.Property(),
'bar_revision': recipe_api.Property(default='refs/heads/bar'),
}
_FOO_REPO_URL = 'https://fake-host.googlesource.com/foo'
_BAR_REPO_URL = 'https://fake-host.googlesource.com/bar'
def RunSteps(api, turboci_check_id: str | None, bar_revision: str):
gclient_config = api.gclient.make_config()
s = gclient_config.solutions.add()
s.url = _FOO_REPO_URL
s.name = 'foo'
s = gclient_config.solutions.add()
s.url = _BAR_REPO_URL
s.name = 'bar'
s.revision = bar_revision
api.bot_update.ensure_checkout(gclient_config,
turboci_check_id=turboci_check_id)
def GenTests(api):
yield api.test(
'no-check-ci',
api.properties(turboci_check_id=None),
api.buildbucket.ci_build(git_repo=_FOO_REPO_URL),
api.bot_update.repo_urls({
'foo': f'{_FOO_REPO_URL}.git',
'bar': f'{_BAR_REPO_URL}.git',
}),
api.post_process(post_process.DropExpectation),
api.assert_turboci_graph(
lambda assert_, graph: assert_(not graph.checks)),
)
yield api.test(
'no-check-try',
api.properties(turboci_check_id=None),
api.buildbucket.try_build(git_repo=_FOO_REPO_URL),
api.bot_update.repo_urls({
'foo': f'{_FOO_REPO_URL}.git',
'bar': f'{_BAR_REPO_URL}.git',
}),
api.post_process(post_process.DropExpectation),
api.assert_turboci_graph(
lambda assert_, graph: assert_(not graph.checks)),
)
def check_ci_graph_assert(assert_, graph: GraphView):
check_id = 'fake-check-id'
check = turboci.get_check_view(graph, check_id).check
assert_(check.kind == CheckKind.CHECK_KIND_SOURCE)
assert_(check.state == CheckState.CHECK_STATE_FINAL)
gob_source_check_options = turboci.get_option(GobSourceCheckOptions,
check)
expected_gob_source_check_options = GobSourceCheckOptions(
base_pinned_repos=GobSourceCheckOptions.PinnedRepoMounts(
mount_overrides=[
GobSourceCheckOptions.PinnedRepoMounts.MountOverride(
mount='bar',
override=GobSourceCheckOptions.PinnedRepoMounts.GitCommit(
ref='refs/heads/good-bar',
id='b' * 40,
),
),
GobSourceCheckOptions.PinnedRepoMounts.MountOverride(
mount='foo',
override=GobSourceCheckOptions.PinnedRepoMounts.GitCommit(
ref='refs/heads/foo',
id='a' * 40,
),
),
]))
assert_(gob_source_check_options == expected_gob_source_check_options)
gob_source_check_results = turboci.get_results(GobSourceCheckResults,
check)
expected_gob_source_check_results = [
GobSourceCheckResults(),
]
assert_(gob_source_check_results == expected_gob_source_check_results)
bot_update_check_results = turboci.get_results(BotUpdateResults, check)
expected_bot_update_check_results = [
BotUpdateResults(
manifest={
'bar':
BotUpdateResults.GitCommit(
host='fake-host',
project='bar',
id='b' * 40,
),
'foo':
BotUpdateResults.GitCommit(
host='fake-host',
project='foo',
id='a' * 40,
),
}),
]
assert_(bot_update_check_results == expected_bot_update_check_results)
yield api.test(
'check-ci',
api.properties(
turboci_check_id='fake-check-id',
bar_revision='refs/heads/good-bar:' + 'b' * 40,
),
api.buildbucket.ci_build(
git_repo=_FOO_REPO_URL,
git_ref='refs/heads/foo',
revision='a' * 40,
),
api.bot_update.repo_urls({
'foo': f'{_FOO_REPO_URL}.git',
'bar': f'{_BAR_REPO_URL}.git',
}),
api.assert_turboci_graph(check_ci_graph_assert),
api.post_process(post_process.DropExpectation),
)
def check_ci_revision_only_graph_assert(assert_, graph: GraphView):
check_id = 'fake-check-id'
check = turboci.get_check_view(graph, check_id).check
assert_(check.kind == CheckKind.CHECK_KIND_SOURCE)
assert_(check.state == CheckState.CHECK_STATE_FINAL)
gob_source_check_options = turboci.get_option(GobSourceCheckOptions,
check)
expected_gob_source_check_options = GobSourceCheckOptions(
base_pinned_repos=GobSourceCheckOptions.PinnedRepoMounts(
mount_overrides=[
GobSourceCheckOptions.PinnedRepoMounts.MountOverride(
mount='bar',
override=GobSourceCheckOptions.PinnedRepoMounts.GitCommit(
ref='refs/heads/good-bar'),
),
GobSourceCheckOptions.PinnedRepoMounts.MountOverride(
mount='foo',
override=GobSourceCheckOptions.PinnedRepoMounts.GitCommit(
id='a' * 40),
),
]))
assert_(gob_source_check_options == expected_gob_source_check_options)
gob_source_check_results = turboci.get_results(GobSourceCheckResults,
check)
expected_gob_source_check_results = [
GobSourceCheckResults(),
]
assert_(gob_source_check_results == expected_gob_source_check_results)
bot_update_check_results = turboci.get_results(BotUpdateResults, check)
expected_bot_update_check_results = [
BotUpdateResults(
manifest={
'bar':
BotUpdateResults.GitCommit(
host='fake-host',
project='bar',
id='b' * 40,
),
'foo':
BotUpdateResults.GitCommit(
host='fake-host',
project='foo',
id='a' * 40,
),
}),
]
assert_(bot_update_check_results == expected_bot_update_check_results)
yield api.test(
'check-ci-revision-only',
api.properties(
turboci_check_id='fake-check-id',
bar_revision='refs/heads/good-bar',
),
api.buildbucket.ci_build(
git_repo=_FOO_REPO_URL,
git_ref=None,
revision='a' * 40,
),
api.bot_update.revisions({'bar': 'b' * 40}),
api.bot_update.repo_urls({
'foo': f'{_FOO_REPO_URL}.git',
'bar': f'{_BAR_REPO_URL}.git',
}),
api.assert_turboci_graph(check_ci_revision_only_graph_assert),
api.post_process(post_process.DropExpectation),
)
def check_try_graph_assert(assert_, graph: GraphView):
check_id = 'fake-check-id'
check = turboci.get_check_view(graph, check_id).check
assert_(check.kind == CheckKind.CHECK_KIND_SOURCE)
assert_(check.state == CheckState.CHECK_STATE_FINAL)
gob_source_check_options = turboci.get_option(GobSourceCheckOptions,
check)
expected_gob_source_check_options = GobSourceCheckOptions(
gerrit_changes=[
GobSourceCheckOptions.GerritChange(
hostname='fake-host',
change_number=123456,
patchset=7,
mounts_to_apply=['foo'],
),
],
base_pinned_repos=GobSourceCheckOptions.PinnedRepoMounts(
mount_overrides=[
GobSourceCheckOptions.PinnedRepoMounts.MountOverride(
mount='bar',
override=GobSourceCheckOptions.PinnedRepoMounts.GitCommit(
ref='refs/heads/good-bar'),
),
GobSourceCheckOptions.PinnedRepoMounts.MountOverride(
mount='foo',
override=GobSourceCheckOptions.PinnedRepoMounts.GitCommit(
ref='refs/heads/main'),
),
]),
)
assert_(gob_source_check_options == expected_gob_source_check_options)
gob_source_check_results = turboci.get_results(GobSourceCheckResults,
check)
expected_gob_source_check_results = [
GobSourceCheckResults(changes=[
GerritChangeInfo(
host='fake-host',
project='foo',
branch='main',
full_branch='refs/heads/main',
change_number=123456,
patchset=7,
),
]),
]
assert_(gob_source_check_results == expected_gob_source_check_results)
bot_update_check_results = turboci.get_results(BotUpdateResults, check)
expected_bot_update_check_results = [
BotUpdateResults(
manifest={
'bar':
BotUpdateResults.GitCommit(
host='fake-host',
project='bar',
id='b' * 40,
),
'foo':
BotUpdateResults.GitCommit(
host='fake-host',
project='foo',
id='a' * 40,
),
}),
]
assert_(bot_update_check_results == expected_bot_update_check_results)
yield api.test(
'check-try',
api.properties(
turboci_check_id='fake-check-id',
bar_revision='refs/heads/good-bar',
),
api.buildbucket.try_build(
git_repo=_FOO_REPO_URL,
change_number=123456,
patch_set=7,
),
api.bot_update.revisions({
'foo': 'a' * 40,
'bar': 'b' * 40,
}),
api.bot_update.repo_urls({
'foo': f'{_FOO_REPO_URL}.git',
'bar': f'{_BAR_REPO_URL}.git',
}),
api.assert_turboci_graph(check_try_graph_assert),
api.post_process(post_process.DropExpectation),
)