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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | git_cl/test/__init__.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Top-level presubmit script for depot tools. 5 """Top-level presubmit script for depot tools.
6 6
7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
8 details on the presubmit API built into gcl. 8 details on the presubmit API built into gcl.
9 """ 9 """
10 10
11 11
12 def CheckChangeOnUpload(input_api, output_api): 12 def CheckChangeOnUpload(input_api, output_api):
13 return RunTests(input_api, output_api) 13 return RunTests(input_api, output_api)
14 14
15 15
16 def CheckChangeOnCommit(input_api, output_api): 16 def CheckChangeOnCommit(input_api, output_api):
17 return RunTests(input_api, output_api) 17 return RunTests(input_api, output_api)
18 18
19 19
20 def RunTests(input_api, output_api): 20 def RunTests(input_api, output_api):
21 """Run all the shells scripts in the directory test. 21 """Run all the shells scripts in the directory test.
22 """
23 # Not exposed from InputApi.
24 from os import listdir
22 25
23 Also verify the GAE python SDK is available, fetches Rietveld if necessary and 26 # First loads a local Rietveld instance.
24 start a test instance to test against. 27 import sys
25 """ 28 old_sys_path = sys.path
26 # They are not exposed from InputApi. 29 try:
27 from os import listdir, pathsep 30 sys.path = [input_api.PresubmitLocalPath()] + sys.path
28 import socket 31 from test import local_rietveld
29 import time 32 server = local_rietveld.LocalRietveld()
33 finally:
34 sys.path = old_sys_path
30 35
31 # Shortcuts 36 # Set to True for testing.
32 join = input_api.os_path.join
33 error = output_api.PresubmitError
34
35 # Paths
36 sdk_path = input_api.os_path.abspath(join('..', '..', 'google_appengine'))
37 dev_app = join(sdk_path, 'dev_appserver.py')
38 rietveld = join('test', 'rietveld')
39 django_path = join(rietveld, 'django')
40
41 # Generate a friendly environment.
42 env = input_api.environ.copy()
43 env['LANGUAGE'] = 'en'
44 if env.get('PYTHONPATH'):
45 env['PYTHONPATH'] = (env['PYTHONPATH'].rstrip(pathsep) + pathsep +
46 django_path)
47 else:
48 env['PYTHONPATH'] = django_path
49
50 def call(*args, **kwargs):
51 kwargs['env'] = env
52 x = input_api.subprocess.Popen(*args, **kwargs)
53 x.communicate()
54 return x.returncode == 0
55
56 def test_port(port):
57 s = socket.socket()
58 try:
59 return s.connect_ex(('127.0.0.1', port)) == 0
60 finally:
61 s.close()
62
63 # First, verify the Google AppEngine SDK is available.
64 if not input_api.os_path.isfile(dev_app):
65 return [error('Install google_appengine sdk in %s' % sdk_path)]
66
67 # Second, checkout rietveld and django if not available.
68 if not input_api.os_path.isdir(rietveld):
69 print('Checking out rietveld...')
70 if not call(['svn', 'co', '-q',
71 'http://rietveld.googlecode.com/svn/trunk@563',
72 rietveld]):
73 return [error('Failed to checkout rietveld')]
74 if not input_api.os_path.isdir(django_path):
75 print('Checking out django...')
76 if not call(
77 ['svn', 'co', '-q',
78 'http://code.djangoproject.com/'
79 'svn/django/branches/releases/1.0.X/django@13637',
80 django_path]):
81 return [error('Failed to checkout django')]
82
83
84 # Test to find an available port starting at 8080.
85 port = 8080
86 while test_port(port) and port < 65000:
87 port += 1
88 if port == 65000:
89 return [error('Having issues finding an available port')]
90
91 verbose = False 37 verbose = False
92 if verbose: 38 if verbose:
93 stdout = None 39 stdout = None
94 stderr = None 40 stderr = None
95 else: 41 else:
96 stdout = input_api.subprocess.PIPE 42 stdout = input_api.subprocess.PIPE
97 stderr = input_api.subprocess.PIPE 43 stderr = input_api.subprocess.STDOUT
98 output = [] 44 output = []
99 test_server = input_api.subprocess.Popen(
100 [dev_app, rietveld, '--port=%d' % port,
101 '--datastore_path=' + join(rietveld, 'tmp.db'), '-c'],
102 stdout=stdout, stderr=stderr, env=env)
103 try: 45 try:
104 # Loop until port 127.0.0.1:port opens or the process dies. 46 # Start a local rietveld instance to test against.
105 while not test_port(port): 47 server.start_server()
106 test_server.poll() 48 test_path = input_api.os_path.abspath(
107 if test_server.returncode is not None: 49 input_api.os_path.join(input_api.PresubmitLocalPath(), 'test'))
108 output.append(error('Test rietveld instance failed early'))
109 break
110 time.sleep(0.001)
111
112 test_path = input_api.os_path.abspath('test')
113 for test in listdir(test_path): 50 for test in listdir(test_path):
114 # push-from-logs and rename fails for now. Remove from this list once they 51 # push-from-logs and rename fails for now. Remove from this list once
115 # work. 52 # they work.
116 if (test in ('push-from-logs.sh', 'rename.sh', 'test-lib.sh') or 53 if (test in ('push-from-logs.sh', 'rename.sh', 'test-lib.sh') or
117 not test.endswith('.sh')): 54 not test.endswith('.sh')):
118 continue 55 continue
56
119 print('Running %s' % test) 57 print('Running %s' % test)
120 if not call([join(test_path, test)], cwd=test_path, stdout=stdout): 58 proc = input_api.subprocess.Popen(
121 output.append(error('%s failed' % test)) 59 [input_api.os_path.join(test_path, test)],
60 cwd=test_path,
61 stdout=stdout,
62 stderr=stderr)
63 proc.communicate()
64 if proc.returncode != 0:
65 output.append(output_api.PresubmitError('%s failed' % test))
66 except setup_mock.Failure, e:
67 output.append(output_api.PresubmitError('\n'.join(str(i) for i in e.args)))
122 finally: 68 finally:
123 test_server.kill() 69 server.stop_server()
124 return output 70 return output
OLDNEW
« 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