2018-03-29 07:18:08 +00:00
|
|
|
|
|
|
|
import os
|
|
|
|
import tempfile
|
|
|
|
import time
|
|
|
|
import unittest2
|
|
|
|
|
2018-03-29 07:25:11 +00:00
|
|
|
import testlib
|
2018-03-29 07:18:08 +00:00
|
|
|
import mitogen.parent
|
|
|
|
|
|
|
|
|
|
|
|
class TtyCreateChildTest(unittest2.TestCase):
|
|
|
|
func = staticmethod(mitogen.parent.tty_create_child)
|
|
|
|
|
|
|
|
def test_dev_tty_open_succeeds(self):
|
|
|
|
tf = tempfile.NamedTemporaryFile()
|
|
|
|
try:
|
|
|
|
pid, fd = self.func(
|
|
|
|
'bash', '-c', 'exec 2>%s; echo hi > /dev/tty' % (tf.name,)
|
|
|
|
)
|
|
|
|
# TODO: this waitpid hangs on OS X. Installing a SIGCHLD handler
|
|
|
|
# reveals the parent /is/ notified of the child's death, but
|
|
|
|
# calling waitpid() from within SIGCHLD yields "No such processes".
|
|
|
|
# Meanwhile, even inserting a sleep, the following call will hang.
|
|
|
|
waited_pid, status = os.waitpid(pid, 0)
|
|
|
|
self.assertEquals(pid, waited_pid)
|
|
|
|
self.assertEquals(0, status)
|
|
|
|
self.assertEquals('', tf.read())
|
|
|
|
finally:
|
|
|
|
tf.close()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest2.main()
|