| 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
|
|
|