You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
6.5 KiB
Python
189 lines
6.5 KiB
Python
#!/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()
|