| #!/usr/bin/env vpython3 |
| # Copyright (c) 2020 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Smoke tests for gclient.py. |
| |
| Shell out 'gclient' and run cipd tests. |
| """ |
| |
| import logging |
| import os |
| import sys |
| import unittest |
| |
| import gclient_smoketest_base |
| |
| ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| |
| CHROME_INFRA_URL = "https://chrome-infra-packages.appspot.com" |
| |
| |
| class GClientSmokeCipd(gclient_smoketest_base.GClientSmokeBase): |
| def setUp(self): |
| super(GClientSmokeCipd, self).setUp() |
| self.enabled = self.FAKE_REPOS.set_up_git() |
| if not self.enabled: |
| self.skipTest('git fake repos not available') |
| self.env['PATH'] = (os.path.join(ROOT_DIR, 'testing_support') + |
| os.pathsep + self.env['PATH']) |
| |
| def testSyncCipd(self): |
| self.gclient(['config', self.git_base + 'repo_14', '--name', 'src']) |
| self.gclient(['sync']) |
| |
| tree = self.mangle_git_tree(('repo_14@1', 'src')) |
| tree.update({ |
| '_cipd': |
| '\n'.join([ |
| '$ParanoidMode CheckPresence', |
| '$OverrideInstallMode copy', |
| '', |
| '@Subdir src/another_cipd_dep', |
| 'package1 1.1-cr0', |
| 'package2 1.13', |
| '', |
| '@Subdir src/cipd_dep', |
| 'package0 0.1', |
| '', |
| '@Subdir src/cipd_dep_with_cipd_variable', |
| 'package3/${platform} 1.2', |
| '', |
| '', |
| ]), |
| 'src/another_cipd_dep/_cipd': |
| '\n'.join([ |
| 'package1 1.1-cr0', |
| 'package2 1.13', |
| ]), |
| 'src/cipd_dep/_cipd': |
| 'package0 0.1', |
| 'src/cipd_dep_with_cipd_variable/_cipd': |
| 'package3/${platform} 1.2', |
| }) |
| self.assertTree(tree) |
| |
| def testConvertGitToCipd(self): |
| self.gclient(['config', self.git_base + 'repo_13', '--name', 'src']) |
| |
| # repo_13@1 has src/repo12 as a git dependency. |
| self.gclient([ |
| 'sync', '-v', '-v', '-v', '--revision', |
| self.githash('repo_13', 1) |
| ]) |
| |
| tree = self.mangle_git_tree(('repo_13@1', 'src'), |
| ('repo_12@1', 'src/repo12')) |
| self.assertTree(tree) |
| |
| # repo_13@3 has src/repo12 as a cipd dependency. |
| self.gclient([ |
| 'sync', '-v', '-v', '-v', '--revision', |
| self.githash('repo_13', 3), '--delete_unversioned_trees' |
| ]) |
| |
| tree = self.mangle_git_tree(('repo_13@3', 'src')) |
| tree.update({ |
| '_cipd': |
| '\n'.join([ |
| '$ParanoidMode CheckPresence', |
| '$OverrideInstallMode copy', |
| '', |
| '@Subdir src/repo12', |
| 'foo 1.3', |
| '', |
| '', |
| ]), |
| 'src/repo12/_cipd': |
| 'foo 1.3', |
| }) |
| self.assertTree(tree) |
| |
| def testConvertCipdToGit(self): |
| self.gclient(['config', self.git_base + 'repo_13', '--name', 'src']) |
| |
| # repo_13@3 has src/repo12 as a cipd dependency. |
| self.gclient([ |
| 'sync', '-v', '-v', '-v', '--revision', |
| self.githash('repo_13', 3), '--delete_unversioned_trees' |
| ]) |
| |
| tree = self.mangle_git_tree(('repo_13@3', 'src')) |
| tree.update({ |
| '_cipd': |
| '\n'.join([ |
| '$ParanoidMode CheckPresence', |
| '$OverrideInstallMode copy', |
| '', |
| '@Subdir src/repo12', |
| 'foo 1.3', |
| '', |
| '', |
| ]), |
| 'src/repo12/_cipd': |
| 'foo 1.3', |
| }) |
| self.assertTree(tree) |
| |
| # repo_13@1 has src/repo12 as a git dependency. |
| self.gclient([ |
| 'sync', '-v', '-v', '-v', '--revision', |
| self.githash('repo_13', 1) |
| ]) |
| |
| tree = self.mangle_git_tree(('repo_13@1', 'src'), |
| ('repo_12@1', 'src/repo12')) |
| tree.update({ |
| '_cipd': |
| '\n'.join([ |
| '$ParanoidMode CheckPresence', |
| '$OverrideInstallMode copy', |
| '', |
| '@Subdir src/repo12', |
| 'foo 1.3', |
| '', |
| '', |
| ]), |
| 'src/repo12/_cipd': |
| 'foo 1.3', |
| }) |
| self.assertTree(tree) |
| |
| def testRevInfo(self): |
| self.gclient(['config', self.git_base + 'repo_18', '--name', 'src']) |
| self.gclient(['sync']) |
| results = self.gclient(['revinfo']) |
| out = ('src: %(base)srepo_18\n' |
| 'src/cipd_dep:package0: %(instance_url1)s\n' |
| 'src/cipd_dep:package0/${platform}: %(instance_url2)s\n' |
| 'src/cipd_dep:package1/another: %(instance_url3)s\n' % { |
| 'base': |
| self.git_base, |
| 'instance_url1': |
| CHROME_INFRA_URL + '/package0@package0-fake-tag:1.0', |
| 'instance_url2': |
| CHROME_INFRA_URL + |
| '/package0/${platform}@package0/${platform}-fake-tag:1.0', |
| 'instance_url3': |
| CHROME_INFRA_URL + |
| '/package1/another@package1/another-fake-tag:1.0', |
| }) |
| self.check((out, '', 0), results) |
| |
| def testRevInfoActual(self): |
| self.gclient(['config', self.git_base + 'repo_18', '--name', 'src']) |
| self.gclient(['sync']) |
| results = self.gclient(['revinfo', '--actual']) |
| out = ( |
| 'src: %(base)srepo_18@%(hash1)s\n' |
| 'src/cipd_dep:package0: %(instance_url1)s\n' |
| 'src/cipd_dep:package0/${platform}: %(instance_url2)s\n' |
| 'src/cipd_dep:package1/another: %(instance_url3)s\n' % { |
| 'base': |
| self.git_base, |
| 'hash1': |
| self.githash('repo_18', 1), |
| 'instance_url1': |
| # The below 'fake-*' and 'platform-expanded-*' ID's are from: |
| # ../testing_support/fake_cipd.py. 'fake-resolved' represents |
| # the package being found in the batch resolution mechanism. |
| CHROME_INFRA_URL + '/p/package0/+/package0-fake-resolved-id', |
| 'instance_url2': |
| CHROME_INFRA_URL + '/p/package0/platform-expanded-test-only' + |
| '/+/package0/${platform}-fake-instance-id', |
| 'instance_url3': |
| CHROME_INFRA_URL + '/p/package1/another' + |
| '/+/package1/another-fake-resolved-id', |
| }) |
| self.check((out, '', 0), results) |
| |
| |
| if __name__ == '__main__': |
| if '-v' in sys.argv: |
| logging.basicConfig(level=logging.DEBUG) |
| unittest.main() |