Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(863)

Unified Diff: tests/gclient_smoketest.py

Issue 2092012: Add basic gclient smoke tests. (Closed)
Patch Set: Rename the file to a better name Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/fake_repos.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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()
« no previous file with comments | « tests/fake_repos.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698