def test_isOpen_checks_for_readability(self): # https://docs.python.org/3/library/socket.html#notes-on-socket-timeouts # https://docs.python.org/3/library/socket.html#socket.socket.settimeout timeouts = [ None, # blocking mode 0, # non-blocking mode 1.0, # timeout mode ] for timeout in timeouts: acc = ServerAcceptor(TServerSocket(port=0)) acc.start() sock = TSocket(host="localhost", port=acc.port) self.assertFalse(sock.isOpen()) sock.open() sock.setTimeout(timeout) # the socket shows as open immediately after connecting self.assertTrue(sock.isOpen()) # and remains open during usage sock.write(b"hello") self.assertTrue(sock.isOpen()) while True: try: sock.read(5) except TTransportException as exc: if exc.inner.errno == errno.EAGAIN: # try again when we're in non-blocking mode continue raise break self.assertTrue(sock.isOpen()) # once the server side closes, it no longer shows open acc.client.close( ) # this also blocks until the other thread is done acc.close() self.assertFalse(sock.isOpen()) sock.close()
def test_it_works(self): processor_factory = mock.Mock() mock_processor = mock.Mock() processor_factory.get_processor.return_value = mock_processor proto_factory = FProtocolFactory(TJSONProtocolFactory()) server_trans = TServerSocket(host='localhost', port=5536) server = FSimpleServer(processor_factory, server_trans, proto_factory) thread = Thread(target=lambda: server.serve()) thread.start() time.sleep(0.1) transport = TSocket(host='localhost', port=5536) transport.open() transport.write(bytearray([0, 0, 0, 3, 1, 2, 3])) transport.flush() time.sleep(0.1) server.stop() processor_factory.get_processor.assert_called_once_with(mock.ANY) mock_processor.process.assert_called_with(mock.ANY, mock.ANY)