123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #!/usr/bin/env vpython3
- # Copyright (c) 2018 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.
- import os
- import shutil
- import subprocess
- import sys
- import unittest
- import tempfile
- # TODO: Should fix these warnings.
- # pylint: disable=line-too-long
- ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- # CIPD client version to use for self-update from an "old" checkout to the tip.
- #
- # This version is from Dec 2023. Digests were generated using:
- # cipd selfupdate-roll -version-file tmp \
- # -version git_revision:161d3029a2818c224db3154cf3e78fde51a1047f
- # cat tmp.digests
- OLD_VERSION = 'git_revision:161d3029a2818c224db3154cf3e78fde51a1047f'
- OLD_DIGESTS = """
- aix-ppc64 sha256 2e947e55e7fe25d3b5ab5524f8603a3b15d13c209f18873704cfc2c4a95ee685
- dragonfly-amd64 sha256 f0229d21ae5c19ddfd4689d2c93937d085a090b8ccadd4a177d897d7d884f5b9
- freebsd-386 sha256 8c3681db91539fd8cad78684a798390351ef7c71b1394c9bc38c7deb337d7db3
- freebsd-amd64 sha256 e085d373967a10a92c02f1df3c67cc949d20145bedd041bac268de42d2c4e7aa
- freebsd-arm64 sha256 3b8d306ce501fc77896ca95b1a04fe5a1e1825843554517a13ad7fee70c72fc3
- freebsd-riscv64 sha256 1656b824ce881ee4078998917ce6bbfadc98a881aa21f35bb8827e14f2746ce6
- illumos-amd64 sha256 6d1e6c7f0f2e98fcbaaad849431fe7a886470b14a04d872daa804d9473a62682
- linux-386 sha256 0658444410909d596a161412033c54459382e287b812af67afe03bf40124dc2b
- linux-amd64 sha256 341314febc2b0e447914a20a3b845eb5052957451b30ed27b6221e8ddf9e0ed0
- linux-arm64 sha256 3d2fcff18c46571a4bbf71623ddcb7229259bf289379b54ef221cbf7ceee3c98
- linux-armv6l sha256 0f690d2d2a653ea5e4ed11769307b705f2243f1f8cf6fc4ac8fe550084a730af
- linux-loong64 sha256 0cdfe6ae538991c66b923828d2647accf52a2b2d56093520ab3efc45ecb61552
- linux-mips sha256 32fb27a6eea67b822bf7992b8ceb497490b1e2b101b6e5efb7d21f2544871b8f
- linux-mips64 sha256 8cfcd51312ebe246ab45595e8bc83f0de28f2455e3a404a863141d439133ada7
- linux-mips64le sha256 66f129348448373c339d16920ce3bab53b8d740db4a580aed16a820bcc638721
- linux-mipsle sha256 342ac75930281310f9f32d636c5c67210346ce213c320edc5af12242ed42dc3b
- linux-ppc64 sha256 709c3532542a7fd9768f9157503ac56c828ad423984e3467b4b635a945feea8d
- linux-ppc64le sha256 06410f5b1451f16137bde261b5c5dec78d017c36de7170db9000c0016c8eeebe
- linux-riscv64 sha256 213764d2c36b012eb6c4d95dde46ebff5fcbddea69fdabef3c055e35bc857beb
- linux-s390x sha256 0040b832d04790457a5e7b39e495ee8baf2d3374310f6ea64d982b354ece9ac7
- mac-amd64 sha256 5e6465c8396f9f8fc434782ab20e144e920a5a2552ed19c6f42704e630045059
- mac-arm64 sha256 0ccf6dce0b382b9cd37ac72ee6a31943d97c544550b9cf78cdb22ed461c2696c
- netbsd-386 sha256 add933cea38805e164c2d71b808f65c672168c51a5bb8002fabc75bcd80a72e4
- netbsd-amd64 sha256 6a9fb662fbe98d1927c71d3b4045b82be106771ed43d4ddef0c37e4859626a00
- netbsd-arm64 sha256 3b10b2fabbf5ce1fd74c8d517b72eadcf2d784126931125140ecfa6ebcb05c6c
- netbsd-armv6l sha256 40fb3148c3682d6b8151adcee3f93c828c781b0aaf2009d89484b9e913d2723c
- openbsd-386 sha256 bb5b47f27cd5e1285a5dcae9b69c756d023611d18706964dfd7b765cdfedf225
- openbsd-amd64 sha256 845447b68cab9d5fa96479440f0a692b66c4e1bfc73b92626bb355d25ed675aa
- openbsd-arm64 sha256 713c6b2768ca8a12098ac57174e54245a0e5e8a58853426c4ffd34b8cdb06e5a
- solaris-amd64 sha256 1745422a7dbaa1f53a36e325c02e908cf5bf68cdfb62343b6eeb1424cb597ceb
- windows-386 sha256 cd2148e390a5eddc078d6dd2cdfcd9d4624515d24482a1fa255fdcbac9d5c4f8
- windows-amd64 sha256 e88f9268c536bb88a7b45a73308a70cbc93438b771f2ad2b54e385e132dbc146
- windows-arm64 sha256 45d2ae5ae31b9ac25277f25fde7eb26edf22458b89a55cffa5d9dccf6f117c44
- """
- class CipdBootstrapTest(unittest.TestCase):
- """Tests that CIPD client can bootstrap from scratch and self-update from some
- old version to a most recent one.
- WARNING: This integration test touches real network and real CIPD backend and
- downloads several megabytes of stuff.
- """
- def setUp(self):
- self.tempdir = tempfile.mkdtemp('depot_tools_cipd')
- def tearDown(self):
- shutil.rmtree(self.tempdir)
- def stage_files(self, cipd_version=None, digests=None):
- """Copies files needed for cipd bootstrap into the temp dir.
- Args:
- cipd_version: if not None, a value to put into cipd_client_version file.
- """
- names = (
- '.cipd_impl.ps1',
- 'cipd',
- 'cipd.bat',
- 'cipd_client_version',
- 'cipd_client_version.digests',
- )
- for f in names:
- shutil.copy2(os.path.join(ROOT_DIR, f),
- os.path.join(self.tempdir, f))
- if cipd_version is not None:
- with open(os.path.join(self.tempdir, 'cipd_client_version'),
- 'wt') as f:
- f.write(cipd_version + '\n')
- if digests is not None:
- p = os.path.join(self.tempdir, 'cipd_client_version.digests')
- with open(p, 'wt') as f:
- f.write(digests + '\n')
- def call_cipd_help(self):
- """Calls 'cipd help' bootstrapping the client in tempdir.
- Returns (exit code, merged stdout and stderr).
- """
- exe = 'cipd.bat' if sys.platform == 'win32' else 'cipd'
- p = subprocess.Popen([os.path.join(self.tempdir, exe), 'help'],
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- out, _ = p.communicate()
- return p.returncode, out
- def test_new_bootstrap(self):
- """Bootstrapping the client from scratch."""
- self.stage_files()
- ret, out = self.call_cipd_help()
- if ret:
- self.fail('Bootstrap from scratch failed:\n%s' % out)
- def test_self_update(self):
- """Updating the existing client in-place."""
- self.stage_files(cipd_version=OLD_VERSION, digests=OLD_DIGESTS)
- ret, out = self.call_cipd_help()
- if ret:
- self.fail('Update to %s fails:\n%s' % (OLD_VERSION, out))
- self.stage_files()
- ret, out = self.call_cipd_help()
- if ret:
- self.fail('Update from %s to the tip fails:\n%s' %
- (OLD_VERSION, out))
- if __name__ == '__main__':
- unittest.main()
|