| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Setups a local Rietveld instance to test against a live server for | 6 """Setups a local Rietveld instance to test against a live server for |
| 7 integration tests. | 7 integration tests. |
| 8 | 8 |
| 9 It makes sure Google AppEngine SDK is found, download Rietveld and Django code | 9 It makes sure Google AppEngine SDK is found, download Rietveld and Django code |
| 10 if necessary and starts the server on a free inbound TCP port. | 10 if necessary and starts the server on a free inbound TCP port. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 self.base_dir = base_dir | 51 self.base_dir = base_dir |
| 52 if not self.base_dir: | 52 if not self.base_dir: |
| 53 self.base_dir = os.path.dirname(os.path.abspath(__file__)) | 53 self.base_dir = os.path.dirname(os.path.abspath(__file__)) |
| 54 self.base_dir = os.path.realpath(os.path.join(self.base_dir, '..')) | 54 self.base_dir = os.path.realpath(os.path.join(self.base_dir, '..')) |
| 55 self.sdk_path = os.path.abspath( | 55 self.sdk_path = os.path.abspath( |
| 56 os.path.join(self.base_dir, '..', 'google_appengine')) | 56 os.path.join(self.base_dir, '..', 'google_appengine')) |
| 57 self.dev_app = os.path.join(self.sdk_path, 'dev_appserver.py') | 57 self.dev_app = os.path.join(self.sdk_path, 'dev_appserver.py') |
| 58 self.rietveld = os.path.join(self.base_dir, 'tests', 'rietveld') | 58 self.rietveld = os.path.join(self.base_dir, 'tests', 'rietveld') |
| 59 self.test_server = None | 59 self.test_server = None |
| 60 self.port = None | 60 self.port = None |
| 61 self.out = None | |
| 62 self.err = None | |
| 63 | 61 |
| 64 def install_prerequisites(self): | 62 def install_prerequisites(self): |
| 65 # First, verify the Google AppEngine SDK is available. | 63 # First, verify the Google AppEngine SDK is available. |
| 66 if not os.path.isfile(self.dev_app): | 64 if not os.path.isfile(self.dev_app): |
| 67 raise Failure('Install google_appengine sdk in %s' % self.sdk_path) | 65 raise Failure('Install google_appengine sdk in %s' % self.sdk_path) |
| 68 | 66 |
| 69 # Second, checkout rietveld if not available. | 67 # Second, checkout rietveld if not available. |
| 70 if not os.path.isdir(self.rietveld): | 68 if not os.path.isdir(self.rietveld): |
| 71 print('Checking out rietveld...') | 69 print('Checking out rietveld...') |
| 72 try: | 70 try: |
| 73 subprocess2.check_call( | 71 subprocess2.check_call( |
| 74 ['svn', 'co', '-q', 'http://rietveld.googlecode.com/svn/trunk@681', | 72 ['svn', 'co', '-q', 'http://rietveld.googlecode.com/svn/trunk@681', |
| 75 self.rietveld]) | 73 self.rietveld]) |
| 76 except subprocess2.CalledProcessError: | 74 except subprocess2.CalledProcessError: |
| 77 raise Failure('Failed to checkout rietveld') | 75 raise Failure('Failed to checkout rietveld') |
| 78 else: | 76 else: |
| 79 print('Syncing rietveld...') | 77 print('Syncing rietveld...') |
| 80 try: | 78 try: |
| 81 subprocess2.check_call( | 79 subprocess2.check_call( |
| 82 ['svn', 'up', '-q', '-r', '681'], cwd=self.rietveld) | 80 ['svn', 'up', '-q', '-r', '681'], cwd=self.rietveld) |
| 83 except subprocess2.CalledProcessError: | 81 except subprocess2.CalledProcessError: |
| 84 raise Failure('Failed to checkout rietveld') | 82 raise Failure('Failed to checkout rietveld') |
| 85 | 83 |
| 86 def start_server(self, verbose=False): | 84 def start_server(self, verbose=False): |
| 87 self.install_prerequisites() | 85 self.install_prerequisites() |
| 88 self.port = find_free_port() | 86 self.port = find_free_port() |
| 89 if verbose: | 87 if verbose: |
| 90 self.out = None | 88 pipe = None |
| 91 self.err = None | |
| 92 else: | 89 else: |
| 93 self.out = open(os.devnull, 'w') | 90 pipe = subprocess2.VOID |
| 94 self.err = open(os.devnull, 'w') | |
| 95 cmd = [ | 91 cmd = [ |
| 96 self.dev_app, | 92 self.dev_app, |
| 97 '--skip_sdk_update_check', | 93 '--skip_sdk_update_check', |
| 98 '.', | 94 '.', |
| 99 '--port=%d' % self.port, | 95 '--port=%d' % self.port, |
| 100 '--datastore_path=' + os.path.join(self.rietveld, 'tmp.db'), | 96 '--datastore_path=' + os.path.join(self.rietveld, 'tmp.db'), |
| 101 '-c'] | 97 '-c'] |
| 102 self.test_server = subprocess2.Popen( | 98 self.test_server = subprocess2.Popen( |
| 103 cmd, stdout=self.out, stderr=self.err, cwd=self.rietveld) | 99 cmd, stdout=pipe, stderr=pipe, cwd=self.rietveld) |
| 104 # Loop until port 127.0.0.1:port opens or the process dies. | 100 # Loop until port 127.0.0.1:port opens or the process dies. |
| 105 while not test_port(self.port): | 101 while not test_port(self.port): |
| 106 self.test_server.poll() | 102 self.test_server.poll() |
| 107 if self.test_server.returncode is not None: | 103 if self.test_server.returncode is not None: |
| 108 raise Failure( | 104 raise Failure( |
| 109 'Test rietveld instance failed early on port %s' % | 105 'Test rietveld instance failed early on port %s' % |
| 110 self.port) | 106 self.port) |
| 111 time.sleep(0.01) | 107 time.sleep(0.01) |
| 112 | 108 |
| 113 def stop_server(self): | 109 def stop_server(self): |
| 114 if self.test_server: | 110 if self.test_server: |
| 115 self.test_server.kill() | 111 self.test_server.kill() |
| 116 self.test_server.wait() | 112 self.test_server.wait() |
| 117 self.test_server = None | 113 self.test_server = None |
| 118 self.port = None | 114 self.port = None |
| 119 if self.out: | |
| 120 self.out.close() | |
| 121 self.out = None | |
| 122 if self.err: | |
| 123 self.err.close() | |
| 124 self.err = None | |
| 125 | 115 |
| 126 | 116 |
| 127 def main(): | 117 def main(): |
| 128 parser = optparse.OptionParser() | 118 parser = optparse.OptionParser() |
| 129 parser.add_option('-v', '--verbose', action='store_true') | 119 parser.add_option('-v', '--verbose', action='store_true') |
| 130 options, args = parser.parse_args() | 120 options, args = parser.parse_args() |
| 131 if args: | 121 if args: |
| 132 parser.error('Unknown arguments: %s' % ' '.join(args)) | 122 parser.error('Unknown arguments: %s' % ' '.join(args)) |
| 133 instance = LocalRietveld() | 123 instance = LocalRietveld() |
| 134 try: | 124 try: |
| 135 instance.start_server(verbose=options.verbose) | 125 instance.start_server(verbose=options.verbose) |
| 136 print 'Local rietveld instance started on port %d' % instance.port | 126 print 'Local rietveld instance started on port %d' % instance.port |
| 137 while True: | 127 while True: |
| 138 time.sleep(0.1) | 128 time.sleep(0.1) |
| 139 finally: | 129 finally: |
| 140 instance.stop_server() | 130 instance.stop_server() |
| 141 | 131 |
| 142 | 132 |
| 143 if __name__ == '__main__': | 133 if __name__ == '__main__': |
| 144 main() | 134 main() |
| OLD | NEW |