| Index: git_cl/test/local_rietveld.py
|
| diff --git a/git_cl/test/local_rietveld.py b/git_cl/test/local_rietveld.py
|
| index bc990d0b7c0d3d91bd078de7febac67baaf838e0..caa456788857aa09e60fc28c9346edac59ca7321 100755
|
| --- a/git_cl/test/local_rietveld.py
|
| +++ b/git_cl/test/local_rietveld.py
|
| @@ -18,130 +18,129 @@ import time
|
|
|
|
|
| class Failure(Exception):
|
| - pass
|
| + pass
|
|
|
|
|
| def test_port(port):
|
| - s = socket.socket()
|
| - try:
|
| - return s.connect_ex(('127.0.0.1', port)) == 0
|
| - finally:
|
| - s.close()
|
| + 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
|
| + # 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__))
|
| - self.base_dir = os.path.realpath(os.path.join(self.base_dir, '..'))
|
| - self.sdk_path = os.path.abspath(
|
| - os.path.join(self.base_dir, '..', '..', 'google_appengine'))
|
| - self.dev_app = os.path.join(self.sdk_path, 'dev_appserver.py')
|
| - self.rietveld = os.path.join(self.base_dir, 'test', 'rietveld')
|
| - self.test_server = None
|
| - self.port = None
|
| - # Generate a friendly environment.
|
| - self.env = os.environ.copy()
|
| - self.env['LANGUAGE'] = 'en'
|
| -
|
| - 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' % self.sdk_path)
|
| -
|
| - def call(*args, **kwargs):
|
| - kwargs['env'] = self.env
|
| - x = subprocess.Popen(*args, **kwargs)
|
| - x.communicate()
|
| - return x.returncode == 0
|
| -
|
| - # Second, checkout rietveld if not available.
|
| - if not os.path.isdir(self.rietveld):
|
| - print('Checking out rietveld...')
|
| - if not call(
|
| - ['svn', 'co', '-q',
|
| - 'http://rietveld.googlecode.com/svn/trunk@681',
|
| - self.rietveld]):
|
| - raise Failure('Failed to checkout rietveld')
|
| - else:
|
| - print('Syncing rietveld...')
|
| - if not call(['svn', 'up', '-q', '-r', '681'], cwd=self.rietveld):
|
| - raise Failure('Failed to checkout rietveld')
|
| -
|
| - def start_server(self, verbose=False):
|
| - self.install_prerequisites()
|
| - self.port = find_free_port()
|
| - if verbose:
|
| - self.out = None
|
| - self.err = None
|
| - else:
|
| - self.out = open(os.devnull, 'w')
|
| - self.err = open(os.devnull, 'w')
|
| - output = []
|
| - cmd = [
|
| - self.dev_app,
|
| - '--skip_sdk_update_check',
|
| - '.',
|
| - '--port=%d' % self.port,
|
| - '--datastore_path=' + os.path.join(self.rietveld, 'tmp.db'),
|
| - '-c']
|
| - self.test_server = subprocess.Popen(
|
| - cmd, stdout=self.out, stderr=self.err, env=self.env,
|
| - 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.001)
|
| -
|
| - def stop_server(self):
|
| - if self.test_server:
|
| - self.test_server.kill()
|
| - self.test_server = None
|
| - self.port = None
|
| - if self.out:
|
| - self.out.close()
|
| - self.out = None
|
| - if self.err:
|
| - self.err.close()
|
| - self.err = None
|
| + """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__))
|
| + self.base_dir = os.path.realpath(os.path.join(self.base_dir, '..'))
|
| + self.sdk_path = os.path.abspath(
|
| + os.path.join(self.base_dir, '..', '..', 'google_appengine'))
|
| + self.dev_app = os.path.join(self.sdk_path, 'dev_appserver.py')
|
| + self.rietveld = os.path.join(self.base_dir, 'test', 'rietveld')
|
| + self.test_server = None
|
| + self.port = None
|
| + # Generate a friendly environment.
|
| + self.env = os.environ.copy()
|
| + self.env['LANGUAGE'] = 'en'
|
| + self.out = None
|
| + self.err = None
|
| +
|
| + 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' % self.sdk_path)
|
| +
|
| + def call(*args, **kwargs):
|
| + kwargs['env'] = self.env
|
| + x = subprocess.Popen(*args, **kwargs)
|
| + x.communicate()
|
| + return x.returncode == 0
|
| +
|
| + # Second, checkout rietveld if not available.
|
| + if not os.path.isdir(self.rietveld):
|
| + print('Checking out rietveld...')
|
| + if not call(
|
| + ['svn', 'co', '-q',
|
| + 'http://rietveld.googlecode.com/svn/trunk@681',
|
| + self.rietveld]):
|
| + raise Failure('Failed to checkout rietveld')
|
| + else:
|
| + print('Syncing rietveld...')
|
| + if not call(['svn', 'up', '-q', '-r', '681'], cwd=self.rietveld):
|
| + raise Failure('Failed to checkout rietveld')
|
| +
|
| + def start_server(self, verbose=False):
|
| + self.install_prerequisites()
|
| + self.port = find_free_port()
|
| + if verbose:
|
| + self.out = None
|
| + self.err = None
|
| + else:
|
| + self.out = open(os.devnull, 'w')
|
| + self.err = open(os.devnull, 'w')
|
| + cmd = [
|
| + self.dev_app,
|
| + '--skip_sdk_update_check',
|
| + '.',
|
| + '--port=%d' % self.port,
|
| + '--datastore_path=' + os.path.join(self.rietveld, 'tmp.db'),
|
| + '-c']
|
| + self.test_server = subprocess.Popen(
|
| + cmd, stdout=self.out, stderr=self.err, env=self.env,
|
| + 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.001)
|
| +
|
| + def stop_server(self):
|
| + if self.test_server:
|
| + self.test_server.kill()
|
| + self.test_server = None
|
| + self.port = None
|
| + if self.out:
|
| + self.out.close()
|
| + self.out = None
|
| + if self.err:
|
| + self.err.close()
|
| + self.err = 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()
|
| + 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()
|
| -
|
| -# vim: ts=4:sw=4:tw=80:et:
|
| + main()
|
|
|