Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
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()
Ejemplo n.º 8
0
 def test_raise_auth_error(self):
     self.mock_thrift_client.killTasks(TaskQuery(), None, None,
                                       SESSION).AndRaise(
                                           TRequestsTransport.AuthError())
     self.mox.ReplayAll()
     with pytest.raises(scheduler_client.SchedulerProxy.AuthError):
         self.make_scheduler_proxy().killTasks(TaskQuery(), None, None)
Ejemplo n.º 9
0
 def test_raise_auth_error(self):
   self.mock_thrift_client.killTasks(TaskQuery(), None, None).AndRaise(
       TRequestsTransport.AuthError())
   self.mock_scheduler_client.get_failed_auth_message().AndReturn('failed auth')
   self.mox.ReplayAll()
   with pytest.raises(scheduler_client.SchedulerProxy.AuthError):
     self.make_scheduler_proxy().killTasks(TaskQuery(), None, None)
Ejemplo n.º 10
0
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()
Ejemplo n.º 11
0
 def _connect_scheduler(self, uri, clock=time):
   transport = TRequestsTransport(uri, user_agent=self._user_agent)
   protocol = TJSONProtocol.TJSONProtocol(transport)
   schedulerClient = AuroraAdmin.Client(protocol)
   for _ in range(self.THRIFT_RETRIES):
     try:
       transport.open()
       return schedulerClient
     except TTransport.TTransportException:
       clock.sleep(self.RETRY_TIMEOUT.as_(Time.SECONDS))
       continue
     except Exception as e:
       # Monkey-patched proxies, like socks, can generate a proxy error here.
       # without adding a dependency, we can't catch those in a more specific way.
       raise self.CouldNotConnect('Connection to scheduler failed: %s' % e)
   raise self.CouldNotConnect('Could not connect to %s' % uri)
Ejemplo n.º 12
0
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)

  try:
    client.getRoleSummary()
    assert False, 'getRoleSummary should not succeed'
  except TTransport.TTransportException as e:
    assert e.message == 'Timed out talking to http://localhost:12345'
  except Exception as e:
    assert False, 'Only expected TTransportException, got %s' % e

  transport.close()
Ejemplo n.º 13
0
def test_requests_transports_lowers_logging_level():
    logging.getLogger('requests').setLevel(logging.NOTSET)

    TRequestsTransport('http://localhost:12345',
                       session_factory=lambda x: create_autospec(
                           spec=requests.Session, instance=True))

    assert logging.getLogger('requests').level == logging.WARNING
Ejemplo n.º 14
0
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()
Ejemplo n.º 15
0
 def _connect_scheduler(cls, uri, clock=time):
     transport = TRequestsTransport(uri)
     protocol = TJSONProtocol.TJSONProtocol(transport)
     schedulerClient = AuroraAdmin.Client(protocol)
     for _ in range(cls.THRIFT_RETRIES):
         try:
             transport.open()
             return schedulerClient
         except TTransport.TTransportException:
             clock.sleep(cls.RETRY_TIMEOUT.as_(Time.SECONDS))
             continue
         except Exception as e:
             # Monkey-patched proxies, like socks, can generate a proxy error here.
             # without adding a dependency, we can't catch those in a more specific way.
             raise cls.CouldNotConnect(
                 'Connection to scheduler failed: %s' % e)
     raise cls.CouldNotConnect('Could not connect to %s' % uri)
Ejemplo n.º 16
0
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()
Ejemplo n.º 17
0
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()
Ejemplo n.º 18
0
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()
Ejemplo n.º 19
0
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))
Ejemplo n.º 20
0
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))
Ejemplo n.º 21
0
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()
Ejemplo n.º 22
0
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()
Ejemplo n.º 23
0
  def _connect_scheduler(self, uri, clock=time):
    transport = TRequestsTransport(
        uri,
        auth=self._auth_handler.auth(),
        user_agent=self._user_agent,
        session_factory=functools.partial(
            _bypass_leader_redirect_session_factory,
            should_bypass=self._bypass_leader_redirect))

    protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport)
    schedulerClient = AuroraAdmin.Client(protocol)
    for _ in range(self.THRIFT_RETRIES):
      try:
        transport.open()
        return schedulerClient
      except TTransport.TTransportException:
        clock.sleep(self.RETRY_TIMEOUT.as_(Time.SECONDS))
        continue
      except Exception as e:
        # Monkey-patched proxies, like socks, can generate a proxy error here.
        # without adding a dependency, we can't catch those in a more specific way.
        raise self.CouldNotConnect('Connection to scheduler failed: %s' % e)
    raise self.CouldNotConnect('Could not connect to %s' % uri)
Ejemplo n.º 24
0
def test_auth_type_invalid():
    with pytest.raises(TypeError) as e:
        TRequestsTransport('http://localhost:1', auth="auth")
    assert e.value.message == 'Invalid auth type. Expected: AuthBase but got str'
Ejemplo n.º 25
0
def test_transport_applies_user_agent_from_factory():
    user_agent = 'Some-User-Agent'
    transport = TRequestsTransport('http://localhost:12345',
                                   user_agent=user_agent)
    transport.open()
    assert transport._session.headers['User-Agent'] == user_agent
Ejemplo n.º 26
0
def test_transport_applies_default_user_agent_if_no_factory_provided():
    transport = TRequestsTransport('http://localhost:12345')
    transport.open()
    assert transport._session.headers['User-Agent'] == DEFAULT_USER_AGENT
Ejemplo n.º 27
0
def test_transport_applies_user_agent_from_factory():
  user_agent = 'Some-User-Agent'
  transport = TRequestsTransport('http://localhost:12345', user_agent=user_agent)
  transport.open()
  assert transport._session.headers['User-Agent'] == user_agent
Ejemplo n.º 28
0
def test_transport_applies_default_user_agent_if_no_factory_provided():
  transport = TRequestsTransport('http://localhost:12345')
  transport.open()
  assert transport._session.headers['User-Agent'] == DEFAULT_USER_AGENT