def test_auth_endpoint_validation(post, get_endpoint, auth_response):
    post.return_value = MagicMock(json=MagicMock(return_value=auth_response))

    assert Lava('username', 'region', api_key='apikey',
                endpoint='v2/tenant').endpoint == 'v2/tenant'
    assert Lava('username',
                'region',
                api_key='apikey',
                endpoint='v2',
                tenant_id='tenant').endpoint == 'v2/tenant'
    assert Lava('username',
                'region',
                api_key='apikey',
                endpoint='v2/tenant',
                tenant_id='tenant').endpoint == 'v2/tenant'

    pytest.raises(error.InvalidError,
                  Lava,
                  'username',
                  'region',
                  api_key='apikey',
                  endpoint='foo')
    pytest.raises(error.InvalidError,
                  Lava,
                  'username',
                  'region',
                  api_key='apikey',
                  endpoint='foo',
                  tenant_id='tenant')
Beispiel #2
0
def mock_client(request):
    client = Lava(
        'username',
        endpoint='http://dfw.bigdata.api.rackspacecloud.com/v2',
        token='token',
        tenant_id=12345,
        _cli_args=Mock(headless=True))

    client._request = MagicMock()

    def init_logging(*args):
        initialize_logging(MagicMock(debug=True))

    def exit(*args):
        raise Exits(args)

    patchers = [
        patch('lavaclient.cli.initialize_logging', init_logging),
        patch('sys.exit', exit),
        patch('lavaclient.cli.create_client',
              MagicMock(return_value=client)),
    ]

    for patcher in patchers:
        patcher.start()
        request.addfinalizer(patcher.stop)

    return client
Beispiel #3
0
def mock_client(request):
    client = Lava(
        'username',
        endpoint='http://dfw.bigdata.api.rackspacecloud.com/v2',
        token='token',
        tenant_id=12345,
        _cli_args=Mock(headless=True))

    client._request = MagicMock()

    def init_logging(*args):
        initialize_logging(MagicMock(debug=True))

    def exit(*args):
        raise Exits(args)

    patchers = [
        patch('lavaclient.cli.initialize_logging', init_logging),
        patch('sys.exit', exit),
        patch('lavaclient.cli.create_client',
              MagicMock(return_value=client)),
    ]

    for patcher in patchers:
        patcher.start()
        request.addfinalizer(patcher.stop)

    return client
def test_auth_client(post, auth_response):
    post.return_value = MagicMock(json=MagicMock(return_value=auth_response))
    client = Lava('username', 'region', api_key='apikey', tenant_id='tenantId')

    assert post.call_count == 1
    assert client.token == 'ab48a9efdfedb23ty3494'
    assert client.endpoint == 'publicURL/v2/tenantId'
def create_client(args):
    """
    Create instance of Lava from CLI args
    """
    resource = args.resource
    if resource == 'shell':
        args.enable_cli = False

    apikey = first_exists(args.lava_api_key, os.environ.get('LAVA_API_KEY'),
                          os.environ.get('OS_API_KEY'))
    token = first_exists(args.token, os.environ.get('LAVA_AUTH_TOKEN'),
                         os.environ.get('AUTH_TOKEN'))
    user = first_exists(args.user, os.environ.get('LAVA_USERNAME'),
                        os.environ.get('OS_USERNAME'), getpass.getuser())
    password = first_exists(args.password, os.environ.get('LAVA_PASSWORD'),
                            os.environ.get('OS_PASSWORD'))

    if not any((apikey, token, password)):
        if args.headless:
            six.print_('Error: no API key, token, or password specified',
                       file=sys.stderr)
            sys.exit(1)
        else:
            password = getpass.getpass('Password for {0}: '.format(user))

    try:
        return Lava(user,
                    api_key=apikey,
                    token=token,
                    password=password,
                    tenant_id=first_exists(args.tenant,
                                           os.environ.get('LAVA_TENANT_NAME'),
                                           os.environ.get('OS_TENANT_NAME')),
                    region=first_exists(args.region,
                                        os.environ.get('LAVA_REGION_NAME'),
                                        os.environ.get('OS_REGION_NAME')),
                    auth_url=first_exists(args.auth_url,
                                          os.environ.get('LAVA_AUTH_URL'),
                                          os.environ.get('OS_AUTH_URL')),
                    endpoint=first_exists(args.endpoint,
                                          os.environ.get('LAVA2_API_URL'),
                                          os.environ.get('LAVA_API_URL')),
                    verify_ssl=args.verify_ssl,
                    timeout=first_exists(args.request_timeout,
                                         os.environ.get('LAVA_TIMEOUT')),
                    max_retries=first_exists(args.retries,
                                             os.environ.get('LAVA_RETRIES')),
                    retry_backoff=first_exists(
                        args.retry_backoff,
                        os.environ.get('LAVA_RETRY_BACKOFF')),
                    _cli_args=args)
    except LavaError as exc:
        six.print_('Error during authentication: {0}'.format(exc),
                   file=sys.stderr)
        if args.debug:
            raise

        sys.exit(1)
def test_auth_endpoint(post, get_endpoint, auth_response):
    post.return_value = MagicMock(json=MagicMock(return_value=auth_response))

    client1 = Lava('username',
                   'region',
                   api_key='apikey',
                   endpoint='v2/tenant')

    assert get_endpoint.call_count == 0
    assert post.call_count == 1
    assert client1.token == 'ab48a9efdfedb23ty3494'
    assert client1.endpoint == 'v2/tenant'
Beispiel #7
0
 def _create(self):
     """Create an authenticated CBD client."""
     region = cfg.CONF.region_name_for_services.lower()
     if self.context.region_name:
         region = self.context.region_name.lower()
     LOG.info(_LI("CBD client authenticating username %s in region %s"),
              self.context.username, region)
     tenant = self.context.tenant_id
     username = self.context.username
     endpoint_uri = ("https://{region}.bigdata.api.rackspacecloud.com:443/"
                     "v2/{tenant}".format(region=region, tenant=tenant))
     try:
         return Lava(username=username,
                     tenant_id=self.context.tenant_id,
                     auth_url=self.context.auth_url,
                     api_key=None,
                     token=self.context.auth_token,
                     region=region,
                     endpoint=endpoint_uri,
                     verify_ssl=False)
     except LavaError as exc:
         LOG.warn(_LW("CBD client authentication failed: %s."), exc)
         raise exception.AuthorizationFailure()
     LOG.info(_LI("CBD user %s authenticated successfully."), username)