summaryrefslogtreecommitdiff
path: root/test/service.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/service.py')
-rw-r--r--test/service.py40
1 files changed, 12 insertions, 28 deletions
diff --git a/test/service.py b/test/service.py
index 0a9ee72..3b91984 100644
--- a/test/service.py
+++ b/test/service.py
@@ -9,10 +9,8 @@ import time
__all__ = [
'ExternalService',
'SpawnedService',
-
]
-
log = logging.getLogger(__name__)
@@ -31,7 +29,7 @@ class ExternalService(object):
class SpawnedService(threading.Thread):
def __init__(self, args=None, env=None):
- threading.Thread.__init__(self)
+ super(SpawnedService, self).__init__()
if args is None:
raise TypeError("args parameter is required")
@@ -45,9 +43,6 @@ class SpawnedService(threading.Thread):
self.alive = False
self.daemon = True
- def run(self):
- self.run_with_handles()
-
def _spawn(self):
if self.alive: return
if self.child and self.child.poll() is None: return
@@ -73,62 +68,51 @@ class SpawnedService(threading.Thread):
else:
self.child.kill()
- def run_with_handles(self):
+ def run(self):
self._spawn()
while True:
(rds, _, _) = select.select([self.child.stdout, self.child.stderr], [], [], 1)
if self.child.stdout in rds:
line = self.child.stdout.readline()
- self.captured_stdout.append(line.decode('utf-8'))
+ self.captured_stdout.append(line.decode('utf-8').rstrip())
if self.child.stderr in rds:
line = self.child.stderr.readline()
- self.captured_stderr.append(line.decode('utf-8'))
+ self.captured_stderr.append(line.decode('utf-8').rstrip())
if self.child.poll() is not None:
self.dump_logs()
- self._spawn()
+ break
if self.should_die.is_set():
self._despawn()
break
def dump_logs(self):
- log.critical('stderr')
- for line in self.captured_stderr:
- log.critical(line.rstrip())
-
- log.critical('stdout')
- for line in self.captured_stdout:
- log.critical(line.rstrip())
+ sys.stderr.write('\n'.join(self.captured_stderr))
+ sys.stdout.write('\n'.join(self.captured_stdout))
def wait_for(self, pattern, timeout=30):
- t1 = time.time()
+ start = time.time()
while True:
- t2 = time.time()
- if t2 - t1 >= timeout:
+ elapsed = time.time() - start
+ if elapsed >= timeout:
try:
self.child.kill()
except:
log.exception("Received exception when killing child process")
- self.dump_logs()
-
log.error("Waiting for %r timed out after %d seconds", pattern, timeout)
return False
if re.search(pattern, '\n'.join(self.captured_stdout), re.IGNORECASE) is not None:
- log.info("Found pattern %r in %d seconds via stdout", pattern, (t2 - t1))
+ log.info("Found pattern %r in %d seconds via stdout", pattern, elapsed)
return True
if re.search(pattern, '\n'.join(self.captured_stderr), re.IGNORECASE) is not None:
- log.info("Found pattern %r in %d seconds via stderr", pattern, (t2 - t1))
+ log.info("Found pattern %r in %d seconds via stderr", pattern, elapsed)
return True
time.sleep(0.1)
- def start(self):
- threading.Thread.start(self)
-
def stop(self):
self.should_die.set()
self.join()
-