Use os-client-config[1] to process options and get the Session from keystoneauth1. This adds support for reading clouds.yaml files and supporting the OS_CLOUD env var for selecting named clouds from a list of them. [1]: https://github.com/openstack/os-client-config Closes-Bug: #1599747 Change-Id: I23a6e80648e67c0b652693cd146bd9e94ad4fb23
226 lines
8.5 KiB
Python
226 lines
8.5 KiB
Python
# Copyright (c) 2015 Thales Services SAS
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import mock
|
|
import testtools
|
|
|
|
from keystoneauth1.exceptions import catalog
|
|
|
|
from magnumclient.v1 import client
|
|
|
|
|
|
class ClientInitializeTest(testtools.TestCase):
|
|
|
|
def _load_session_kwargs(self):
|
|
return {
|
|
'username': None,
|
|
'project_id': None,
|
|
'project_name': None,
|
|
'auth_url': None,
|
|
'password': None,
|
|
'auth_type': 'password',
|
|
'insecure': False,
|
|
'user_domain_id': None,
|
|
'user_domain_name': None,
|
|
'project_domain_id': None,
|
|
'project_domain_name': None,
|
|
'auth_token': None,
|
|
'timeout': 600,
|
|
}
|
|
|
|
def _load_service_type_kwargs(self):
|
|
return {
|
|
'interface': 'public',
|
|
'region_name': None,
|
|
'service_name': None,
|
|
'service_type': 'container-infra',
|
|
}
|
|
|
|
def _session_client_kwargs(self, session):
|
|
kwargs = self._load_service_type_kwargs()
|
|
kwargs['endpoint_override'] = None
|
|
kwargs['session'] = session
|
|
|
|
return kwargs
|
|
|
|
@mock.patch('magnumclient.common.httpclient.SessionClient')
|
|
@mock.patch('magnumclient.v1.client._load_session')
|
|
@mock.patch('magnumclient.v1.client._load_service_type',
|
|
return_value='container-infra')
|
|
def test_init_with_session(self,
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client):
|
|
session = mock.Mock()
|
|
client.Client(session=session)
|
|
mock_load_session.assert_not_called()
|
|
mock_load_service_type.assert_called_once_with(
|
|
session,
|
|
**self._load_service_type_kwargs()
|
|
)
|
|
mock_http_client.assert_called_once_with(
|
|
**self._session_client_kwargs(session)
|
|
)
|
|
|
|
def _test_init_with_secret(self,
|
|
init_func,
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client,):
|
|
expected_password = 'expected_password'
|
|
session = mock.Mock()
|
|
mock_load_session.return_value = session
|
|
init_func(expected_password)
|
|
load_session_args = self._load_session_kwargs()
|
|
load_session_args['password'] = expected_password
|
|
mock_load_session.assert_called_once_with(
|
|
**load_session_args
|
|
)
|
|
mock_load_service_type.assert_called_once_with(
|
|
session,
|
|
**self._load_service_type_kwargs()
|
|
)
|
|
mock_http_client.assert_called_once_with(
|
|
**self._session_client_kwargs(session)
|
|
)
|
|
|
|
@mock.patch('magnumclient.common.httpclient.SessionClient')
|
|
@mock.patch('magnumclient.v1.client._load_session')
|
|
@mock.patch('magnumclient.v1.client._load_service_type',
|
|
return_value='container-infra')
|
|
def test_init_with_password(self,
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client):
|
|
self._test_init_with_secret(
|
|
lambda x: client.Client(password=x),
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client
|
|
)
|
|
|
|
@mock.patch('magnumclient.common.httpclient.SessionClient')
|
|
@mock.patch('magnumclient.v1.client._load_session')
|
|
@mock.patch('magnumclient.v1.client._load_service_type',
|
|
return_value='container-infra')
|
|
def test_init_with_api_key(self,
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client):
|
|
self._test_init_with_secret(
|
|
lambda x: client.Client(api_key=x),
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client
|
|
)
|
|
|
|
@mock.patch('magnumclient.common.httpclient.SessionClient')
|
|
@mock.patch('magnumclient.v1.client._load_session')
|
|
@mock.patch('magnumclient.v1.client._load_service_type',
|
|
return_value='container-infra')
|
|
def test_init_with_auth_token(self,
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client,):
|
|
expected_token = 'expected_password'
|
|
session = mock.Mock()
|
|
mock_load_session.return_value = session
|
|
client.Client(auth_token=expected_token)
|
|
load_session_args = self._load_session_kwargs()
|
|
load_session_args['auth_token'] = expected_token
|
|
load_session_args['auth_type'] = 'token'
|
|
mock_load_session.assert_called_once_with(
|
|
**load_session_args
|
|
)
|
|
mock_load_service_type.assert_called_once_with(
|
|
session,
|
|
**self._load_service_type_kwargs()
|
|
)
|
|
mock_http_client.assert_called_once_with(
|
|
**self._session_client_kwargs(session)
|
|
)
|
|
|
|
def _test_init_with_interface(self,
|
|
init_func,
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client):
|
|
expected_interface = 'admin'
|
|
session = mock.Mock()
|
|
mock_load_session.return_value = session
|
|
init_func(expected_interface)
|
|
mock_load_session.assert_called_once_with(
|
|
**self._load_session_kwargs()
|
|
)
|
|
expected_kwargs = self._load_service_type_kwargs()
|
|
expected_kwargs['interface'] = expected_interface
|
|
mock_load_service_type.assert_called_once_with(
|
|
session,
|
|
**expected_kwargs
|
|
)
|
|
expected_kwargs = self._session_client_kwargs(session)
|
|
expected_kwargs['interface'] = expected_interface
|
|
mock_http_client.assert_called_once_with(
|
|
**expected_kwargs
|
|
)
|
|
|
|
@mock.patch('magnumclient.common.httpclient.SessionClient')
|
|
@mock.patch('magnumclient.v1.client._load_session')
|
|
@mock.patch('magnumclient.v1.client._load_service_type',
|
|
return_value='container-infra')
|
|
def test_init_with_interface(self,
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client):
|
|
self._test_init_with_interface(
|
|
lambda x: client.Client(interface=x),
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client
|
|
)
|
|
|
|
@mock.patch('magnumclient.common.httpclient.SessionClient')
|
|
@mock.patch('magnumclient.v1.client._load_session')
|
|
@mock.patch('magnumclient.v1.client._load_service_type',
|
|
return_value='container-infra')
|
|
def test_init_with_endpoint_type(self,
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client):
|
|
self._test_init_with_interface(
|
|
lambda x: client.Client(interface='public',
|
|
endpoint_type=('%sURL' % x)),
|
|
mock_load_service_type,
|
|
mock_load_session,
|
|
mock_http_client
|
|
)
|
|
|
|
@mock.patch('magnumclient.common.httpclient.SessionClient')
|
|
@mock.patch('magnumclient.v1.client._load_session')
|
|
def test_init_with_legacy_service_type(self,
|
|
mock_load_session,
|
|
mock_http_client):
|
|
session = mock.Mock()
|
|
mock_load_session.return_value = session
|
|
session.get_endpoint.side_effect = [
|
|
catalog.EndpointNotFound(),
|
|
mock.Mock()
|
|
]
|
|
client.Client(username='myuser', auth_url='authurl')
|
|
expected_kwargs = self._session_client_kwargs(session)
|
|
expected_kwargs['service_type'] = 'container'
|
|
mock_http_client.assert_called_once_with(
|
|
**expected_kwargs
|
|
)
|