| Index: tests/gclient_smoketest.py
|
| diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..9d04dc6d8fae51d966ee0c567f599e8c1a4f27c0
|
| --- /dev/null
|
| +++ b/tests/gclient_smoketest.py
|
| @@ -0,0 +1,135 @@
|
| +#!/usr/bin/python
|
| +# Copyright (c) 2010 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.
|
| +
|
| +This test assumes GClientSmokeBase.URL_BASE is valid.
|
| +"""
|
| +
|
| +import os
|
| +import shutil
|
| +import subprocess
|
| +import sys
|
| +import unittest
|
| +
|
| +from fake_repos import rmtree, FakeRepos
|
| +
|
| +SHOULD_LEAK = False
|
| +UNITTEST_DIR = os.path.abspath(os.path.dirname(__file__))
|
| +GCLIENT_PATH = os.path.join(os.path.dirname(UNITTEST_DIR), 'gclient')
|
| +# all tests outputs goes there.
|
| +TRIAL_DIR = os.path.join(UNITTEST_DIR, '_trial')
|
| +# In case you want to use another machine to create the fake repos, e.g.
|
| +# not on Windows.
|
| +HOST = '127.0.0.1'
|
| +
|
| +
|
| +class GClientSmokeBase(unittest.TestCase):
|
| + # This subversion repository contains a test repository.
|
| + ROOT_DIR = os.path.join(TRIAL_DIR, 'smoke')
|
| +
|
| + def setUp(self):
|
| + # Vaguely inspired by twisted.
|
| + # Make sure it doesn't try to auto update when testing!
|
| + self.env = os.environ.copy()
|
| + self.env['DEPOT_TOOLS_UPDATE'] = '0'
|
| + # Remove left overs
|
| + self.root_dir = os.path.join(self.ROOT_DIR, self.id())
|
| + rmtree(self.root_dir)
|
| + if not os.path.exists(self.ROOT_DIR):
|
| + os.mkdir(self.ROOT_DIR)
|
| + os.mkdir(self.root_dir)
|
| + self.svn_base = 'svn://%s/svn/' % HOST
|
| + self.git_base = 'git://%s/git/' % HOST
|
| +
|
| + def tearDown(self):
|
| + if not SHOULD_LEAK:
|
| + rmtree(self.root_dir)
|
| +
|
| + def gclient(self, cmd, cwd=None):
|
| + if not cwd:
|
| + cwd = self.root_dir
|
| + process = subprocess.Popen([GCLIENT_PATH] + cmd, cwd=cwd, env=self.env,
|
| + stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
| + shell=sys.platform.startswith('win'))
|
| + (stdout, stderr) = process.communicate()
|
| + return (stdout, stderr, process.returncode)
|
| +
|
| + def check(self, expected, results):
|
| + def checkString(expected, result):
|
| + if expected != result:
|
| + while expected and result and expected[0] == result[0]:
|
| + expected = expected[1:]
|
| + result = result[1:]
|
| + self.assertEquals(expected, result)
|
| + checkString(expected[0], results[0])
|
| + checkString(expected[1], results[1])
|
| + self.assertEquals(expected[2], results[2])
|
| +
|
| +
|
| +class GClientSmoke(GClientSmokeBase):
|
| + def testCommands(self):
|
| + """This test is to make sure no new command was added."""
|
| + result = self.gclient(['help'])
|
| + self.assertEquals(3189, len(result[0]))
|
| + self.assertEquals(0, len(result[1]))
|
| + self.assertEquals(0, result[2])
|
| +
|
| + def testNotConfigured(self):
|
| + res = ("", "Error: client not configured; see 'gclient config'\n", 1)
|
| + self.check(res, self.gclient(['cleanup']))
|
| + self.check(res, self.gclient(['diff']))
|
| + self.check(res, self.gclient(['export', 'foo']))
|
| + self.check(res, self.gclient(['pack']))
|
| + self.check(res, self.gclient(['revert']))
|
| + self.check(res, self.gclient(['revinfo']))
|
| + self.check(res, self.gclient(['runhooks']))
|
| + self.check(res, self.gclient(['status']))
|
| + self.check(res, self.gclient(['sync']))
|
| + self.check(res, self.gclient(['update']))
|
| +
|
| +
|
| +class GClientSmokeSync(GClientSmokeBase):
|
| + """sync is the most important command. Hence test it more."""
|
| + def testSyncSvn(self):
|
| + """Test pure gclient svn checkout, example of Chromium checkout"""
|
| + self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| + results = self.gclient(['sync'])
|
| + self.assertEquals(0, results[2])
|
| + results = self.gclient(['sync', '--revision', 'a@32'])
|
| + self.assertEquals(0, results[2])
|
| +
|
| + def testSyncGit(self):
|
| + """Test pure gclient git checkout, example of Chromium OS checkout"""
|
| + self.gclient(['config', self.git_base + 'repo_1'])
|
| + results = self.gclient(['sync'])
|
| + print results[0]
|
| + print results[1]
|
| + self.assertEquals(0, results[2])
|
| +
|
| +
|
| +class GClientSmokeRevert(GClientSmokeBase):
|
| + """revert is the second most important command. Hence test it more."""
|
| + def setUp(self):
|
| + GClientSmokeBase.setUp(self)
|
| + self.gclient(['config', self.URL_BASE])
|
| +
|
| +
|
| +class GClientSmokeRevInfo(GClientSmokeBase):
|
| + """revert is the second most important command. Hence test it more."""
|
| + def setUp(self):
|
| + GClientSmokeBase.setUp(self)
|
| + self.gclient(['config', self.URL_BASE])
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + fake = FakeRepos(TRIAL_DIR, SHOULD_LEAK, True)
|
| + try:
|
| + fake.setUp()
|
| + unittest.main()
|
| + finally:
|
| + fake.tearDown()
|
|
|