diff options
Diffstat (limited to 'test/service.py')
-rw-r--r-- | test/service.py | 40 |
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() - |