| Index: tests/local_rietveld.py
|
| diff --git a/tests/local_rietveld.py b/tests/local_rietveld.py
|
| deleted file mode 100755
|
| index 922a3d1aef0702ce73c4ed9b27ef97845106de91..0000000000000000000000000000000000000000
|
| --- a/tests/local_rietveld.py
|
| +++ /dev/null
|
| @@ -1,153 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -"""Setups a local Rietveld instance to test against a live server for
|
| -integration tests.
|
| -
|
| -It makes sure Google AppEngine SDK is found, download Rietveld and Django code
|
| -if necessary and starts the server on a free inbound TCP port.
|
| -"""
|
| -
|
| -import optparse
|
| -import os
|
| -import socket
|
| -import sys
|
| -import time
|
| -
|
| -sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
| -import subprocess2
|
| -
|
| -
|
| -class Failure(Exception):
|
| - pass
|
| -
|
| -
|
| -def test_port(port):
|
| - s = socket.socket()
|
| - try:
|
| - return s.connect_ex(('127.0.0.1', port)) == 0
|
| - finally:
|
| - s.close()
|
| -
|
| -
|
| -def find_free_port():
|
| - # Test to find an available port starting at 8080.
|
| - port = 8080
|
| - max_val = (2<<16)
|
| - while test_port(port) and port < max_val:
|
| - port += 1
|
| - if port == max_val:
|
| - raise Failure('Having issues finding an available port')
|
| - return port
|
| -
|
| -
|
| -class LocalRietveld(object):
|
| - """Downloads everything needed to run a local instance of Rietveld."""
|
| -
|
| - def __init__(self, base_dir=None):
|
| - # Paths
|
| - self.base_dir = base_dir
|
| - if not self.base_dir:
|
| - self.base_dir = os.path.dirname(os.path.abspath(__file__))
|
| - # TODO(maruel): This should be in /tmp but that would mean having to fetch
|
| - # everytime. This test is already annoyingly slow.
|
| - self.rietveld = os.path.join(self.base_dir, '_rietveld')
|
| - self.test_server = None
|
| - self.port = None
|
| -
|
| - # Find the GAE SDK
|
| - previous_dir = ''
|
| - self.sdk_path = ''
|
| - base_dir = self.base_dir
|
| - while base_dir != previous_dir:
|
| - previous_dir = base_dir
|
| - self.sdk_path = os.path.join(base_dir, 'google_appengine')
|
| - if not os.path.isfile(os.path.join(self.sdk_path, 'VERSION')):
|
| - base_dir = os.path.dirname(base_dir)
|
| - self.dev_app = os.path.join(self.sdk_path, 'dev_appserver.py')
|
| -
|
| - def install_prerequisites(self):
|
| - # First, verify the Google AppEngine SDK is available.
|
| - if not os.path.isfile(self.dev_app):
|
| - raise Failure(
|
| - 'Install google_appengine sdk in %s or higher up' % self.base_dir)
|
| -
|
| - # Second, checkout rietveld if not available.
|
| - if not os.path.isdir(self.rietveld):
|
| - print('Checking out rietveld...')
|
| - try:
|
| - subprocess2.check_call(
|
| - ['svn', 'co', '-q', 'http://rietveld.googlecode.com/svn/trunk@681',
|
| - self.rietveld])
|
| - except (OSError, subprocess2.CalledProcessError), e:
|
| - raise Failure('Failed to checkout rietveld\n%s' % e)
|
| - else:
|
| - print('Syncing rietveld...')
|
| - try:
|
| - subprocess2.check_call(
|
| - ['svn', 'up', '-q', '-r', '681'], cwd=self.rietveld)
|
| - except (OSError, subprocess2.CalledProcessError), e:
|
| - raise Failure('Failed to sync rietveld\n%s' % e)
|
| -
|
| - def start_server(self, verbose=False):
|
| - self.install_prerequisites()
|
| - self.port = find_free_port()
|
| - if verbose:
|
| - pipe = None
|
| - else:
|
| - pipe = subprocess2.VOID
|
| - cmd = [
|
| - sys.executable,
|
| - self.dev_app,
|
| - '--skip_sdk_update_check',
|
| - '.',
|
| - '--port=%d' % self.port,
|
| - '--datastore_path=' + os.path.join(self.rietveld, 'tmp.db'),
|
| - '-c']
|
| -
|
| - # CHEAP TRICK
|
| - # By default you only want to bind on loopback but I'm testing over a
|
| - # headless computer so it's useful to be able to access the test instance
|
| - # remotely.
|
| - if os.environ.get('GAE_LISTEN_ALL', '') == 'true':
|
| - cmd.extend(('-a', '0.0.0.0'))
|
| -
|
| - self.test_server = subprocess2.Popen(
|
| - cmd, stdout=pipe, stderr=pipe, cwd=self.rietveld)
|
| - # Loop until port 127.0.0.1:port opens or the process dies.
|
| - while not test_port(self.port):
|
| - self.test_server.poll()
|
| - if self.test_server.returncode is not None:
|
| - raise Failure(
|
| - 'Test rietveld instance failed early on port %s' %
|
| - self.port)
|
| - time.sleep(0.01)
|
| -
|
| - def stop_server(self):
|
| - if self.test_server:
|
| - self.test_server.kill()
|
| - self.test_server.wait()
|
| - self.test_server = None
|
| - self.port = None
|
| -
|
| -
|
| -def main():
|
| - parser = optparse.OptionParser()
|
| - parser.add_option('-v', '--verbose', action='store_true')
|
| - options, args = parser.parse_args()
|
| - if args:
|
| - parser.error('Unknown arguments: %s' % ' '.join(args))
|
| - instance = LocalRietveld()
|
| - try:
|
| - instance.start_server(verbose=options.verbose)
|
| - print 'Local rietveld instance started on port %d' % instance.port
|
| - while True:
|
| - time.sleep(0.1)
|
| - finally:
|
| - instance.stop_server()
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - main()
|
|
|