def test_request_transport_integration(): handler = ReadOnlySchedulerHandler() processor = ReadOnlyScheduler.Processor(handler) pfactory = TJSONProtocol.TJSONProtocolFactory() server = THttpServer.THttpServer(processor, ('localhost', 0), pfactory) server_thread = Thread(target=server.serve) server_thread.start() _, server_port = server.httpd.socket.getsockname() response = None try: transport = TRequestsTransport('http://localhost:%d' % server_port) protocol = TJSONProtocol.TJSONProtocol(transport) client = ReadOnlyScheduler.Client(protocol) response = client.getRoleSummary() finally: server.httpd.shutdown() assert response is not None assert response.responseCode == ResponseCode.OK assert response.serverInfo.clusterName == 'west' assert response.serverInfo.thriftAPIVersion == 3 transport.close()
def test_request_any_other_exception(): session = create_autospec(spec=requests.Session, instance=True) session.headers = {} session.post = Mock(side_effect=request_exceptions.ConnectionError()) transport = TRequestsTransport('http://localhost:12345', session_factory=lambda: session) protocol = TJSONProtocol.TJSONProtocol(transport) client = ReadOnlyScheduler.Client(protocol) with pytest.raises(TTransport.TTransportException): client.getRoleSummary() transport.close()
def test_requests_transport_session_reuse(): handler = ReadOnlySchedulerHandler() processor = ReadOnlyScheduler.Processor(handler) pfactory = TBinaryProtocol.TBinaryProtocolAcceleratedFactory() server = THttpServer.THttpServer(processor, ('localhost', 0), pfactory) server_thread = Thread(target=server.serve) server_thread.start() _, server_port = server.httpd.socket.getsockname() try: transport = TRequestsTransport('http://localhost:%d' % server_port) protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport) client = ReadOnlyScheduler.Client(protocol) client.getRoleSummary() old_session = transport._session client.getRoleSummary() finally: server.httpd.shutdown() assert old_session == transport._session transport.close()
def test_request_transport_timeout(): session = create_autospec(spec=requests.Session, instance=True) session.headers = {} session.post = Mock(side_effect=request_exceptions.Timeout()) transport = TRequestsTransport('http://localhost:12345', session_factory=lambda: session) protocol = TJSONProtocol.TJSONProtocol(transport) client = ReadOnlyScheduler.Client(protocol) with pytest.raises(TTransport.TTransportException) as execinfo: client.getRoleSummary() assert execinfo.value.message == 'Timed out talking to http://localhost:12345' transport.close()
def test_raises_auth_error(): response = requests.Response() response.status_code = 401 session = create_autospec(spec=requests.Session, instance=True) session.headers = {} session.post.return_value = response transport = TRequestsTransport('http://localhost:12345', session_factory=lambda: session) protocol = TJSONProtocol.TJSONProtocol(transport) client = ReadOnlyScheduler.Client(protocol) with pytest.raises(TRequestsTransport.AuthError): client.getRoleSummary() transport.close()
def test_request_any_other_exception(): session = mock.MagicMock(spec=requests.Session) session.headers = {} session.post = mock.Mock(side_effect=request_exceptions.ConnectionError()) transport = TRequestsTransport('http://localhost:12345', session_factory=lambda: session) protocol = TJSONProtocol.TJSONProtocol(transport) client = ReadOnlyScheduler.Client(protocol) try: client.getRoleSummary() assert False, 'getRoleSummary should not succeed' except TTransport.TTransportException: pass except Exception as e: assert False, 'Only expected TTransportException, got %s' % e transport.close()
def test_raise_for_status_causes_exception(): response = requests.Response() response.status_code = 503 session = create_autospec(spec=requests.Session, instance=True) session.headers = {} session.post.return_value = response transport = TRequestsTransport('http://localhost:12345', session_factory=lambda: session) protocol = TJSONProtocol.TJSONProtocol(transport) client = ReadOnlyScheduler.Client(protocol) with pytest.raises(TTransport.TTransportException) as excinfo: client.getRoleSummary() assert excinfo.value.type == TTransport.TTransportException.UNKNOWN assert excinfo.value.message.startswith('Unknown error talking to http://localhost:12345') transport.close()
def test_auth_type_valid(): response = requests.Response() response.status_code = 500 session = create_autospec(spec=requests.Session, instance=True) session.headers = {} session.post.return_value = response auth = requests.auth.AuthBase() transport = TRequestsTransport('http://localhost:1', auth=auth, session_factory=lambda: session) protocol = TJSONProtocol.TJSONProtocol(transport) client = ReadOnlyScheduler.Client(protocol) with pytest.raises(TTransport.TTransportException): client.getRoleSummary() transport.close() session.post.mock_calls = (call(ANY, data=ANY, timeout=ANY, auth=auth))