示例#1
0
class TestRecvBufferedSocket(unittest.TestCase):
    def setUp(self):
        self.chunk_size = 512
        self.mock_socket = mock.Mock()
        self.client_sock, self.server_sock = socket.socketpair()
        self.buf_sock = RecvBufferedSocket(self.client_sock,
                                           chunk_size=self.chunk_size)
        self.mocked_buf_sock = RecvBufferedSocket(self.mock_socket,
                                                  chunk_size=self.chunk_size)

    def tearDown(self):
        self.buf_sock.close()
        self.server_sock.close()

    def test_getattr(self):
        self.assertTrue(inspect.ismethod(self.buf_sock.recv))
        self.assertFalse(inspect.isbuiltin(self.buf_sock.recv))
        self.assertTrue(inspect.isbuiltin(self.buf_sock.connect))

    def test_recv(self):
        self.server_sock.sendall(b'A' * 300)
        self.assertEqual(self.buf_sock.recv(1), b'A')
        self.assertEqual(self.buf_sock.recv(200), b'A' * 200)
        self.assertEqual(self.buf_sock.recv(99), b'A' * 99)

    def test_recv_max_larger_than_buf(self):
        double_chunk = self.chunk_size * 2
        self.server_sock.sendall(b'A' * double_chunk)
        self.assertEqual(self.buf_sock.recv(double_chunk), b'A' * double_chunk)

    @mock.patch('selectors.DefaultSelector' if PY3 else 'select.select',
                **PATCH_OPTS)
    def test_recv_check_calls(self, mock_selector):
        if PY3:
            mock_selector = mock_selector.return_value.__enter__.return_value
            mock_selector.register = mock.Mock()
            # NB: the return value should actually be List[Tuple[SelectorKey, Events]], but our code only
            # cares that _some_ event happened so we choose a simpler mock here. See
            # https://docs.python.org/3/library/selectors.html#selectors.BaseSelector.select.
            mock_selector.select = mock.Mock(return_value=[(1, "")])
        else:
            mock_selector.return_value = ([1], [], [])

        self.mock_socket.recv.side_effect = [
            b'A' * self.chunk_size, b'B' * self.chunk_size
        ]

        self.assertEqual(self.mocked_buf_sock.recv(128), b'A' * 128)
        self.mock_socket.recv.assert_called_once_with(self.chunk_size)
        self.assertEqual(self.mocked_buf_sock.recv(128), b'A' * 128)
        self.assertEqual(self.mocked_buf_sock.recv(128), b'A' * 128)
        self.assertEqual(self.mocked_buf_sock.recv(128), b'A' * 128)
        self.assertEqual(self.mock_socket.recv.call_count, 1)

        self.assertEqual(self.mocked_buf_sock.recv(self.chunk_size),
                         b'B' * self.chunk_size)
        self.assertEqual(self.mock_socket.recv.call_count, 2)
示例#2
0
class TestRecvBufferedSocket(unittest.TestCase):
    def setUp(self):
        self.chunk_size = 512
        self.mock_socket = mock.Mock()
        self.client_sock, self.server_sock = socket.socketpair()
        self.buf_sock = RecvBufferedSocket(self.client_sock,
                                           chunk_size=self.chunk_size)
        self.mocked_buf_sock = RecvBufferedSocket(self.mock_socket,
                                                  chunk_size=self.chunk_size)

    def tearDown(self):
        self.buf_sock.close()
        self.server_sock.close()

    def test_getattr(self):
        self.assertTrue(inspect.ismethod(self.buf_sock.recv))
        self.assertFalse(inspect.isbuiltin(self.buf_sock.recv))
        self.assertTrue(inspect.isbuiltin(self.buf_sock.connect))

    def test_recv(self):
        self.server_sock.sendall(b'A' * 300)
        self.assertEquals(self.buf_sock.recv(1), b'A')
        self.assertEquals(self.buf_sock.recv(200), b'A' * 200)
        self.assertEquals(self.buf_sock.recv(99), b'A' * 99)

    def test_recv_max_larger_than_buf(self):
        double_chunk = self.chunk_size * 2
        self.server_sock.sendall(b'A' * double_chunk)
        self.assertEquals(self.buf_sock.recv(double_chunk),
                          b'A' * double_chunk)

    @mock.patch('pants.util.socket.select.select', **PATCH_OPTS)
    def test_recv_check_calls(self, mock_select):
        mock_select.return_value = ([1], [], [])
        self.mock_socket.recv.side_effect = [
            b'A' * self.chunk_size, b'B' * self.chunk_size
        ]

        self.assertEquals(self.mocked_buf_sock.recv(128), b'A' * 128)
        self.mock_socket.recv.assert_called_once_with(self.chunk_size)
        self.assertEquals(self.mocked_buf_sock.recv(128), b'A' * 128)
        self.assertEquals(self.mocked_buf_sock.recv(128), b'A' * 128)
        self.assertEquals(self.mocked_buf_sock.recv(128), b'A' * 128)
        self.assertEquals(self.mock_socket.recv.call_count, 1)

        self.assertEquals(self.mocked_buf_sock.recv(self.chunk_size),
                          b'B' * self.chunk_size)
        self.assertEquals(self.mock_socket.recv.call_count, 2)
示例#3
0
class TestRecvBufferedSocket(unittest.TestCase):
  def setUp(self):
    self.chunk_size = 512
    self.mock_socket = mock.Mock()
    self.client_sock, self.server_sock = socket.socketpair()
    self.buf_sock = RecvBufferedSocket(self.client_sock, chunk_size=self.chunk_size)
    self.mocked_buf_sock = RecvBufferedSocket(self.mock_socket, chunk_size=self.chunk_size)

  def tearDown(self):
    self.buf_sock.close()
    self.server_sock.close()

  def test_getattr(self):
    self.assertTrue(inspect.ismethod(self.buf_sock.recv))
    self.assertFalse(inspect.isbuiltin(self.buf_sock.recv))
    self.assertTrue(inspect.isbuiltin(self.buf_sock.connect))

  def test_recv(self):
    self.server_sock.sendall(b'A' * 300)
    self.assertEquals(self.buf_sock.recv(1), b'A')
    self.assertEquals(self.buf_sock.recv(200), b'A' * 200)
    self.assertEquals(self.buf_sock.recv(99), b'A' * 99)

  def test_recv_max_larger_than_buf(self):
    double_chunk = self.chunk_size * 2
    self.server_sock.sendall(b'A' * double_chunk)
    self.assertEquals(self.buf_sock.recv(double_chunk), b'A' * double_chunk)

  @mock.patch('pants.util.socket.select.select', **PATCH_OPTS)
  def test_recv_check_calls(self, mock_select):
    mock_select.return_value = ([1], [], [])
    self.mock_socket.recv.side_effect = [b'A' * self.chunk_size, b'B' * self.chunk_size]

    self.assertEquals(self.mocked_buf_sock.recv(128), b'A' * 128)
    self.mock_socket.recv.assert_called_once_with(self.chunk_size)
    self.assertEquals(self.mocked_buf_sock.recv(128), b'A' * 128)
    self.assertEquals(self.mocked_buf_sock.recv(128), b'A' * 128)
    self.assertEquals(self.mocked_buf_sock.recv(128), b'A' * 128)
    self.assertEquals(self.mock_socket.recv.call_count, 1)

    self.assertEquals(self.mocked_buf_sock.recv(self.chunk_size), b'B' * self.chunk_size)
    self.assertEquals(self.mock_socket.recv.call_count, 2)