Add python-eventlet 0.16.1
[packages/trusty/python-eventlet.git] / eventlet / tests / fork_test.py
diff --git a/eventlet/tests/fork_test.py b/eventlet/tests/fork_test.py
new file mode 100644 (file)
index 0000000..f15883f
--- /dev/null
@@ -0,0 +1,52 @@
+from tests.patcher_test import ProcessBase
+
+
+class ForkTest(ProcessBase):
+    def test_simple(self):
+        newmod = '''
+import eventlet
+import os
+import sys
+import signal
+from eventlet.support import bytes_to_str, six
+mydir = %r
+signal_file = os.path.join(mydir, "output.txt")
+pid = os.fork()
+if (pid != 0):
+  eventlet.Timeout(10)
+  try:
+    port = None
+    while True:
+      try:
+        contents = open(signal_file, "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_file, "rb").read()
+        result = contents.split()[1]
+        break
+      except (IOError, IndexError):
+        eventlet.sleep(0.1)
+    print('result {0}'.format(bytes_to_str(result)))
+  finally:
+    os.kill(pid, signal.SIGTERM)
+else:
+  try:
+    s = eventlet.listen(('', 0))
+    fd = open(signal_file, "wb")
+    fd.write(six.b(str(s.getsockname()[1])))
+    fd.write(b"\\n")
+    fd.flush()
+    s.accept()
+    fd.write(b"done")
+    fd.flush()
+  finally:
+    fd.close()
+'''
+        self.write_to_tempfile("newmod", newmod % self.tempdir)
+        output, lines = self.launch_subprocess('newmod.py')
+        self.assertEqual(lines[0], "result done", output)