123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #!/usr/bin/env vpython3
- # Copyright (c) 2012 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 basic conformance 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__)))
- sys.path.insert(0, ROOT_DIR)
- import subprocess2
- from testing_support.fake_repos import join, write
- # TODO: Should fix these warnings.
- # pylint: disable=line-too-long
- class GClientSmoke(gclient_smoketest_base.GClientSmokeBase):
- """Doesn't require git-daemon."""
- @property
- def git_base(self):
- return 'git://random.server/git/'
- def testNotConfigured(self):
- res = ('', 'Error: client not configured; see \'gclient config\'\n', 1)
- self.check(res, self.gclient(['diff'], error_ok=True))
- self.check(res, self.gclient(['pack'], error_ok=True))
- self.check(res, self.gclient(['revert'], error_ok=True))
- self.check(res, self.gclient(['revinfo'], error_ok=True))
- self.check(res, self.gclient(['runhooks'], error_ok=True))
- self.check(res, self.gclient(['status'], error_ok=True))
- self.check(res, self.gclient(['sync'], error_ok=True))
- self.check(res, self.gclient(['update'], error_ok=True))
- def testConfig(self):
- # Get any bootstrapping out of the way.
- results = self.gclient(['version'])
- p = join(self.root_dir, '.gclient')
- def test(cmd, expected):
- if os.path.exists(p):
- os.remove(p)
- results = self.gclient(cmd)
- self.check(('', '', 0), results)
- with open(p, 'r') as f:
- actual = {}
- exec(f.read(), {}, actual)
- self.assertEqual(expected, actual)
- test(
- ['config', self.git_base + 'src/'], {
- 'solutions': [{
- 'name': 'src',
- 'url': self.git_base + 'src',
- 'deps_file': 'DEPS',
- 'managed': True,
- 'custom_deps': {},
- 'custom_vars': {},
- }],
- })
- test(
- [
- 'config', self.git_base + 'repo_1', '--name', 'src',
- '--cache-dir', 'none'
- ], {
- 'solutions': [{
- 'name': 'src',
- 'url': self.git_base + 'repo_1',
- 'deps_file': 'DEPS',
- 'managed': True,
- 'custom_deps': {},
- 'custom_vars': {},
- }],
- 'cache_dir':
- None
- })
- test(
- [
- 'config', 'https://example.com/foo', 'faa', '--cache-dir',
- 'something'
- ], {
- 'solutions': [{
- 'name': 'foo',
- 'url': 'https://example.com/foo',
- 'deps_file': 'DEPS',
- 'managed': True,
- 'custom_deps': {},
- 'custom_vars': {},
- }],
- 'cache_dir':
- 'something'
- })
- test(
- ['config', 'https://example.com/foo', '--deps', 'blah'], {
- 'solutions': [{
- 'name': 'foo',
- 'url': 'https://example.com/foo',
- 'deps_file': 'blah',
- 'managed': True,
- 'custom_deps': {},
- 'custom_vars': {},
- }]
- })
- test(
- [
- 'config', self.git_base + 'src/', '--custom-var',
- 'bool_var=True', '--custom-var', 'str_var="abc"'
- ], {
- 'solutions': [{
- 'name': 'src',
- 'url': self.git_base + 'src',
- 'deps_file': 'DEPS',
- 'managed': True,
- 'custom_deps': {},
- 'custom_vars': {
- 'bool_var': True,
- 'str_var': 'abc',
- },
- }]
- })
- test(['config', '--spec', 'bah = ["blah blah"]'],
- {'bah': ["blah blah"]})
- os.remove(p)
- results = self.gclient(['config', 'foo', 'faa', 'fuu'], error_ok=True)
- err = (
- 'Usage: gclient.py config [options] [url]\n\n'
- 'gclient.py: error: Inconsistent arguments. Use either --spec or one'
- ' or 2 args\n')
- self.check(('', err, 2), results)
- self.assertFalse(os.path.exists(join(self.root_dir, '.gclient')))
- def testSolutionNone(self):
- results = self.gclient(
- ['config', '--spec', 'solutions=[{"name": "./", "url": None}]'])
- self.check(('', '', 0), results)
- results = self.gclient(['sync'])
- self.check(('', '', 0), results)
- self.assertTree({})
- results = self.gclient(['revinfo'])
- self.check(('./: None\n', '', 0), results)
- self.check(('', '', 0), self.gclient(['diff']))
- self.assertTree({})
- self.check(('', '', 0), self.gclient(['pack']))
- self.check(('', '', 0), self.gclient(['revert']))
- self.assertTree({})
- self.check(('', '', 0), self.gclient(['runhooks']))
- self.assertTree({})
- self.check(('', '', 0), self.gclient(['status']))
- def testDifferentTopLevelDirectory(self):
- # Check that even if the .gclient file does not mention the directory
- # src itself, but it is included via dependencies, the .gclient file is
- # used.
- self.gclient(['config', self.git_base + 'src.DEPS'])
- deps = join(self.root_dir, 'src.DEPS')
- os.mkdir(deps)
- subprocess2.check_output(['git', 'init'], cwd=deps)
- write(join(deps, 'DEPS'), 'deps = { "src": "%ssrc" }' % (self.git_base))
- subprocess2.check_output(['git', 'add', 'DEPS'], cwd=deps)
- subprocess2.check_output(['git', 'commit', '-a', '-m', 'DEPS file'],
- cwd=deps)
- src = join(self.root_dir, 'src')
- os.mkdir(src)
- subprocess2.check_output(['git', 'init'], cwd=src)
- res = self.gclient(['status', '--jobs', '1', '-v'], src)
- self.checkBlock(res[0], [('running', deps), ('running', src)])
- if __name__ == '__main__':
- if '-v' in sys.argv:
- logging.basicConfig(level=logging.DEBUG)
- unittest.main()
|