blob: 7a4fb85956fbede38794ac61bd1c9f1f15b34490 [file] [log] [blame]
# Copyright 2024 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.
"""Test API for cipd_roll."""
from __future__ import annotations
from PB.recipe_modules.pigweed.cipd_roll.package import Package
from recipe_engine import recipe_test_api
class CipdRollTestApi(recipe_test_api.RecipeTestApi):
"""Test API for cipd_roller."""
def package(self, cipd_path, old_version, platforms=None):
result = {
'path': cipd_path,
'tags': [old_version],
'_comment': 'comments should be preserved',
}
if platforms is not None:
result['platforms'] = list(platforms)
return result
def describe(self, spec, package_path, tags, **kwargs):
return self.step_data(
f'{spec}.cipd describe {package_path}',
self.m.cipd.example_describe(
package_path,
test_data_tags=[f'{name}:{value}' for name, value in tags],
),
**kwargs,
)
def no_ref(self, spec, package_paths):
res = None
for package_path in package_paths:
step = self.describe(spec, package_path, (), retcode=1)
res = res + step if res else step
return res
def no_common_tags(self, spec, package_paths, tagname='git_revision'):
res = None
for i, package_path in enumerate(package_paths):
step = self.describe(spec, package_path, ((tagname, i),))
res = res + step if res else step
return res
def multiple_common_tags(
self,
spec,
package_paths,
tagname='git_revision',
versions=(1, 2, 3),
):
res = None
for package_path in package_paths:
step = self.describe(
spec,
package_path,
tuple((tagname, x) for x in versions),
)
res = res + step if res else step
return res
def relaxing_works(self, spec, package_paths, tagname='git_revision'):
return self.step_data(
f'{spec}.find shared tag.cipd describe {package_paths[1]}',
self.m.cipd.example_describe(
package_paths[1],
test_data_tags=[f'{tagname}:{0}'],
),
)
def relaxing_does_not_work(
self,
spec,
package_paths,
tagname='git_revision',
):
# No version of package_paths[1] with hoped-for tag.
return self.step_data(
f'{spec}.find shared tag.cipd describe {package_paths[0]}',
self.m.cipd.example_describe(package_paths[0]),
retcode=1,
) + self.step_data(
f'{spec}.find shared tag.cipd describe {package_paths[1]}',
self.m.cipd.example_describe(package_paths[1]),
retcode=1,
)
def read_file_step_data(self, spec, package_json_name, *packages):
return self.step_data(
f'{spec}.read {package_json_name}',
self.m.file.read_json({'packages': packages}),
)
def package_props(self, *, spec, **kwargs):
kwargs.setdefault('spec', spec)
kwargs.setdefault('ref', 'latest')
kwargs.setdefault('tag', 'git_revision')
kwargs.setdefault(
'json_path',
'pw_env_setup/py/pw_env_setup/cipd_setup/pigweed.json',
)
return Package(**kwargs)