diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_buffered_pipe.py | 15 | ||||
-rw-r--r-- | tests/test_transport.py | 38 |
2 files changed, 53 insertions, 0 deletions
diff --git a/tests/test_buffered_pipe.py b/tests/test_buffered_pipe.py index ac123527..bef8fb8a 100644 --- a/tests/test_buffered_pipe.py +++ b/tests/test_buffered_pipe.py @@ -24,6 +24,7 @@ import threading import time import unittest from paramiko.buffered_pipe import BufferedPipe, PipeTimeout +from paramiko import pipe def delay_thread(pipe): @@ -75,3 +76,17 @@ class BufferedPipeTest (unittest.TestCase): threading.Thread(target=close_thread, args=(p,)).start() data = p.read(1, 1.0) self.assertEquals('', data) + + def test_4_or_pipe(self): + p = pipe.make_pipe() + p1, p2 = pipe.make_or_pipe(p) + self.assertFalse(p._set) + p1.set() + self.assertTrue(p._set) + p2.set() + self.assertTrue(p._set) + p1.clear() + self.assertTrue(p._set) + p2.clear() + self.assertFalse(p._set) + diff --git a/tests/test_transport.py b/tests/test_transport.py index 53e69690..6aaf7386 100644 --- a/tests/test_transport.py +++ b/tests/test_transport.py @@ -639,3 +639,41 @@ class TransportTest (unittest.TestCase): self.tc.cancel_port_forward('', port) self.assertTrue(self.server._listen is None) + def test_K_stderr_select(self): + """ + verify that select() on a channel works even if only stderr is + receiving data. + """ + self.setup_test_server() + chan = self.tc.open_session() + chan.invoke_shell() + schan = self.ts.accept(1.0) + + # nothing should be ready + r, w, e = select.select([chan], [], [], 0.1) + self.assertEquals([], r) + self.assertEquals([], w) + self.assertEquals([], e) + + schan.send_stderr('hello\n') + + # something should be ready now (give it 1 second to appear) + for i in range(10): + r, w, e = select.select([chan], [], [], 0.1) + if chan in r: + break + time.sleep(0.1) + self.assertEquals([chan], r) + self.assertEquals([], w) + self.assertEquals([], e) + + self.assertEquals('hello\n', chan.recv_stderr(6)) + + # and, should be dead again now + r, w, e = select.select([chan], [], [], 0.1) + self.assertEquals([], r) + self.assertEquals([], w) + self.assertEquals([], e) + + schan.close() + chan.close() |