| # Copyright 2020 The Pigweed Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| # use this file except in compliance with the License. You may obtain a copy of |
| # the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations under |
| # the License. |
| """Full test of submodule functionality of checkout module.""" |
| |
| DEPS = [ |
| 'fuchsia/status_check', |
| 'pigweed/checkout', |
| 'pigweed/cq_deps', |
| 'recipe_engine/path', |
| 'recipe_engine/properties', |
| 'recipe_engine/step', |
| ] |
| |
| PYTHON_VERSION_COMPATIBILITY = "PY3" |
| |
| |
| def RunSteps(api): # pylint: disable=invalid-name |
| api.checkout() |
| with api.step.nest('snapshot_to_dir'): |
| api.checkout.snapshot_to_dir(api.path['start_dir'].join('snapshot')) |
| |
| |
| def GenTests(api): # pylint: disable=invalid-name |
| def props(**kwargs): |
| kwargs.setdefault( |
| 'remote', 'https://pigweed.googlesource.com/pigweed/pigweed.git' |
| ) |
| kwargs.setdefault('branch', None) |
| |
| return api.properties(**api.checkout.git_properties(**kwargs)) |
| |
| submodule_data = api.checkout.submodules( |
| foo='https://x.googlesource.com/foo', |
| bar='https://x.googlesource.com/bar', |
| baz='https://x.googlesource.com/baz.git', |
| # Using 'b/c/d' instead of 'a/b/c' because an 'a/' prefix is treated |
| # specially by Gerrit and the buildbucket module. |
| **{'b/c/d': 'https://x.googlesource.com/b/c/d'} |
| ) |
| |
| yield ( |
| api.status_check.test('submodule-try') |
| + props() |
| + api.checkout.try_test_data(git_repo='https://x.googlesource.com/baz') |
| + submodule_data |
| + api.checkout.all_changes_applied() |
| ) |
| |
| yield ( |
| api.status_check.test('submodule-ci') |
| + props() |
| + api.checkout.ci_test_data(git_repo='https://x.googlesource.com/b/c/d') |
| + submodule_data |
| ) |
| |
| yield ( |
| api.status_check.test('submodule-try-gibberish', status='infra_failure') |
| + props() |
| + api.checkout.try_test_data(git_repo='https://x.googlesource.com/baz') |
| + api.checkout.submodules(raw_submodule_status='GIBBERISH!') |
| + api.checkout.all_changes_applied() |
| ) |
| |
| yield ( |
| api.status_check.test('submodule-try-not-found', status='infra_failure') |
| + props() |
| + api.checkout.try_test_data(git_repo='https://x.googlesource.com/xyz') |
| + submodule_data |
| + api.checkout.no_changes_applied() |
| ) |
| |
| yield ( |
| api.status_check.test('submodule-try-equivalent') |
| + props( |
| equivalent_remotes=( |
| ( |
| 'https://z.googlesource.com/foo', |
| 'https://x.googlesource.com/foo', |
| ), |
| ), |
| ) |
| + api.checkout.try_test_data(git_repo='https://z.googlesource.com/foo') |
| + submodule_data |
| + api.checkout.all_changes_applied() |
| ) |
| |
| def cl(project, change, patchset=1, name='pigweed'): |
| return api.checkout.cl( |
| host='{}-review.googlesource.com'.format(name), |
| project=project, |
| change=change, |
| patchset=patchset, |
| ) |
| |
| yield ( |
| api.status_check.test('submodule-try-multiple') |
| + props() |
| + api.checkout.try_test_data( |
| gerrit_changes=[ |
| cl('foo', 1234, name='x'), |
| cl('bar', 2345, name='x'), |
| cl('pigweed/pigweed', 3456), |
| ] |
| ) |
| + submodule_data |
| + api.checkout.all_changes_applied() |
| + api.checkout.change_applied('x:1234') |
| + api.checkout.change_applied('x:2345') |
| + api.checkout.change_applied('pigweed:3456') |
| ) |
| |
| yield ( |
| api.status_check.test('submodule-try-multiple-one-missing') |
| + props() |
| + api.checkout.try_test_data( |
| gerrit_changes=[ |
| cl('foo', 1234, name='x'), |
| cl('not-a-submodule', 2345, name='x'), |
| cl('pigweed/pigweed', 3456), |
| ] |
| ) |
| + submodule_data |
| + api.checkout.some_changes_applied() |
| + api.checkout.change_applied('x:1234') |
| + api.checkout.change_not_applied('x:2345') |
| + api.checkout.change_applied('pigweed:3456') |
| ) |
| |
| # These tests are nominally identical to 'submodule-try-multiple' and |
| # 'submodule-try-multiple-one-missing' above but use the cq_deps module. |
| # After the 'process gerrit changes' step all changes are minor (e.g. |
| # '2345' instead of '2345L'). |
| yield ( |
| api.status_check.test('submodule-try-multiple-cqdeps') |
| + props() |
| + api.checkout.try_test_data( |
| git_repo='https://x.googlesource.com/foo', |
| change_number=1234, |
| patch_set=1, |
| ) |
| + api.cq_deps.details( |
| 'x:1234', |
| message='Requires: x:2345,pigweed:3456', |
| prefix='checkout pigweed.change data.process gerrit changes.', |
| ) |
| + api.cq_deps.details( |
| 'x:2345', |
| project='bar', |
| prefix='checkout pigweed.change data.process gerrit changes.', |
| ) |
| + api.cq_deps.details( |
| 'pigweed:3456', |
| project='pigweed/pigweed', |
| prefix='checkout pigweed.change data.process gerrit changes.', |
| ) |
| + submodule_data |
| + api.checkout.all_changes_applied() |
| + api.checkout.change_applied('x:1234') |
| + api.checkout.change_applied('x:2345') |
| + api.checkout.change_applied('pigweed:3456') |
| ) |
| |
| yield ( |
| api.status_check.test( |
| 'submodule-try-multiple-one-missing-one-forbidden-cqdeps' |
| ) |
| + props() |
| + api.checkout.try_test_data( |
| git_repo='https://x.googlesource.com/foo', |
| change_number=1234, |
| patch_set=1, |
| ) |
| + api.cq_deps.details( |
| 'x:1234', |
| message='Requires: x:2345,pigweed:3456,forbidden:9999', |
| prefix='checkout pigweed.change data.process gerrit changes.', |
| ) |
| + api.cq_deps.details( |
| 'x:2345', |
| project='not-a-submodule', |
| prefix='checkout pigweed.change data.process gerrit changes.', |
| ) |
| + api.cq_deps.details( |
| 'pigweed:3456', |
| project='pigweed/pigweed', |
| prefix='checkout pigweed.change data.process gerrit changes.', |
| ) |
| + api.cq_deps.forbidden( |
| 'forbidden:9999', |
| prefix='checkout pigweed.change data.process gerrit changes.', |
| ) |
| + submodule_data |
| + api.checkout.some_changes_applied() |
| + api.checkout.change_applied('x:1234') |
| + api.checkout.change_not_applied('x:2345') |
| + api.checkout.change_not_applied('forbidden:9999') |
| + api.checkout.change_applied('pigweed:3456') |
| ) |