Index: testing_support/local_rietveld.py |
diff --git a/testing_support/local_rietveld.py b/testing_support/local_rietveld.py |
index 20aaa611e55e52457e40732154f1c58a65330d30..f88c1f5b9098264e8ccc9131d91b0a812abe39d6 100755 |
--- a/testing_support/local_rietveld.py |
+++ b/testing_support/local_rietveld.py |
@@ -10,11 +10,13 @@ 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 logging |
import optparse |
import os |
import shutil |
import socket |
import sys |
+import tempfile |
import time |
try: |
@@ -61,6 +63,7 @@ class LocalRietveld(object): |
self.rietveld = os.path.join(self.base_dir, '_rietveld') |
self.test_server = None |
self.port = None |
+ self.tempdir = None |
# Find the GAE SDK |
previous_dir = '' |
@@ -105,19 +108,23 @@ class LocalRietveld(object): |
def start_server(self, verbose=False): |
self.install_prerequisites() |
+ assert not self.tempdir |
+ self.tempdir = tempfile.mkdtemp(prefix='rietveld_test') |
self.port = find_free_port() |
if verbose: |
- pipe = None |
+ stdout = stderr = None |
else: |
- pipe = subprocess2.VOID |
+ stdout = subprocess2.PIPE |
+ stderr = subprocess2.STDOUT |
cmd = [ |
sys.executable, |
self.dev_app, |
- '--skip_sdk_update_check', |
'.', |
- '--port=%d' % self.port, |
- '--datastore_path=' + os.path.join(self.rietveld, 'tmp.db'), |
- '-c'] |
+ '--port', str(self.port), |
+ '--storage', self.tempdir, |
+ '--clear_search_indexes', |
+ '--skip_sdk_update_check', |
+ ] |
# CHEAP TRICK |
# By default you only want to bind on loopback but I'm testing over a |
@@ -125,16 +132,20 @@ class LocalRietveld(object): |
# remotely. |
if os.environ.get('GAE_LISTEN_ALL', '') == 'true': |
cmd.extend(('-a', '0.0.0.0')) |
- |
+ logging.info(' '.join(cmd)) |
self.test_server = subprocess2.Popen( |
- cmd, stdout=pipe, stderr=pipe, cwd=self.rietveld) |
+ cmd, stdout=stdout, stderr=stderr, 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: |
+ if not verbose: |
+ out = self.test_server.communicate()[0] |
+ shutil.rmtree(self.tempdir) |
+ self.tempdir = None |
raise Failure( |
- 'Test rietveld instance failed early on port %s' % |
- self.port) |
+ 'Test rietveld instance failed early on port %s\n%s' % |
+ (self.port, out)) |
time.sleep(0.01) |
def stop_server(self): |
@@ -146,6 +157,9 @@ class LocalRietveld(object): |
self.test_server.wait() |
self.test_server = None |
self.port = None |
+ if self.tempdir: |
+ shutil.rmtree(self.tempdir) |
+ self.tempdir = None |
def main(): |