summaryrefslogtreecommitdiff
path: root/test/service.py
diff options
context:
space:
mode:
authorMark Roberts <wizzat@gmail.com>2014-05-06 21:24:15 -0700
committerMark Roberts <wizzat@gmail.com>2014-05-06 21:24:15 -0700
commitefcf58b84214aeda6cf79319f182407cde7833a6 (patch)
tree94cbb3cc886432dc77bf09f7101982d871db0365 /test/service.py
parent99320fbd8c33f3b831557c507deeaf5e650ab813 (diff)
downloadkafka-python-efcf58b84214aeda6cf79319f182407cde7833a6.tar.gz
Attempt to fix travis build. Decrease complexity of service.py in favor of in memory logging. Address code review concerns
Diffstat (limited to 'test/service.py')
-rw-r--r--test/service.py78
1 files changed, 25 insertions, 53 deletions
diff --git a/test/service.py b/test/service.py
index 78a5f24..8872c82 100644
--- a/test/service.py
+++ b/test/service.py
@@ -1,3 +1,4 @@
+import logging
import re
import select
import subprocess
@@ -29,43 +30,15 @@ class SpawnedService(threading.Thread):
threading.Thread.__init__(self)
self.args = args
- self.captured_stdout = ""
- self.captured_stderr = ""
- self.stdout_file = None
- self.stderr_file = None
- self.capture_stdout = True
- self.capture_stderr = True
- self.show_stdout = True
- self.show_stderr = True
+ self.captured_stdout = []
+ self.captured_stderr = []
self.should_die = threading.Event()
- def configure_stdout(self, file=None, capture=True, show=False):
- self.stdout_file = file
- self.capture_stdout = capture
- self.show_stdout = show
-
- def configure_stderr(self, file=None, capture=False, show=False):
- self.stderr_file = file
- self.capture_stderr = capture
- self.show_stderr = show
-
def run(self):
- stdout_handle = None
- stderr_handle = None
- try:
- if self.stdout_file:
- stdout_handle = open(self.stdout_file, "w")
- if self.stderr_file:
- stderr_handle = open(self.stderr_file, "w")
- self.run_with_handles(stdout_handle, stderr_handle)
- finally:
- if stdout_handle:
- stdout_handle.close()
- if stderr_handle:
- stderr_handle.close()
-
- def run_with_handles(self, stdout_handle, stderr_handle):
+ self.run_with_handles()
+
+ def run_with_handles(self):
self.child = subprocess.Popen(
self.args,
bufsize=1,
@@ -78,35 +51,32 @@ class SpawnedService(threading.Thread):
if self.child.stdout in rds:
line = self.child.stdout.readline()
- if stdout_handle:
- stdout_handle.write(line)
- stdout_handle.flush()
- if self.capture_stdout:
- self.captured_stdout += line
- if self.show_stdout:
- sys.stdout.write(line)
- sys.stdout.flush()
+ self.captured_stdout.append(line)
if self.child.stderr in rds:
line = self.child.stderr.readline()
- if stderr_handle:
- stderr_handle.write(line)
- stderr_handle.flush()
- if self.capture_stderr:
- self.captured_stderr += line
- if self.show_stderr:
- sys.stderr.write(line)
- sys.stderr.flush()
+ self.captured_stderr.append(line)
if self.should_die.is_set():
self.child.terminate()
alive = False
- if self.child.poll() is not None:
+ poll_results = self.child.poll()
+ if poll_results is not None:
if not alive:
break
else:
- raise RuntimeError("Subprocess has died. Aborting.")
+ self.dump_logs()
+ raise RuntimeError("Subprocess has died. Aborting. (args=%s)" % ' '.join(str(x) for x in self.args))
+
+ def dump_logs(self):
+ logging.critical('stderr')
+ for line in self.captured_stderr:
+ logging.critical(line.rstrip())
+
+ logging.critical('stdout')
+ for line in self.captured_stdout:
+ logging.critical(line.rstrip())
def wait_for(self, pattern, timeout=10):
t1 = time.time()
@@ -117,11 +87,13 @@ class SpawnedService(threading.Thread):
self.child.kill()
except:
logging.exception("Received exception when killing child process")
+ self.dump_logs()
+
raise RuntimeError("Waiting for %r timed out" % pattern)
- if re.search(pattern, self.captured_stdout, re.IGNORECASE) is not None:
+ if re.search(pattern, '\n'.join(self.captured_stdout), re.IGNORECASE) is not None:
return
- if re.search(pattern, self.captured_stderr, re.IGNORECASE) is not None:
+ if re.search(pattern, '\n'.join(self.captured_stderr), re.IGNORECASE) is not None:
return
time.sleep(0.1)