Ejemplo n.º 1
0
 def test_eexist_on_register(self):
     # EEXIST is supposed to be ignored
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         m.return_value.register.side_effect = \
             EnvironmentError(errno.EEXIST, "")
         s, rd, wr = self.test_register()
     # ...but just that
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         m.return_value.register.side_effect = \
             EnvironmentError(errno.EBADF, "")
         self.assertRaises(EnvironmentError, self.test_register)
Ejemplo n.º 2
0
 def test_eexist_on_register(self):
     # EEXIST is supposed to be ignored
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         m.return_value.register.side_effect = \
             EnvironmentError(errno.EEXIST, "")
         s, rd, wr = self.test_register()
     # ...but just that
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         m.return_value.register.side_effect = \
             EnvironmentError(errno.EBADF, "")
         self.assertRaises(EnvironmentError, self.test_register)
Ejemplo n.º 3
0
 def test_select_eintr(self):
     # EINTR is supposed to be ignored
     with mock.patch('pyftpdlib.ioloop.select.select',
                     side_effect=select.error()) as m:
         m.side_effect.errno = errno.EINTR
         s, rd, wr = self.test_register()
         s.poll(0)
     # ...but just that
     with mock.patch('pyftpdlib.ioloop.select.select',
                     side_effect=select.error()) as m:
         m.side_effect.errno = errno.EBADF
         s, rd, wr = self.test_register()
         self.assertRaises(select.error, s.poll, 0)
Ejemplo n.º 4
0
 def test_close_w_callback_exc(self):
     # Simulate an exception when close()ing the IO loop and a
     # scheduled callback raises an exception on cancel().
     with mock.patch("pyftpdlib.ioloop.logger.error") as logerr:
         with mock.patch("pyftpdlib.ioloop._CallLater.cancel",
                         side_effect=lambda: 1 / 0) as cancel:
             s = self.ioloop_class()
             self.addCleanup(s.close)
             s.call_later(1, lambda: 0)
             s.close()
             assert cancel.called
             assert logerr.called
             self.assertIn('ZeroDivisionError', logerr.call_args[0][0])
Ejemplo n.º 5
0
 def test_select_eintr(self):
     # EINTR is supposed to be ignored
     with mock.patch('pyftpdlib.ioloop.select.select',
                     side_effect=select.error()) as m:
         m.side_effect.errno = errno.EINTR
         s, rd, wr = self.test_register()
         s.poll(0)
     # ...but just that
     with mock.patch('pyftpdlib.ioloop.select.select',
                     side_effect=select.error()) as m:
         m.side_effect.errno = errno.EBADF
         s, rd, wr = self.test_register()
         self.assertRaises(select.error, s.poll, 0)
Ejemplo n.º 6
0
 def test_close_w_callback_exc(self):
     # Simulate an exception when close()ing the IO loop and a
     # scheduled callback raises an exception on cancel().
     with mock.patch("pyftpdlib.ioloop.logger.error") as logerr:
         with mock.patch("pyftpdlib.ioloop._CallLater.cancel",
                         side_effect=lambda: 1 / 0) as cancel:
             s = self.ioloop_class()
             self.addCleanup(s.close)
             s.call_later(1, lambda: 0)
             s.close()
             assert cancel.called
             assert logerr.called
             self.assertIn('ZeroDivisionError', logerr.call_args[0][0])
Ejemplo n.º 7
0
 def test_enoent_ebadf_on_unregister(self):
     # ENOENT and EBADF are supposed to be ignored
     for errnum in (errno.EBADF, errno.ENOENT):
         with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
             m.return_value.unregister.side_effect = \
                 EnvironmentError(errnum, "")
             s, rd, wr = self.test_register()
             s.unregister(rd)
     # ...but just those
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         m.return_value.unregister.side_effect = \
             EnvironmentError(errno.EEXIST, "")
         s, rd, wr = self.test_register()
         self.assertRaises(EnvironmentError, s.unregister, rd)
Ejemplo n.º 8
0
 def test_enoent_ebadf_on_unregister(self):
     # ENOENT and EBADF are supposed to be ignored
     for errnum in (errno.EBADF, errno.ENOENT):
         with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
             m.return_value.unregister.side_effect = \
                 EnvironmentError(errnum, "")
             s, rd, wr = self.test_register()
             s.unregister(rd)
     # ...but just those
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         m.return_value.unregister.side_effect = \
             EnvironmentError(errno.EEXIST, "")
         s, rd, wr = self.test_register()
         self.assertRaises(EnvironmentError, s.unregister, rd)
Ejemplo n.º 9
0
 def test_enoent_on_modify(self):
     # ENOENT is supposed to be ignored
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         m.return_value.modify.side_effect = \
             OSError(errno.ENOENT, "")
         s, rd, wr = self.test_register()
         s.modify(rd, s.READ)
Ejemplo n.º 10
0
 def test_send_retry(self):
     ac = self.get_connected_handler()
     for errnum in pyftpdlib.ioloop._ERRNOS_RETRY:
         with mock.patch("pyftpdlib.ioloop.socket.socket.send",
                         side_effect=socket.error(errnum, "")) as m:
             self.assertEqual(ac.send(b"x"), 0)
             assert m.called
Ejemplo n.º 11
0
 def test_recv_retry(self):
     ac = self.get_connected_handler()
     for errnum in pyftpdlib.ioloop._ERRNOS_RETRY:
         with mock.patch("pyftpdlib.ioloop.socket.socket.recv",
                         side_effect=socket.error(errnum, "")) as m:
             self.assertRaises(RetryError, ac.recv, 1024)
             assert m.called
Ejemplo n.º 12
0
 def test_send_retry(self):
     ac = self.get_connected_handler()
     for errnum in pyftpdlib.ioloop._ERRNOS_RETRY:
         with mock.patch("pyftpdlib.ioloop.socket.socket.send",
                         side_effect=socket.error(errnum, "")) as m:
             self.assertEqual(ac.send(b"x"), 0)
             assert m.called
Ejemplo n.º 13
0
 def test_enoent_on_modify(self):
     # ENOENT is supposed to be ignored
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         m.return_value.modify.side_effect = \
             OSError(errno.ENOENT, "")
         s, rd, wr = self.test_register()
         s.modify(rd, s.READ)
Ejemplo n.º 14
0
 def test_recv_retry(self):
     ac = self.get_connected_handler()
     for errnum in pyftpdlib.ioloop._ERRNOS_RETRY:
         with mock.patch("pyftpdlib.ioloop.socket.socket.recv",
                         side_effect=socket.error(errnum, "")) as m:
             self.assertRaises(RetryError, ac.recv, 1024)
             assert m.called
Ejemplo n.º 15
0
 def test_recv_disconnect(self):
     ac = self.get_connected_handler()
     for errnum in pyftpdlib.ioloop._ERRNOS_DISCONNECTED:
         with mock.patch("pyftpdlib.ioloop.socket.socket.recv",
                         side_effect=socket.error(errnum, "")) as send:
             with mock.patch.object(ac, "handle_close") as handle_close:
                 self.assertEqual(ac.recv(b"x"), b'')
                 assert send.called
                 assert handle_close.called
Ejemplo n.º 16
0
 def test_recv_disconnect(self):
     ac = self.get_connected_handler()
     for errnum in pyftpdlib.ioloop._ERRNOS_DISCONNECTED:
         with mock.patch("pyftpdlib.ioloop.socket.socket.recv",
                         side_effect=socket.error(errnum, "")) as send:
             with mock.patch.object(ac, "handle_close") as handle_close:
                 self.assertEqual(ac.recv(b"x"), b'')
                 assert send.called
                 assert handle_close.called
Ejemplo n.º 17
0
    def test_D_option(self):
        with mock.patch('pyftpdlib.__main__.config_logging') as fun:
            sys.argv += ["-D", "-p 0"]
            pyftpdlib.__main__.main()
            fun.assert_called_once_with(level=logging.DEBUG)

        # unexpected argument
        sys.argv = self.SYSARGV[:]
        sys.argv += ["-V foo"]
        sys.stderr = self.devnull
        self.assertRaises(SystemExit, pyftpdlib.__main__.main)
Ejemplo n.º 18
0
 def test_eintr_on_poll(self):
     # EINTR is supposed to be ignored
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         if not PY3:
             m.return_value.poll.side_effect = select.error
             m.return_value.poll.side_effect.errno = errno.EINTR
         else:
             m.return_value.poll.side_effect = OSError(errno.EINTR, "")
         s, rd, wr = self.test_register()
         s.poll(0)
         assert m.called
     # ...but just that
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         if not PY3:
             m.return_value.poll.side_effect = select.error
             m.return_value.poll.side_effect.errno = errno.EBADF
         else:
             m.return_value.poll.side_effect = OSError(errno.EBADF, "")
         s, rd, wr = self.test_register()
         self.assertRaises(select.error, s.poll, 0)
         assert m.called
Ejemplo n.º 19
0
 def test_eintr_on_poll(self):
     # EINTR is supposed to be ignored
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         if not PY3:
             m.return_value.poll.side_effect = select.error
             m.return_value.poll.side_effect.errno = errno.EINTR
         else:
             m.return_value.poll.side_effect = OSError(errno.EINTR, "")
         s, rd, wr = self.test_register()
         s.poll(0)
         assert m.called
     # ...but just that
     with mock.patch(self.poller_mock, return_vaue=mock.Mock()) as m:
         if not PY3:
             m.return_value.poll.side_effect = select.error
             m.return_value.poll.side_effect.errno = errno.EBADF
         else:
             m.return_value.poll.side_effect = OSError(errno.EBADF, "")
         s, rd, wr = self.test_register()
         self.assertRaises(select.error, s.poll, 0)
         assert m.called
Ejemplo n.º 20
0
    def test_close_w_handler_ebadf_exc(self):
        # Simulate an exception when close()ing a socket handler.
        # Exception should be ignored (and not logged).
        class Handler(AsyncChat):
            def close(self):
                raise OSError(errno.EBADF, "")

        s = self.ioloop_class()
        self.addCleanup(s.close)
        rd, wr = self.make_socketpair()
        handler = Handler(rd)
        s.register(rd, handler, s.READ)
        with mock.patch("pyftpdlib.ioloop.logger.error") as m:
            s.close()
            assert not m.called
Ejemplo n.º 21
0
    def test_close_w_handler_ebadf_exc(self):
        # Simulate an exception when close()ing a socket handler.
        # Exception should be ignored (and not logged).
        class Handler(AsyncChat):
            def close(self):
                raise OSError(errno.EBADF, "")

        s = self.ioloop_class()
        self.addCleanup(s.close)
        rd, wr = self.make_socketpair()
        handler = Handler(rd)
        s.register(rd, handler, s.READ)
        with mock.patch("pyftpdlib.ioloop.logger.error") as m:
            s.close()
            assert not m.called
Ejemplo n.º 22
0
    def test_close_w_handler_exc(self):
        # Simulate an exception when close()ing a socket handler.
        # Exception should be logged and ignored.
        class Handler(AsyncChat):
            def close(self):
                1 / 0

        s = self.ioloop_class()
        self.addCleanup(s.close)
        rd, wr = self.make_socketpair()
        handler = Handler(rd)
        s.register(rd, handler, s.READ)
        with mock.patch("pyftpdlib.ioloop.logger.error") as m:
            s.close()
            assert m.called
            self.assertIn('ZeroDivisionError', m.call_args[0][0])
Ejemplo n.º 23
0
    def test_close_w_handler_exc(self):
        # Simulate an exception when close()ing a socket handler.
        # Exception should be logged and ignored.
        class Handler(AsyncChat):
            def close(self):
                1 / 0

        s = self.ioloop_class()
        self.addCleanup(s.close)
        rd, wr = self.make_socketpair()
        handler = Handler(rd)
        s.register(rd, handler, s.READ)
        with mock.patch("pyftpdlib.ioloop.logger.error") as m:
            s.close()
            assert m.called
            self.assertIn('ZeroDivisionError', m.call_args[0][0])