[ssci] adding gclient testing support for the CIPD expand package cmd

Bug:b/279097790
Change-Id: I1edf1c33333bf4ddd32bf462f5d23733097c25d3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4529697
Reviewed-by: Gavin Mak <gavinmak@google.com>
Commit-Queue: Dan Le Febvre <dlf@google.com>
changes/97/4529697/8
Dan Le Febvre 2 years ago committed by LUCI CQ
parent 541638fd23
commit 6316ac234e

@ -1596,6 +1596,20 @@ class CipdRoot(object):
if os.path.exists(cipd_cache_dir):
raise
def expand_package_name(self, package_name_string, **kwargs):
"""Run `cipd expand-package-name`.
CIPD package names can be declared with placeholder variables
such as '${platform}', this cmd will return the package name
with the variables resolved. The resolution is based on the host
the command is executing on.
"""
kwargs.setdefault('stderr', subprocess2.PIPE)
cmd = ['cipd', 'expand-package-name', package_name_string]
ret = subprocess2.check_output(cmd, **kwargs).decode('utf-8')
return ret.strip()
@contextlib.contextmanager
def _create_ensure_file(self):
try:

@ -10,8 +10,14 @@ import re
import shutil
import sys
ARCH_VAR = 'arch'
OS_VAR = 'os'
PLATFORM_VAR = 'platform'
CIPD_SUBDIR_RE = '@Subdir (.*)'
CIPD_ENSURE = 'ensure'
CIPD_EXPAND_PKG = 'expand-package-name'
CIPD_EXPORT = 'export'
def parse_cipd(root, contents):
@ -29,8 +35,31 @@ def parse_cipd(root, contents):
return tree
def expand_package_name_cmd(package_name):
package_split = package_name.split("/")
suffix = package_split[-1]
# Any use of var equality should return empty for testing.
if "=" in suffix:
if suffix != "${platform=fake-platform-ok}":
return ""
package_name = "/".join(package_split[:-1] + ["${platform}"])
for v in [ARCH_VAR, OS_VAR, PLATFORM_VAR]:
var = "${%s}" % v
if package_name.endswith(var):
package_name = package_name.replace(var, "%s-expanded-test-only" % v)
return package_name
def main():
assert sys.argv[1] in ['ensure', 'export']
cmd = sys.argv[1]
assert cmd in [CIPD_ENSURE, CIPD_EXPAND_PKG, CIPD_EXPORT]
# Handle cipd expand-package-name
if cmd == CIPD_EXPAND_PKG:
# Expecting argument after cmd
assert len(sys.argv) == 3
# Write result to stdout
sys.stdout.write(expand_package_name_cmd(sys.argv[2]))
return 0
parser = argparse.ArgumentParser()
parser.add_argument('-ensure-file')
parser.add_argument('-root')

@ -46,6 +46,15 @@ def write(filename, content):
f.write(content)
class CIPDRootMock(object):
def __init__(self, root_dir, service_url):
self.root_dir = root_dir
self.service_url = service_url
def expand_package_name(self, package_name):
return package_name
class SCMMock(object):
unit_test = None
def __init__(self, parsed_url, root_dir, name, out_fh=None, out_cb=None,
@ -1082,6 +1091,7 @@ class GclientTest(trial_dir.TestCase):
options, _ = gclient.OptionParser().parse_args([])
options.ignore_dep_type = 'git'
obj = gclient.GClient.LoadCurrentConfig(options)
obj._cipd_root = CIPDRootMock('src', 'https://example.com')
self.assertEqual(1, len(obj.dependencies))
sol = obj.dependencies[0]
@ -1092,9 +1102,7 @@ class GclientTest(trial_dir.TestCase):
dep = sol.dependencies[0]
self.assertIsInstance(dep, gclient.CipdDependency)
self.assertEqual(
'https://chrome-infra-packages.appspot.com/lemur@version:1234',
dep.url)
self.assertEqual('https://example.com/lemur@version:1234', dep.url)
def testDepsFromNotAllowedHostsUnspecified(self):
"""Verifies gclient works fine with DEPS without allowed_hosts."""
@ -1239,6 +1247,7 @@ class GclientTest(trial_dir.TestCase):
'}')
options, _ = gclient.OptionParser().parse_args([])
obj = gclient.GClient.LoadCurrentConfig(options)
obj._cipd_root = CIPDRootMock('src', 'https://example.com')
self.assertEqual(1, len(obj.dependencies))
sol = obj.dependencies[0]
@ -1249,9 +1258,7 @@ class GclientTest(trial_dir.TestCase):
dep = sol.dependencies[0]
self.assertIsInstance(dep, gclient.CipdDependency)
self.assertEqual(
'https://chrome-infra-packages.appspot.com/lemur@version:1234',
dep.url)
self.assertEqual('https://example.com/lemur@version:1234', dep.url)
def testIgnoresCipdDependenciesWhenFlagIsSet(self):
"""Verifies that CIPD deps are ignored if --ignore-dep-type cipd is set."""
@ -1404,8 +1411,8 @@ class GclientTest(trial_dir.TestCase):
parser = gclient.OptionParser()
options, _ = parser.parse_args([])
obj = gclient.GClient('foo', options)
cipd_root = gclient_scm.CipdRoot(
os.path.join(self.root_dir, 'dir1'), 'https://example.com')
cipd_root = CIPDRootMock(os.path.join(self.root_dir, 'dir1'),
'https://example.com')
obj.add_dependencies_and_close(
[
gclient.Dependency(
@ -1458,7 +1465,7 @@ class GclientTest(trial_dir.TestCase):
parser = gclient.OptionParser()
options, _ = parser.parse_args([])
obj = gclient.GClient('src', options)
cipd_root = obj.GetCipdRoot()
cipd_root = CIPDRootMock('src', 'https://example.com')
cipd_dep = gclient.CipdDependency(
parent=obj,

Loading…
Cancel
Save