Esempio n. 1
0
    def start(self, sockets=None, **kwargs):  #pylint: disable=W0221
        """
        Present the PTY of the container inside the current process.

        This will take over the current process' TTY until the container's PTY
        is closed.
        """
        pty_stdin, pty_stdout, pty_stderr = sockets or self.sockets()
        pumps = []

        if pty_stdin and self.interactive:
            #pylint: disable=C0301
            pumps.append(
                io.Pump(io.Stream(self.stdin),
                        pty_stdin,
                        wait_for_output=not sys.stdin.isatty()))

        if pty_stdout:
            pumps.append(
                io.Pump(pty_stdout,
                        io.Stream(self.stdout),
                        propagate_close=False))

        if pty_stderr:
            pumps.append(
                io.Pump(pty_stderr,
                        io.Stream(self.stderr),
                        propagate_close=False))

        if not self.info()['State']['Running']:
            self.client.start(self.container, **kwargs)  #pylint: disable=W0613

        return pumps
Esempio n. 2
0
    def start(self, sockets=None, **kwargs):  #pylint: disable=W0221
        """
        start execution
        """
        stream = sockets or self.sockets()
        pumps = []

        if self.interactive:
            pumps.append(
                io.Pump(io.Stream(self.stdin), stream, wait_for_output=False))

        pumps.append(
            io.Pump(stream, io.Stream(self.stdout), propagate_close=False))
        return pumps
Esempio n. 3
0
    def test_set_blocking_fd(self, fake_set_blocking):
        """``dockerpty.io`` Stream.set_blocking proxies the call to the file descriptor if possible"""
        fake_fd = MagicMock()

        io.Stream(fake_fd).set_blocking(56)

        self.assertTrue(fake_fd.setblocking.called)
Esempio n. 4
0
    def test_needs_write(self):
        """``dockerpty.io`` Stream.needs_write Returns True when there's data in the buffer"""
        fake_fd = MagicMock()
        stream = io.Stream(fake_fd)
        stream.buffer = b'some data'

        self.assertTrue(stream.needs_write())
Esempio n. 5
0
    def test_set_blocking(self, fake_set_blocking):
        """``dockerpty.io`` Stream.set_blocking can manually set blocking on a the file descriptor"""
        fake_fd = FakeFD()

        io.Stream(fake_fd).set_blocking(56)

        self.assertTrue(fake_set_blocking.called)
Esempio n. 6
0
    def test_do_write_os_write(self, fake_write):
        """``dockerpty.io`` Stream.do_write calls os.write when the file descriptor has no 'send' method"""
        fake_fd = FakeFD()
        fake_fd.fileno = lambda: 32

        io.Stream(fake_fd).do_write()

        self.assertTrue(fake_write.called)
Esempio n. 7
0
    def test_read_error(self):
        """``dockerpty.io`` Stream.read raises unexpected errors"""
        fake_fd = MagicMock()
        error = OSError()
        error.errno = 8965
        fake_fd.recv.side_effect = [error]

        with self.assertRaises(OSError):
            io.Stream(fake_fd).read()
Esempio n. 8
0
    def test_read(self):
        """``dockerpty.io`` Stream.read returns N number of bytes from the stream"""
        fake_fd = MagicMock()
        fake_fd.recv.return_value = 'some bytes'

        output = io.Stream(fake_fd).read()
        expected = 'some bytes'

        self.assertEqual(output, expected)
Esempio n. 9
0
    def test_do_write_error(self):
        """``dockerpty.io`` Stream.do_write closes when requested after writing"""
        fake_fd = MagicMock()
        error = OSError()
        error.errno = 2346
        fake_fd.send.side_effect = [error]

        with self.assertRaises(OSError):
            io.Stream(fake_fd).do_write()
Esempio n. 10
0
    def test_fileno(self):
        """``dockerpty.io`` Stream.fileno proxies to the file descriptor"""
        fake_fd = MagicMock()
        fake_fd.fileno.return_value = 9

        output = io.Stream(fake_fd).fileno()
        expected = 9

        self.assertEqual(output, expected)
Esempio n. 11
0
    def test_repr(self):
        """``dockerpty.io`` Stream has a handy __repr__"""
        fake_fd = FakeFD()
        stream = io.Stream(fake_fd)

        the_repr = '{}'.format(stream)
        expected = 'Stream(some file descriptor object)'

        self.assertEqual(the_repr, expected)
Esempio n. 12
0
    def test_close(self):
        """``dockerpty.io`` Stream.close closes the file descriptor"""
        fake_fd = MagicMock()
        stream = io.Stream(fake_fd)

        stream.close()

        self.assertTrue(stream.closed)
        self.assertTrue(fake_fd.close.called)
Esempio n. 13
0
    def test_read_os(self, fake_read):
        """``dockerpty.io`` Stream.read calls to os.read if the file descriptor has no 'recv' attribute"""
        fake_fd = FakeFD()
        fake_fd.fileno = lambda : 56
        fake_read.return_value = 'yay, bytes!'

        output = io.Stream(fake_fd).read()
        expected = 'yay, bytes!'

        self.assertEqual(output, expected)
Esempio n. 14
0
    def test_close_os(self, fake_close):
        """``dockerpty.io`` Stream.close closes the file descriptor even if the fd had no 'close' attribute"""
        fake_fd = FakeFD()
        fake_fd.fileno = lambda: 3445
        stream = io.Stream(fake_fd)

        stream.close()

        self.assertTrue(stream.closed)
        self.assertTrue(fake_close.called)
Esempio n. 15
0
    def test_do_write(self):
        """``dockerpty.io`` Stream.do_write returns how many bytes were written"""
        fake_fd = MagicMock()
        fake_fd.send.return_value = 93

        stream = io.Stream(fake_fd)
        written = stream.do_write()
        expected = 93

        self.assertEqual(written, expected)
Esempio n. 16
0
 def sockets(self):
     """
     Return a single socket which is processing all I/O to exec
     """
     socket = self.client.exec_start(self.exec_id,
                                     socket=True,
                                     tty=sys.stdin.isatty())
     stream = io.Stream(socket)
     if self.is_process_tty():  #pylint: disable=R1705
         return stream
     else:
         return io.Demuxer(stream)
Esempio n. 17
0
    def test_write(self):
        """``dockerpty.io`` Stream.write adds to the buffer, then calls 'do_write'"""
        data = b'yay bites!'
        fake_fd = MagicMock()
        fake_do_write = MagicMock()
        stream = io.Stream(fake_fd)
        stream.do_write = fake_do_write

        stream.write(data)

        self.assertEqual(stream.buffer, data)
        self.assertTrue(fake_do_write.called)
Esempio n. 18
0
    def test_write_return(self):
        """``dockerpty.io`` Stream.write returns the number of bytes written"""
        data = b'yay bites!'
        fake_fd = MagicMock()
        fake_do_write = MagicMock()
        stream = io.Stream(fake_fd)
        stream.do_write = fake_do_write

        bytes_written = stream.write(data)
        expected = len(data)

        self.assertEqual(bytes_written, expected)
Esempio n. 19
0
    def test_write_ignore(self):
        """``dockerpty.io`` Stream.write adds to the buffer, then calls 'do_write'"""
        data = b''
        fake_fd = MagicMock()
        fake_do_write = MagicMock()
        stream = io.Stream(fake_fd)
        stream.do_write = fake_do_write

        bytes_written = stream.write(data)
        expected = 0

        self.assertEqual(bytes_written, expected)
Esempio n. 20
0
    def test_do_write_closes(self):
        """``dockerpty.io`` Stream.do_write closes when requested after writing"""
        fake_fd = MagicMock()
        fake_fd.send.return_value = 3
        fake_close = MagicMock()
        stream = io.Stream(fake_fd)
        stream.close = fake_close
        stream.close_requested = True

        stream.do_write()

        self.assertTrue(fake_close.called)
Esempio n. 21
0
 def attach_socket(key):
     if info['Config']['Attach{0}'.format(key.capitalize())]:
         socket = self.client.attach_socket(
             self.container,
             {
                 key: 1,
                 'stream': 1,
                 'logs': self.logs
             },
         )
         stream = io.Stream(socket)
         #pylint: disable=R1705
         if info['Config']['Tty']:
             return stream
         else:
             return io.Demuxer(stream)
     else:
         return None
Esempio n. 22
0
    def test_init(self):
        """``dockerpty.io`` the Stream object only requires a file descriptor"""
        fake_fd = MagicMock()
        stream = io.Stream(fake_fd)

        self.assertTrue(isinstance(stream, io.Stream))
Esempio n. 23
0
    def test_needs_write_false(self):
        """``dockerpty.io`` Stream.needs_write Returns False when buffer is empty"""
        fake_fd = MagicMock()
        stream = io.Stream(fake_fd)

        self.assertFalse(stream.needs_write())