diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-09-28 15:35:18 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-09-28 15:35:18 -0700 |
commit | 46b3356e4812b8eb5e8986abee4626d9bac140b9 (patch) | |
tree | fdae3ab905b378a3fa4ed70faaf6231776c89c42 | |
parent | 77f0580615b4d5aa0275657fb7b4c2f903b01f26 (diff) |
improve websocket harness
-rwxr-xr-x | tests/runner.py | 51 |
1 files changed, 34 insertions, 17 deletions
diff --git a/tests/runner.py b/tests/runner.py index 63a0650f..7ada41fc 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -8449,28 +8449,45 @@ elif 'browser' in str(sys.argv): class WebsockHarness: def __enter__(self): - def server_func(): - subprocess.call([path_from_root('tests', 'socket_server.sh')]); + self.pids = [] - self.server = multiprocessing.Process(target=server_func) - self.server.start() - print '[Socket server on process %d]' % self.server.pid - - def websockify_func(): - subprocess.call([path_from_root('third_party', 'websockify', 'other', 'websockify'), '-vvv', '8991', '127.0.0.1:8990']) + def server_func(q): + proc = Popen([path_from_root('tests', 'socket_server.sh')]) + q.put(proc.pid) + proc.communicate() - self.websockify = multiprocessing.Process(target=websockify_func) + server_queue = multiprocessing.Queue() + self.server = multiprocessing.Process(target=server_func, args=(server_queue,)) + self.server.start() + self.pids.append(self.server.pid) + while True: + if not server_queue.empty(): + self.pids.append(server_queue.get()) + break + time.sleep(0.1) + print '[Socket server on processes %s]' % str(self.pids[-2:]) + + def websockify_func(q): + proc = Popen([path_from_root('third_party', 'websockify', 'other', 'websockify'), '-vvv', '8991', '127.0.0.1:8990']) + q.put(proc.pid) + proc.communicate() + + websockify_queue = multiprocessing.Queue() + self.websockify = multiprocessing.Process(target=websockify_func, args=(websockify_queue,)) self.websockify.start() - print '[Websockify on process %d]' % self.websockify.pid + self.pids.append(self.websockify.pid) + while True: + if not websockify_queue.empty(): + self.pids.append(websockify_queue.get()) + break + time.sleep(0.1) + print '[Websockify on processes %s]' % str(self.pids[-2:]) def __exit__(self, *args, **kwargs): - for proc in [self.websockify, self.server]: - try: - print '[Cleaning up %d]' % proc.pid - proc.terminate() - print '[ok]' - finally: - pass + import signal + for pid in self.pids: + #os.kill(pid, signal.SIGTERM) # With this commented, we leave no children, but we hang the test harness on exit XXX + print '[%d should be cleaned up automatically]' % pid def test_websockets(self): with self.WebsockHarness(): |