OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2014 The Swarming Authors. All rights reserved. | 2 # Copyright 2014 The Swarming Authors. All rights reserved. |
3 # Use of this source code is governed by the Apache v2.0 license that can be | 3 # Use of this source code is governed by the Apache v2.0 license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Integration test for the Swarming server.""" | 6 """Integration test for the Swarming server.""" |
7 | 7 |
8 import Queue | 8 import Queue |
9 import json | 9 import json |
10 import logging | 10 import logging |
11 import optparse | 11 import optparse |
12 import os | 12 import os |
13 import shutil | |
14 import subprocess | 13 import subprocess |
15 import sys | 14 import sys |
16 import tempfile | 15 import tempfile |
17 import threading | 16 import threading |
18 import time | 17 import time |
19 | 18 |
20 APP_DIR = os.path.dirname(os.path.abspath(__file__)) | 19 APP_DIR = os.path.dirname(os.path.abspath(__file__)) |
21 CHECKOUT_DIR = os.path.dirname(os.path.dirname(APP_DIR)) | 20 CHECKOUT_DIR = os.path.dirname(os.path.dirname(APP_DIR)) |
22 CLIENT_DIR = os.path.join(CHECKOUT_DIR, 'client') | 21 CLIENT_DIR = os.path.join(CHECKOUT_DIR, 'client') |
23 SWARMING_SCRIPT = os.path.join(CLIENT_DIR, 'swarming.py') | 22 SWARMING_SCRIPT = os.path.join(CLIENT_DIR, 'swarming.py') |
24 | 23 |
| 24 sys.path.insert(0, CLIENT_DIR) |
| 25 from third_party.depot_tools import fix_encoding |
| 26 from utils import file_path |
| 27 sys.path.pop(0) |
| 28 |
25 | 29 |
26 def gen_isolated(isolate, script, includes=None): | 30 def gen_isolated(isolate, script, includes=None): |
27 """Archives a script to `isolate` server.""" | 31 """Archives a script to `isolate` server.""" |
28 tmp = tempfile.mkdtemp(prefix='swarming_smoke') | 32 tmp = tempfile.mkdtemp(prefix='swarming_smoke') |
29 data = { | 33 data = { |
30 'variables': { | 34 'variables': { |
31 'command': ['python', '-u', 'script.py'], | 35 'command': ['python', '-u', 'script.py'], |
32 'files': ['script.py'], | 36 'files': ['script.py'], |
33 }, | 37 }, |
34 } | 38 } |
(...skipping 19 matching lines...) Expand all Loading... |
54 data['includes'] = includes | 58 data['includes'] = includes |
55 with open(isolated, 'wb') as f: | 59 with open(isolated, 'wb') as f: |
56 json.dump(data, f, sort_keys=True, separators=(',', ':')) | 60 json.dump(data, f, sort_keys=True, separators=(',', ':')) |
57 cmd = [ | 61 cmd = [ |
58 os.path.join(CLIENT_DIR, 'isolateserver.py'), 'archive', | 62 os.path.join(CLIENT_DIR, 'isolateserver.py'), 'archive', |
59 '-I', isolate, '--namespace', 'default-gzip', isolated, | 63 '-I', isolate, '--namespace', 'default-gzip', isolated, |
60 ] | 64 ] |
61 out = subprocess.check_output(cmd) | 65 out = subprocess.check_output(cmd) |
62 return out.split(' ', 1)[0] | 66 return out.split(' ', 1)[0] |
63 finally: | 67 finally: |
64 shutil.rmtree(tmp) | 68 file_path.rmtree(tmp) |
65 | 69 |
66 | 70 |
67 def capture(cmd, **kwargs): | 71 def capture(cmd, **kwargs): |
68 """Captures output and return exit code.""" | 72 """Captures output and return exit code.""" |
69 proc = subprocess.Popen( | 73 proc = subprocess.Popen( |
70 cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kwargs) | 74 cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kwargs) |
71 out = proc.communicate()[0] | 75 out = proc.communicate()[0] |
72 return out, proc.returncode | 76 return out, proc.returncode |
73 | 77 |
74 | 78 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 def run_test(results, swarming, isolate, extra_flags, name, test_case): | 190 def run_test(results, swarming, isolate, extra_flags, name, test_case): |
187 start = time.time() | 191 start = time.time() |
188 try: | 192 try: |
189 result = test_case(swarming, isolate, extra_flags) | 193 result = test_case(swarming, isolate, extra_flags) |
190 except Exception as e: | 194 except Exception as e: |
191 result = e | 195 result = e |
192 results.put((name, result, time.time() - start)) | 196 results.put((name, result, time.time() - start)) |
193 | 197 |
194 | 198 |
195 def main(): | 199 def main(): |
| 200 fix_encoding.fix_encoding() |
196 # It's necessary for relative paths in .isolate. | 201 # It's necessary for relative paths in .isolate. |
197 os.chdir(APP_DIR) | 202 os.chdir(APP_DIR) |
198 | 203 |
199 parser = optparse.OptionParser() | 204 parser = optparse.OptionParser() |
200 parser.add_option('-S', '--swarming', help='Swarming server') | 205 parser.add_option('-S', '--swarming', help='Swarming server') |
201 parser.add_option('-I', '--isolate-server', help='Isolate server') | 206 parser.add_option('-I', '--isolate-server', help='Isolate server') |
202 parser.add_option('-d', '--dimensions', nargs=2, default=[], action='append') | 207 parser.add_option('-d', '--dimensions', nargs=2, default=[], action='append') |
203 parser.add_option('-v', '--verbose', action='store_true', help='Logs more') | 208 parser.add_option('-v', '--verbose', action='store_true', help='Logs more') |
204 options, args = parser.parse_args() | 209 options, args = parser.parse_args() |
205 | 210 |
(...skipping 28 matching lines...) Expand all Loading... |
234 for i in xrange(len(tests)): | 239 for i in xrange(len(tests)): |
235 name, result, duration = results.get() | 240 name, result, duration = results.get() |
236 print('[%d/%d] %-*s: %4.1fs: %s' % | 241 print('[%d/%d] %-*s: %4.1fs: %s' % |
237 (i, len(tests), maxlen, name, duration, result)) | 242 (i, len(tests), maxlen, name, duration, result)) |
238 | 243 |
239 return 0 | 244 return 0 |
240 | 245 |
241 | 246 |
242 if __name__ == '__main__': | 247 if __name__ == '__main__': |
243 sys.exit(main()) | 248 sys.exit(main()) |
OLD | NEW |