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

Unified Diff: git_cl/PRESUBMIT.py

Issue 6460015: Move rietveld local server setup in a separate file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Address review comments Created 9 years, 10 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 | « no previous file | git_cl/test/__init__.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: git_cl/PRESUBMIT.py
diff --git a/git_cl/PRESUBMIT.py b/git_cl/PRESUBMIT.py
index 6c7506929c3f45926d66fdefbc95f5a473ba6ddd..aaeafaf38b9e72359dabf6583ec3ac110d179f3b 100644
--- a/git_cl/PRESUBMIT.py
+++ b/git_cl/PRESUBMIT.py
@@ -19,106 +19,52 @@ def CheckChangeOnCommit(input_api, output_api):
def RunTests(input_api, output_api):
"""Run all the shells scripts in the directory test.
-
- Also verify the GAE python SDK is available, fetches Rietveld if necessary and
- start a test instance to test against.
"""
- # They are not exposed from InputApi.
- from os import listdir, pathsep
- import socket
- import time
-
- # Shortcuts
- join = input_api.os_path.join
- error = output_api.PresubmitError
-
- # Paths
- sdk_path = input_api.os_path.abspath(join('..', '..', 'google_appengine'))
- dev_app = join(sdk_path, 'dev_appserver.py')
- rietveld = join('test', 'rietveld')
- django_path = join(rietveld, 'django')
-
- # Generate a friendly environment.
- env = input_api.environ.copy()
- env['LANGUAGE'] = 'en'
- if env.get('PYTHONPATH'):
- env['PYTHONPATH'] = (env['PYTHONPATH'].rstrip(pathsep) + pathsep +
- django_path)
- else:
- env['PYTHONPATH'] = django_path
-
- def call(*args, **kwargs):
- kwargs['env'] = env
- x = input_api.subprocess.Popen(*args, **kwargs)
- x.communicate()
- return x.returncode == 0
-
- def test_port(port):
- s = socket.socket()
- try:
- return s.connect_ex(('127.0.0.1', port)) == 0
- finally:
- s.close()
+ # Not exposed from InputApi.
+ from os import listdir
- # First, verify the Google AppEngine SDK is available.
- if not input_api.os_path.isfile(dev_app):
- return [error('Install google_appengine sdk in %s' % sdk_path)]
-
- # Second, checkout rietveld and django if not available.
- if not input_api.os_path.isdir(rietveld):
- print('Checking out rietveld...')
- if not call(['svn', 'co', '-q',
- 'http://rietveld.googlecode.com/svn/trunk@563',
- rietveld]):
- return [error('Failed to checkout rietveld')]
- if not input_api.os_path.isdir(django_path):
- print('Checking out django...')
- if not call(
- ['svn', 'co', '-q',
- 'http://code.djangoproject.com/'
- 'svn/django/branches/releases/1.0.X/django@13637',
- django_path]):
- return [error('Failed to checkout django')]
-
-
- # Test to find an available port starting at 8080.
- port = 8080
- while test_port(port) and port < 65000:
- port += 1
- if port == 65000:
- return [error('Having issues finding an available port')]
+ # First loads a local Rietveld instance.
+ import sys
+ old_sys_path = sys.path
+ try:
+ sys.path = [input_api.PresubmitLocalPath()] + sys.path
+ from test import local_rietveld
+ server = local_rietveld.LocalRietveld()
+ finally:
+ sys.path = old_sys_path
+ # Set to True for testing.
verbose = False
if verbose:
stdout = None
stderr = None
else:
stdout = input_api.subprocess.PIPE
- stderr = input_api.subprocess.PIPE
+ stderr = input_api.subprocess.STDOUT
output = []
- test_server = input_api.subprocess.Popen(
- [dev_app, rietveld, '--port=%d' % port,
- '--datastore_path=' + join(rietveld, 'tmp.db'), '-c'],
- stdout=stdout, stderr=stderr, env=env)
try:
- # Loop until port 127.0.0.1:port opens or the process dies.
- while not test_port(port):
- test_server.poll()
- if test_server.returncode is not None:
- output.append(error('Test rietveld instance failed early'))
- break
- time.sleep(0.001)
-
- test_path = input_api.os_path.abspath('test')
+ # Start a local rietveld instance to test against.
+ server.start_server()
+ test_path = input_api.os_path.abspath(
+ input_api.os_path.join(input_api.PresubmitLocalPath(), 'test'))
for test in listdir(test_path):
- # push-from-logs and rename fails for now. Remove from this list once they
- # work.
+ # push-from-logs and rename fails for now. Remove from this list once
+ # they work.
if (test in ('push-from-logs.sh', 'rename.sh', 'test-lib.sh') or
not test.endswith('.sh')):
continue
+
print('Running %s' % test)
- if not call([join(test_path, test)], cwd=test_path, stdout=stdout):
- output.append(error('%s failed' % test))
+ proc = input_api.subprocess.Popen(
+ [input_api.os_path.join(test_path, test)],
+ cwd=test_path,
+ stdout=stdout,
+ stderr=stderr)
+ proc.communicate()
+ if proc.returncode != 0:
+ output.append(output_api.PresubmitError('%s failed' % test))
+ except setup_mock.Failure, e:
+ output.append(output_api.PresubmitError('\n'.join(str(i) for i in e.args)))
finally:
- test_server.kill()
+ server.stop_server()
return output
« no previous file with comments | « no previous file | git_cl/test/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698