diff options
Diffstat (limited to 'tests/fork_test_simple.py')
| -rw-r--r-- | tests/fork_test_simple.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/fork_test_simple.py b/tests/fork_test_simple.py new file mode 100644 index 0000000..ac8d1ea --- /dev/null +++ b/tests/fork_test_simple.py @@ -0,0 +1,52 @@ +from __future__ import print_function +# no standard tests in this file, ignore +__test__ = False + + +def parent(pid): + import signal + + eventlet.Timeout(1) + try: + port = None + while True: + try: + contents = open(signal_path, 'rb').read() + port = int(contents.split()[0]) + break + except (IOError, IndexError, ValueError, TypeError): + eventlet.sleep(0.1) + eventlet.connect(('127.0.0.1', port)) + while True: + try: + contents = open(signal_path, 'rb').read() + result = contents.split()[1] + break + except (IOError, IndexError): + eventlet.sleep(0.1) + print('result {0}'.format(result.decode())) + finally: + os.kill(pid, signal.SIGTERM) + + +def child(): + sock = eventlet.listen(('', 0)) + with open(signal_path, 'wb') as fd: + msg = '{0}\n'.format(sock.getsockname()[1]).encode() + fd.write(msg) + fd.flush() + sock.accept() + fd.write(b'done') + +if __name__ == '__main__': + import eventlet + import os + + signal_path = os.path.join(os.environ['TMP'], 'fork_test_simple_signal.txt') + pid = os.fork() + if pid > 0: + parent(pid) + elif pid == 0: + child() + else: + print('fork failed') |
