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

Unified Diff: tests/checkout_test.py

Issue 1158043003: Remove most svn related testing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Fix typo in doc Created 5 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 | « testing_support/super_mox.py ('k') | tests/gcl_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/checkout_test.py
diff --git a/tests/checkout_test.py b/tests/checkout_test.py
index dfc88b06a8076e935466a1dbff808f726547e4a5..de0d7e62501101cf7eaa26fd69aae15cb31430cd 100755
--- a/tests/checkout_test.py
+++ b/tests/checkout_test.py
@@ -34,16 +34,6 @@ BAD_PATCH = ''.join(
class FakeRepos(fake_repos.FakeReposBase):
TEST_GIT_REPO = 'repo_1'
- def populateSvn(self):
- """Creates a few revisions of changes files."""
- subprocess2.check_call(
- ['svn', 'checkout', self.svn_base, self.svn_checkout, '-q',
- '--non-interactive', '--no-auth-cache',
- '--username', self.USERS[0][0], '--password', self.USERS[0][1]])
- assert os.path.isdir(os.path.join(self.svn_checkout, '.svn'))
- self._commit_svn(self._svn_tree_1())
- self._commit_svn(self._svn_tree_2())
-
def populateGit(self):
"""Creates a few revisions of changes files."""
self._commit_git(self.TEST_GIT_REPO, self._git_tree())
@@ -96,52 +86,6 @@ class FakeRepos(fake_repos.FakeReposBase):
'#endif\n')
return fs
- @staticmethod
- def _svn_tree_1():
- fs = {}
- fs['trunk/origin'] = 'svn@1'
- fs['trunk/codereview.settings'] = (
- '# Test data\n'
- 'bar: pouet\n')
- fs['trunk/chrome/file.cc'] = (
- 'a\n'
- 'bb\n'
- 'ccc\n'
- 'dd\n'
- 'e\n'
- 'ff\n'
- 'ggg\n'
- 'hh\n'
- 'i\n'
- 'jj\n'
- 'kkk\n'
- 'll\n'
- 'm\n'
- 'nn\n'
- 'ooo\n'
- 'pp\n'
- 'q\n')
- return fs
-
- @classmethod
- def _svn_tree_2(cls):
- fs = cls._svn_tree_1()
- fs['trunk/origin'] = 'svn@2\n'
- fs['trunk/extra'] = 'dummy\n'
- fs['trunk/bin_file'] = '\x00'
- fs['trunk/chromeos/views/DOMui_menu_widget.h'] = (
- '// Copyright (c) 2010\n'
- '// Use of this source code\n'
- '// found in the LICENSE file.\n'
- '\n'
- '#ifndef DOM\n'
- '#define DOM\n'
- '#pragma once\n'
- '\n'
- '#include <string>\n'
- '#endif\n')
- return fs
-
# pylint: disable=R0201
class BaseTest(fake_repos.FakeReposTestBase):
@@ -150,9 +94,6 @@ class BaseTest(fake_repos.FakeReposTestBase):
is_read_only = False
def setUp(self):
- # Need to enforce subversion_config first.
- checkout.SvnMixIn.svn_config_dir = os.path.join(
- ROOT_DIR, 'subversion_config')
super(BaseTest, self).setUp()
self._old_call = subprocess2.call
def redirect_call(args, **kwargs):
@@ -240,107 +181,6 @@ class BaseTest(fake_repos.FakeReposTestBase):
self.assertTree(tree, root)
-class SvnBaseTest(BaseTest):
- def setUp(self):
- super(SvnBaseTest, self).setUp()
- self.enabled = self.FAKE_REPOS.set_up_svn()
- self.assertTrue(self.enabled)
- self.svn_trunk = 'trunk'
- self.svn_url = self.svn_base + self.svn_trunk
- self.previous_log = self._log()
-
- def _log(self):
- # Don't use the local checkout in case of caching incorrency.
- out = subprocess2.check_output(
- ['svn', 'log', self.svn_url,
- '--non-interactive', '--no-auth-cache',
- '--username', self.usr, '--password', self.pwd,
- '--with-all-revprops', '--xml',
- '--limit', '1'])
- logentry = ElementTree.XML(out).find('logentry')
- if logentry == None:
- return {'revision': 0}
- data = {
- 'revision': int(logentry.attrib['revision']),
- }
- def set_item(name):
- item = logentry.find(name)
- if item != None:
- data[name] = item.text
- set_item('author')
- set_item('msg')
- revprops = logentry.find('revprops')
- if revprops != None:
- data['revprops'] = []
- for prop in revprops.getiterator('property'):
- data['revprops'].append((prop.attrib['name'], prop.text))
- return data
-
- def _check_base(self, co, root, expected):
- read_only = isinstance(co, checkout.ReadOnlyCheckout)
- self.assertEquals(not read_only, bool(expected))
- self.assertEquals(read_only, self.is_read_only)
- if not read_only:
- self.FAKE_REPOS.svn_dirty = True
-
- self.assertEquals(root, co.project_path)
- svn_rev = co.prepare(None)
- self.assertEquals(int, type(svn_rev))
- self.assertEquals(self.previous_log['revision'], svn_rev)
- self.assertEquals('pouet', co.get_settings('bar'))
- self.assertTree(self.get_trunk(False), root)
- patches = self.get_patches()
- co.apply_patch(patches)
- self.assertEquals(
- ['bin_file', 'chrome/file.cc', 'new_dir/subdir/new_file', 'extra'],
- patches.filenames)
-
- # Verify that the patch is applied even for read only checkout.
- self.assertTree(self.get_trunk(True), root)
- fake_author = self.FAKE_REPOS.USERS[1][0]
- revision = co.commit(u'msg', fake_author)
- # Nothing changed.
- self.assertTree(self.get_trunk(True), root)
-
- if read_only:
- self.assertEquals('FAKE', revision)
- self.assertEquals(self.previous_log['revision'], co.prepare(None))
- # Changes should be reverted now.
- self.assertTree(self.get_trunk(False), root)
- expected = self.previous_log
- else:
- self.assertEquals(self.previous_log['revision'] + 1, revision)
- self.assertEquals(self.previous_log['revision'] + 1, co.prepare(None))
- self.assertTree(self.get_trunk(True), root)
- expected = expected.copy()
- expected['msg'] = 'msg'
- expected['revision'] = self.previous_log['revision'] + 1
- expected.setdefault('author', fake_author)
-
- actual = self._log()
- self.assertEquals(expected, actual)
-
- def _test_prepare(self, co):
- self.assertEquals(1, co.prepare(1))
-
- def get_trunk(self, modified):
- tree = {}
- subroot = 'trunk/'
- for k, v in self.FAKE_REPOS.svn_revs[-1].iteritems():
- if k.startswith(subroot):
- f = k[len(subroot):]
- assert f not in tree
- tree[f] = v
-
- if modified:
- content_lines = tree['chrome/file.cc'].splitlines(True)
- tree['chrome/file.cc'] = ''.join(
- content_lines[0:5] + ['FOO!\n'] + content_lines[5:])
- del tree['extra']
- tree['new_dir/subdir/new_file'] = 'A new file\nshould exist.\n'
- return tree
-
-
class GitBaseTest(BaseTest):
def setUp(self):
super(GitBaseTest, self).setUp()
@@ -481,255 +321,6 @@ class GitCheckout(GitBaseTest):
self.assertEquals(expected, out)
-class SvnCheckout(SvnBaseTest):
- def _get_co(self, post_processors):
- self.assertNotEqual(False, post_processors)
- return checkout.SvnCheckout(
- self.root_dir, self.name, self.usr, self.pwd, self.svn_url,
- post_processors)
-
- def testAll(self):
- expected = {
- 'author': self.FAKE_REPOS.USERS[0][0],
- 'revprops': [('realauthor', self.FAKE_REPOS.USERS[1][0])]
- }
- root = os.path.join(self.root_dir, self.name)
- self._check_base(self._get_co(None), root, expected)
-
- def testException(self):
- self._check_exception(
- self._get_co(None),
- 'While running patch -p1 --forward --force --no-backup-if-mismatch;\n'
- ' patching file chrome/file.cc\n'
- ' Hunk #1 FAILED at 3.\n'
- ' 1 out of 1 hunk FAILED -- saving rejects to file '
- 'chrome/file.cc.rej\n')
-
- def testSvnProps(self):
- co = self._get_co(None)
- co.prepare(None)
- try:
- # svn:ignore can only be applied to directories.
- svn_props = [('svn:ignore', 'foo')]
- co.apply_patch(
- [patch.FilePatchDiff('chrome/file.cc', RAW.PATCH, svn_props)])
- self.fail()
- except checkout.PatchApplicationFailed, e:
- self.assertEquals(e.filename, 'chrome/file.cc')
- # The last line of the output depends on the svn version so we can't
- # check it precisely
- self.assertRegexpMatches(
- e.status,
- 'While running svn propset svn:ignore foo chrome/file.cc '
- '--non-interactive;\n'
- ' patching file chrome/file.cc\n'
- ' svn:.*')
- co.prepare(None)
- svn_props = [('svn:eol-style', 'LF'), ('foo', 'bar')]
- co.apply_patch(
- [patch.FilePatchDiff('chrome/file.cc', RAW.PATCH, svn_props)])
- filepath = os.path.join(self.root_dir, self.name, 'chrome/file.cc')
- # Manually verify the properties.
- props = subprocess2.check_output(
- ['svn', 'proplist', filepath],
- cwd=self.root_dir).splitlines()[1:]
- props = sorted(p.strip() for p in props)
- expected_props = dict(svn_props)
- self.assertEquals(sorted(expected_props.iterkeys()), props)
- for k, v in expected_props.iteritems():
- value = subprocess2.check_output(
- ['svn', 'propget', '--strict', k, filepath],
- cwd=self.root_dir).strip()
- self.assertEquals(v, value)
-
- def testWithRevPropsSupport(self):
- # Add the hook that will commit in a way that removes the race condition.
- hook = os.path.join(self.FAKE_REPOS.svn_repo, 'hooks', 'pre-commit')
- shutil.copyfile(os.path.join(ROOT_DIR, 'sample_pre_commit_hook'), hook)
- os.chmod(hook, 0755)
- expected = {
- 'revprops': [('commit-bot', 'user1@example.com')],
- }
- root = os.path.join(self.root_dir, self.name)
- self._check_base(self._get_co(None), root, expected)
-
- def testWithRevPropsSupportNotCommitBot(self):
- # Add the hook that will commit in a way that removes the race condition.
- hook = os.path.join(self.FAKE_REPOS.svn_repo, 'hooks', 'pre-commit')
- shutil.copyfile(os.path.join(ROOT_DIR, 'sample_pre_commit_hook'), hook)
- os.chmod(hook, 0755)
- co = checkout.SvnCheckout(
- self.root_dir, self.name,
- self.FAKE_REPOS.USERS[1][0], self.FAKE_REPOS.USERS[1][1],
- self.svn_url)
- root = os.path.join(self.root_dir, self.name)
- expected = {
- 'author': self.FAKE_REPOS.USERS[1][0],
- }
- self._check_base(co, root, expected)
-
- def testAutoProps(self):
- co = self._get_co(None)
- co.svn_config = checkout.SvnConfig(
- os.path.join(ROOT_DIR, 'subversion_config'))
- co.prepare(None)
- patches = self.get_patches()
- co.apply_patch(patches)
- self.assertEquals(
- ['bin_file', 'chrome/file.cc', 'new_dir/subdir/new_file', 'extra'],
- patches.filenames)
- # *.txt = svn:eol-style=LF in subversion_config/config.
- out = subprocess2.check_output(
- ['svn', 'pget', 'svn:eol-style', 'chrome/file.cc'],
- cwd=co.project_path)
- self.assertEquals('LF\n', out)
-
- def testProcess(self):
- self._test_process(self._get_co)
-
- def testPrepare(self):
- self._test_prepare(self._get_co(None))
-
- def testMove(self):
- co = self._get_co(None)
- self._check_move(co)
- out = subprocess2.check_output(
- ['svn', 'status'], cwd=co.project_path)
- out = sorted(out.splitlines())
- expected = sorted(
- [
- 'A + chromeos/views/webui_menu_widget.h',
- 'D chromeos/views/DOMui_menu_widget.h',
- ])
- self.assertEquals(expected, out)
- # Make sure ancestry is what is expected;
- env = os.environ.copy()
- env['LANGUAGE'] = 'en_US.UTF-8'
- out = subprocess2.check_output(
- ['svn', 'info', 'chromeos/views/webui_menu_widget.h'],
- cwd=co.project_path,
- env=env)
- values = dict(l.split(': ', 1) for l in out.splitlines() if l)
- expected = {
- # checksum seems to vary with svn version so we can't check it
- #'Checksum': '65837bb3da662c8fa88a4a50940ea7c6',
- 'Copied From Rev': '2',
- 'Copied From URL':
- '%strunk/chromeos/views/DOMui_menu_widget.h' % self.svn_base,
- 'Name': 'webui_menu_widget.h',
- 'Node Kind': 'file',
- 'Path': 'chromeos/views/webui_menu_widget.h',
- 'Repository Root': '%s' % self.svn_base.rstrip('/'),
- 'Revision': '2',
- 'Schedule': 'add',
- 'URL': '%strunk/chromeos/views/webui_menu_widget.h' % self.svn_base,
- }
- for key in expected:
- self.assertIn(key, values)
- self.assertEquals(expected[key], values[key])
-
-
-class RawCheckout(SvnBaseTest):
- def setUp(self):
- super(RawCheckout, self).setUp()
- # Use a svn checkout as the base.
- self.base_co = checkout.SvnCheckout(
- self.root_dir, self.name, None, None, self.svn_url)
- self.base_co.prepare(None)
-
- def _get_co(self, post_processors):
- self.assertNotEqual(False, post_processors)
- return checkout.RawCheckout(self.root_dir, self.name, post_processors)
-
- def testAll(self):
- # Can't use self._check_base() since it's too different.
- root = os.path.join(self.root_dir, self.name)
- co = self._get_co(None)
-
- # A copy of BaseTest._check_base()
- self.assertEquals(root, co.project_path)
- self.assertEquals(None, co.prepare(None))
- self.assertEquals('pouet', co.get_settings('bar'))
- self.assertTree(self.get_trunk(False), root)
- patches = self.get_patches()
- co.apply_patch(patches)
- self.assertEquals(
- ['bin_file', 'chrome/file.cc', 'new_dir/subdir/new_file', 'extra'],
- patches.filenames)
-
- # Verify that the patch is applied even for read only checkout.
- self.assertTree(self.get_trunk(True), root)
- try:
- co.commit(u'msg', self.FAKE_REPOS.USERS[1][0])
- self.fail()
- except NotImplementedError:
- pass
- self.assertTree(self.get_trunk(True), root)
- # Verify that prepare() is a no-op.
- self.assertEquals(None, co.prepare(None))
- self.assertTree(self.get_trunk(True), root)
-
- def testException(self):
- self._check_exception(
- self._get_co(None),
- 'While running patch -u --binary -p1;\n'
- ' patching file chrome/file.cc\n'
- ' Hunk #1 FAILED at 3.\n'
- ' 1 out of 1 hunk FAILED -- saving rejects to file '
- 'chrome/file.cc.rej\n')
-
- def testProcess(self):
- self._test_process(self._get_co)
-
- def testPrepare(self):
- # RawCheckout doesn't support prepare() but emulate it.
- co = self._get_co(None)
- revs = [1]
- def prepare(asked):
- self.assertEquals(1, asked)
- return revs.pop(0)
- co.prepare = prepare
- self._test_prepare(co)
- self.assertEquals([], revs)
-
- def testMove(self):
- self._check_move(self._get_co(None))
-
-
-class ReadOnlyCheckout(SvnBaseTest):
- # Use SvnCheckout as the backed since it support read-only checkouts too.
- is_read_only = True
-
- def _get_co(self, post_processors):
- self.assertNotEqual(False, post_processors)
- return checkout.ReadOnlyCheckout(
- checkout.SvnCheckout(
- self.root_dir, self.name, None, None, self.svn_url, None),
- post_processors)
-
- def testAll(self):
- root = os.path.join(self.root_dir, self.name)
- self._check_base(self._get_co(None), root, None)
-
- def testException(self):
- self._check_exception(
- self._get_co(None),
- 'While running patch -p1 --forward --force --no-backup-if-mismatch;\n'
- ' patching file chrome/file.cc\n'
- ' Hunk #1 FAILED at 3.\n'
- ' 1 out of 1 hunk FAILED -- saving rejects to file '
- 'chrome/file.cc.rej\n')
-
- def testProcess(self):
- self._test_process(self._get_co)
-
- def testPrepare(self):
- self._test_prepare(self._get_co(None))
-
- def testMove(self):
- self._check_move(self._get_co(None))
-
-
if __name__ == '__main__':
if '-v' in sys.argv:
DEBUGGING = True
« no previous file with comments | « testing_support/super_mox.py ('k') | tests/gcl_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698