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

Unified Diff: tests/fake_repos.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 | « .gitignore ('k') | tests/gclient_smoketest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/fake_repos.py
diff --git a/tests/fake_repos.py b/tests/fake_repos.py
new file mode 100755
index 0000000000000000000000000000000000000000..307a3b790121a1bb5c6ef828c1d730d24e92b151
--- /dev/null
+++ b/tests/fake_repos.py
@@ -0,0 +1,203 @@
+#!/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.
+
+"""Generate fake repositories for testing."""
+
+import os
+import shutil
+import subprocess
+import sys
+
+
+def addKill():
+ """Add kill() method to subprocess.Popen for python <2.6"""
+ if getattr(subprocess.Popen, 'kill', None):
+ return
+ if sys.platform.startswith('win'):
+ def kill_win(process):
+ import win32process
+ return win32process.TerminateProcess(process._handle, -1)
+ subprocess.kill = kill_win
+ else:
+ def kill_nix(process):
+ import signal
+ return os.kill(process.pid, signal.SIGKILL)
+ subprocess.kill = kill_nix
+
+
+def rmtree(path):
+ """Delete a directory."""
+ if os.path.exists(path):
+ shutil.rmtree(path)
+
+
+def write(path, content):
+ f = open(path, 'wb')
+ f.write(content)
+ f.close()
+
+
+class FakeRepos(object):
+ def __init__(self, trial_dir, leak, local_only):
+ self.trial_dir = trial_dir
+ self.repos_dir = os.path.join(self.trial_dir, 'repos')
+ self.leak = leak
+ self.local_only = local_only
+ self.svnserve = []
+ self.gitdaemon = []
+ addKill()
+ rmtree(self.trial_dir)
+ os.mkdir(self.trial_dir)
+ os.mkdir(self.repos_dir)
+
+ def setUp(self):
+ self.setUpSVN()
+ self.setUpGIT()
+
+ def tearDown(self):
+ for i in self.svnserve:
+ i.kill()
+ for i in self.gitdaemon:
+ i.kill()
+ if not self.leak:
+ rmtree(self.trial_dir)
+
+ def setUpSVN(self):
+ """Creates subversion repositories and start the servers."""
+ assert not self.svnserve
+ join = os.path.join
+ root = join(self.repos_dir, 'svn')
+ rmtree(root)
+ subprocess.check_call(['svnadmin', 'create', root])
+ write(join(root, 'conf', 'svnserve.conf'),
+ '[general]\n'
+ 'anon-access = read\n'
+ 'auth-access = write\n'
+ 'password-db = passwd\n')
+ write(join(root, 'conf', 'passwd'),
+ '[users]\n'
+ 'user1 = foo\n'
+ 'user2 = bar\n')
+
+ # Repos
+ repo = join(self.repos_dir, 'svn_import')
+ rmtree(repo)
+ os.mkdir(repo)
+ os.mkdir(join(repo, 'trunk'))
+ os.mkdir(join(repo, 'trunk', 'src'))
+ write(join(repo, 'trunk', 'src', 'DEPS'), """
+# Smoke test DEPS file.
+# Many DEPS functionalities need to be tested:
+# Var
+# File
+# From
+# deps_os
+# hooks
+# use_relative_paths
+#
+# Types of dependencies:
+# Relative urls
+# Full urls
+# svn
+# git
+
+deps = {
+ 'src/other': 'svn://%(host)s/svn/trunk/other',
+ 'src/third_party': '/trunk/third_party',
+}
+
+deps_os = {
+ 'mac': 'repo_4'
+}
+""" % {
+ 'host': 'localhost',
+})
+ write(join(repo, 'trunk', 'src', 'origin'), "svn/trunk/src")
+ os.mkdir(join(repo, 'trunk', 'other'))
+ write(join(repo, 'trunk', 'other', 'origin'), "svn/trunk/other")
+ os.mkdir(join(repo, 'trunk', 'third_party'))
+ write(join(repo, 'trunk', 'third_party', 'origin'), "svn/trunk/third_party")
+
+ # Start the daemon.
+ cmd = ['svnserve', '-d', '--foreground', '-r', self.repos_dir]
+ if self.local_only:
+ cmd.append('--listen-host=127.0.0.1')
+ self.svnserve.append(subprocess.Popen(cmd, cwd=root))
+
+ # Import the repo.
+ subprocess.check_call(['svn', 'import', repo,
+ 'svn://127.0.0.1/svn', '-m', 'foo', '-q',
+ '--no-auto-props', '--non-interactive', '--no-auth-cache',
+ '--username', 'user1', '--password', 'foo'])
+
+ def setUpGIT(self):
+ """Creates git repositories and start the servers."""
+ assert not self.gitdaemon
+ join = os.path.join
+ root = join(self.repos_dir, 'git')
+ rmtree(root)
+ os.mkdir(root)
+ # Repo 1
+ repo = join(root, 'repo_1')
+ subprocess.check_call(['git', 'init', '-q', repo])
+ write(join(repo, 'DEPS'), """
+# Smoke test DEPS file.
+# Many DEPS functionalities need to be tested:
+# Var
+# File
+# From
+# deps_os
+# hooks
+# use_relative_paths
+#
+# Types of dependencies:
+# Relative urls
+# Full urls
+# svn
+# git
+
+deps = {
+ 'repo2': 'git://%(host)s/git/repo_2',
+ 'repo2/repo3': '/repo_3',
+}
+
+deps_os = {
+ 'mac': 'repo_4'
+}
+""" % {
+ 'host': 'localhost',
+})
+ write(join(repo, 'origin'), "git/repo_1")
+ subprocess.check_call(['git', 'add', '-A', '-f'], cwd=repo)
+ subprocess.check_call(['git', 'commit', '-q', '-m', 'foo'], cwd=repo)
+
+ # Repo 2
+ repo = join(root, 'repo_2')
+ subprocess.check_call(['git', 'init', '-q', repo])
+ write(join(repo, 'origin'), "git/repo_2")
+ subprocess.check_call(['git', 'add', '-A', '-f'], cwd=repo)
+ subprocess.check_call(['git', 'commit', '-q', '-m', 'foo'], cwd=repo)
+
+ # Repo 3
+ repo = join(root, 'repo_3')
+ subprocess.check_call(['git', 'init', '-q', repo])
+ write(join(repo, 'origin'), "git/repo_3")
+ subprocess.check_call(['git', 'add', '-A', '-f'], cwd=repo)
+ subprocess.check_call(['git', 'commit', '-q', '-m', 'foo'], cwd=repo)
+
+ # Start the daemon.
+ cmd = ['git', 'daemon', '--export-all', '--base-path=' + self.repos_dir]
+ if self.local_only:
+ cmd.append('--listen=127.0.0.1')
+ self.gitdaemon.append(subprocess.Popen(cmd, cwd=self.repos_dir,
+ stderr=subprocess.PIPE))
+
+if __name__ == '__main__':
+ fake = FakeRepos(os.path.dirname(os.path.abspath(__file__)), False)
+ try:
+ fake.setUp()
+ sys.stdin.readline()
+ finally:
+ fake.tearDown()
« no previous file with comments | « .gitignore ('k') | tests/gclient_smoketest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698