summaryrefslogtreecommitdiff
path: root/openstackclient/tests
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/tests')
-rw-r--r--openstackclient/tests/common/test_clientmanager.py87
-rw-r--r--openstackclient/tests/common/test_timing.py17
-rw-r--r--openstackclient/tests/compute/v2/fakes.py6
-rw-r--r--openstackclient/tests/compute/v2/test_security_group.py197
-rw-r--r--openstackclient/tests/compute/v2/test_server.py8
-rw-r--r--openstackclient/tests/identity/v3/fakes.py12
-rw-r--r--openstackclient/tests/identity/v3/test_identity_provider.py236
-rw-r--r--openstackclient/tests/identity/v3/test_project.py100
-rw-r--r--openstackclient/tests/image/v1/test_image.py53
-rw-r--r--openstackclient/tests/image/v2/fakes.py93
-rw-r--r--openstackclient/tests/image/v2/test_image.py63
-rw-r--r--openstackclient/tests/test_shell.py427
-rw-r--r--openstackclient/tests/volume/test_find_resource.py7
13 files changed, 1019 insertions, 287 deletions
diff --git a/openstackclient/tests/common/test_clientmanager.py b/openstackclient/tests/common/test_clientmanager.py
index 3648bf57..26cf4967 100644
--- a/openstackclient/tests/common/test_clientmanager.py
+++ b/openstackclient/tests/common/test_clientmanager.py
@@ -34,6 +34,10 @@ AUTH_REF.update(fakes.TEST_RESPONSE_DICT['access'])
SERVICE_CATALOG = service_catalog.ServiceCatalogV2(AUTH_REF)
+# This is deferred in api.auth but we need it here...
+auth.get_options_list()
+
+
class Container(object):
attr = clientmanager.ClientCache(lambda x: object())
@@ -44,13 +48,14 @@ class Container(object):
class FakeOptions(object):
def __init__(self, **kwargs):
for option in auth.OPTIONS_LIST:
- setattr(self, 'os_' + option.replace('-', '_'), None)
- self.os_auth_type = None
- self.os_identity_api_version = '2.0'
+ setattr(self, option.replace('-', '_'), None)
+ self.auth_type = None
+ self.identity_api_version = '2.0'
self.timing = None
- self.os_region_name = None
- self.os_url = None
- self.os_default_domain = 'default'
+ self.region_name = None
+ self.url = None
+ self.auth = {}
+ self.default_domain = 'default'
self.__dict__.update(kwargs)
@@ -82,9 +87,11 @@ class TestClientManager(utils.TestCase):
client_manager = clientmanager.ClientManager(
cli_options=FakeOptions(
- os_token=fakes.AUTH_TOKEN,
- os_url=fakes.AUTH_URL,
- os_auth_type='token_endpoint',
+ auth_type='token_endpoint',
+ auth=dict(
+ token=fakes.AUTH_TOKEN,
+ url=fakes.AUTH_URL,
+ ),
),
api_version=API_VERSION,
verify=True
@@ -110,9 +117,11 @@ class TestClientManager(utils.TestCase):
client_manager = clientmanager.ClientManager(
cli_options=FakeOptions(
- os_token=fakes.AUTH_TOKEN,
- os_auth_url=fakes.AUTH_URL,
- os_auth_type='v2token',
+ auth=dict(
+ token=fakes.AUTH_TOKEN,
+ auth_url=fakes.AUTH_URL,
+ ),
+ auth_type='v2token',
),
api_version=API_VERSION,
verify=True
@@ -134,10 +143,12 @@ class TestClientManager(utils.TestCase):
client_manager = clientmanager.ClientManager(
cli_options=FakeOptions(
- os_auth_url=fakes.AUTH_URL,
- os_username=fakes.USERNAME,
- os_password=fakes.PASSWORD,
- os_project_name=fakes.PROJECT_NAME,
+ auth=dict(
+ auth_url=fakes.AUTH_URL,
+ username=fakes.USERNAME,
+ password=fakes.PASSWORD,
+ project_name=fakes.PROJECT_NAME,
+ ),
),
api_version=API_VERSION,
verify=False,
@@ -194,11 +205,13 @@ class TestClientManager(utils.TestCase):
client_manager = clientmanager.ClientManager(
cli_options=FakeOptions(
- os_auth_url=fakes.AUTH_URL,
- os_username=fakes.USERNAME,
- os_password=fakes.PASSWORD,
- os_project_name=fakes.PROJECT_NAME,
- os_auth_type='v2password',
+ auth=dict(
+ auth_url=fakes.AUTH_URL,
+ username=fakes.USERNAME,
+ password=fakes.PASSWORD,
+ project_name=fakes.PROJECT_NAME,
+ ),
+ auth_type='v2password',
),
api_version=API_VERSION,
verify='cafile',
@@ -210,8 +223,8 @@ class TestClientManager(utils.TestCase):
self.assertEqual('cafile', client_manager._cacert)
def _select_auth_plugin(self, auth_params, api_version, auth_plugin_name):
- auth_params['os_auth_type'] = auth_plugin_name
- auth_params['os_identity_api_version'] = api_version
+ auth_params['auth_type'] = auth_plugin_name
+ auth_params['identity_api_version'] = api_version
client_manager = clientmanager.ClientManager(
cli_options=FakeOptions(**auth_params),
api_version=API_VERSION,
@@ -226,19 +239,33 @@ class TestClientManager(utils.TestCase):
def test_client_manager_select_auth_plugin(self):
# test token auth
- params = dict(os_token=fakes.AUTH_TOKEN,
- os_auth_url=fakes.AUTH_URL)
+ params = dict(
+ auth=dict(
+ auth_url=fakes.AUTH_URL,
+ token=fakes.AUTH_TOKEN,
+ ),
+ )
self._select_auth_plugin(params, '2.0', 'v2token')
self._select_auth_plugin(params, '3', 'v3token')
self._select_auth_plugin(params, 'XXX', 'token')
# test token/endpoint auth
- params = dict(os_token=fakes.AUTH_TOKEN, os_url='test')
+ params = dict(
+ auth_plugin='token_endpoint',
+ auth=dict(
+ url='test',
+ token=fakes.AUTH_TOKEN,
+ ),
+ )
self._select_auth_plugin(params, 'XXX', 'token_endpoint')
# test password auth
- params = dict(os_auth_url=fakes.AUTH_URL,
- os_username=fakes.USERNAME,
- os_password=fakes.PASSWORD,
- os_project_name=fakes.PROJECT_NAME)
+ params = dict(
+ auth=dict(
+ auth_url=fakes.AUTH_URL,
+ username=fakes.USERNAME,
+ password=fakes.PASSWORD,
+ project_name=fakes.PROJECT_NAME,
+ ),
+ )
self._select_auth_plugin(params, '2.0', 'v2password')
self._select_auth_plugin(params, '3', 'v3password')
self._select_auth_plugin(params, 'XXX', 'password')
diff --git a/openstackclient/tests/common/test_timing.py b/openstackclient/tests/common/test_timing.py
index aa910b91..a7f93b55 100644
--- a/openstackclient/tests/common/test_timing.py
+++ b/openstackclient/tests/common/test_timing.py
@@ -13,14 +13,15 @@
"""Test Timing pseudo-command"""
+import datetime
+
from openstackclient.common import timing
from openstackclient.tests import fakes
from openstackclient.tests import utils
timing_url = 'GET http://localhost:5000'
-timing_start = 1404802774.872809
-timing_end = 1404802775.724802
+timing_elapsed = 0.872809
class FakeGenericClient(object):
@@ -66,9 +67,10 @@ class TestTiming(utils.TestCommand):
self.assertEqual(datalist, data)
def test_timing_list(self):
- self.app.timing_data = [
- (timing_url, timing_start, timing_end),
- ]
+ self.app.timing_data = [(
+ timing_url,
+ datetime.timedelta(microseconds=timing_elapsed*1000000),
+ )]
arglist = []
verifylist = []
@@ -79,9 +81,8 @@ class TestTiming(utils.TestCommand):
collist = ('URL', 'Seconds')
self.assertEqual(collist, columns)
- timing_sec = timing_end - timing_start
datalist = [
- (timing_url, timing_sec),
- ('Total', timing_sec)
+ (timing_url, timing_elapsed),
+ ('Total', timing_elapsed),
]
self.assertEqual(datalist, data)
diff --git a/openstackclient/tests/compute/v2/fakes.py b/openstackclient/tests/compute/v2/fakes.py
index a22c1ce0..c18dea7e 100644
--- a/openstackclient/tests/compute/v2/fakes.py
+++ b/openstackclient/tests/compute/v2/fakes.py
@@ -16,6 +16,7 @@
import mock
from openstackclient.tests import fakes
+from openstackclient.tests.identity.v2_0 import fakes as identity_fakes
from openstackclient.tests.image.v2 import fakes as image_fakes
from openstackclient.tests.network.v2 import fakes as network_fakes
from openstackclient.tests import utils
@@ -85,6 +86,11 @@ class TestComputev2(utils.TestCommand):
token=fakes.AUTH_TOKEN,
)
+ self.app.client_manager.identity = identity_fakes.FakeIdentityv2Client(
+ endpoint=fakes.AUTH_URL,
+ token=fakes.AUTH_TOKEN,
+ )
+
self.app.client_manager.image = image_fakes.FakeImagev2Client(
endpoint=fakes.AUTH_URL,
token=fakes.AUTH_TOKEN,
diff --git a/openstackclient/tests/compute/v2/test_security_group.py b/openstackclient/tests/compute/v2/test_security_group.py
new file mode 100644
index 00000000..fdb659a8
--- /dev/null
+++ b/openstackclient/tests/compute/v2/test_security_group.py
@@ -0,0 +1,197 @@
+# 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 copy
+import mock
+
+from openstackclient.compute.v2 import security_group
+from openstackclient.tests.compute.v2 import fakes as compute_fakes
+from openstackclient.tests import fakes
+from openstackclient.tests.identity.v2_0 import fakes as identity_fakes
+
+
+security_group_id = '11'
+security_group_name = 'wide-open'
+security_group_description = 'nothing but net'
+
+SECURITY_GROUP = {
+ 'id': security_group_id,
+ 'name': security_group_name,
+ 'description': security_group_description,
+ 'tenant_id': identity_fakes.project_id,
+}
+
+
+class FakeSecurityGroupResource(fakes.FakeResource):
+
+ def get_keys(self):
+ return {'property': 'value'}
+
+
+class TestSecurityGroup(compute_fakes.TestComputev2):
+
+ def setUp(self):
+ super(TestSecurityGroup, self).setUp()
+
+ self.secgroups_mock = mock.Mock()
+ self.secgroups_mock.resource_class = fakes.FakeResource(None, {})
+ self.app.client_manager.compute.security_groups = self.secgroups_mock
+ self.secgroups_mock.reset_mock()
+
+ self.projects_mock = mock.Mock()
+ self.projects_mock.resource_class = fakes.FakeResource(None, {})
+ self.app.client_manager.identity.projects = self.projects_mock
+ self.projects_mock.reset_mock()
+
+
+class TestSecurityGroupCreate(TestSecurityGroup):
+
+ def setUp(self):
+ super(TestSecurityGroupCreate, self).setUp()
+
+ self.secgroups_mock.create.return_value = FakeSecurityGroupResource(
+ None,
+ copy.deepcopy(SECURITY_GROUP),
+ loaded=True,
+ )
+
+ # Get the command object to test
+ self.cmd = security_group.CreateSecurityGroup(self.app, None)
+
+ def test_security_group_create_no_options(self):
+ arglist = [
+ security_group_name,
+ ]
+ verifylist = [
+ ('name', security_group_name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # SecurityGroupManager.create(name, description)
+ self.secgroups_mock.create.assert_called_with(
+ security_group_name,
+ security_group_name,
+ )
+
+ collist = (
+ 'description',
+ 'id',
+ 'name',
+ 'tenant_id',
+ )
+ self.assertEqual(collist, columns)
+ datalist = (
+ security_group_description,
+ security_group_id,
+ security_group_name,
+ identity_fakes.project_id,
+ )
+ self.assertEqual(datalist, data)
+
+ def test_security_group_create_description(self):
+ arglist = [
+ security_group_name,
+ '--description', security_group_description,
+ ]
+ verifylist = [
+ ('name', security_group_name),
+ ('description', security_group_description),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # SecurityGroupManager.create(name, description)
+ self.secgroups_mock.create.assert_called_with(
+ security_group_name,
+ security_group_description,
+ )
+
+ collist = (
+ 'description',
+ 'id',
+ 'name',
+ 'tenant_id',
+ )
+ self.assertEqual(collist, columns)
+ datalist = (
+ security_group_description,
+ security_group_id,
+ security_group_name,
+ identity_fakes.project_id,
+ )
+ self.assertEqual(datalist, data)
+
+
+class TestSecurityGroupList(TestSecurityGroup):
+
+ def setUp(self):
+ super(TestSecurityGroupList, self).setUp()
+
+ self.secgroups_mock.list.return_value = [
+ FakeSecurityGroupResource(
+ None,
+ copy.deepcopy(SECURITY_GROUP),
+ loaded=True,
+ ),
+ ]
+
+ # Get the command object to test
+ self.cmd = security_group.ListSecurityGroup(self.app, None)
+
+ def test_security_group_list_no_options(self):
+ self.projects_mock.list.return_value = [
+ fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.PROJECT),
+ loaded=True,
+ ),
+ ]
+
+ arglist = []
+ verifylist = [
+ ('all_projects', False),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # Set expected values
+ kwargs = {
+ 'search_opts': {
+ 'all_tenants': False,
+ },
+ }
+
+ self.secgroups_mock.list.assert_called_with(
+ **kwargs
+ )
+
+ collist = (
+ 'ID',
+ 'Name',
+ 'Description',
+ )
+ self.assertEqual(collist, columns)
+ datalist = ((
+ security_group_id,
+ security_group_name,
+ security_group_description,
+ ), )
+ self.assertEqual(datalist, tuple(data))
diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py
index 079f301e..baf53742 100644
--- a/openstackclient/tests/compute/v2/test_server.py
+++ b/openstackclient/tests/compute/v2/test_server.py
@@ -361,14 +361,14 @@ class TestServerImageCreate(TestServer):
compute_fakes.server_name,
)
- collist = ('id', 'is_public', 'name', 'owner', 'protected')
+ collist = ('id', 'name', 'owner', 'protected', 'visibility')
self.assertEqual(collist, columns)
datalist = (
image_fakes.image_id,
- image_fakes.image_public,
image_fakes.image_name,
image_fakes.image_owner,
image_fakes.image_protected,
+ image_fakes.image_visibility,
)
self.assertEqual(datalist, data)
@@ -392,14 +392,14 @@ class TestServerImageCreate(TestServer):
'img-nam',
)
- collist = ('id', 'is_public', 'name', 'owner', 'protected')
+ collist = ('id', 'name', 'owner', 'protected', 'visibility')
self.assertEqual(collist, columns)
datalist = (
image_fakes.image_id,
- image_fakes.image_public,
image_fakes.image_name,
image_fakes.image_owner,
image_fakes.image_protected,
+ image_fakes.image_visibility,
)
self.assertEqual(datalist, data)
diff --git a/openstackclient/tests/identity/v3/fakes.py b/openstackclient/tests/identity/v3/fakes.py
index eb8673ef..dfbcf44f 100644
--- a/openstackclient/tests/identity/v3/fakes.py
+++ b/openstackclient/tests/identity/v3/fakes.py
@@ -135,6 +135,16 @@ REGION = {
'links': base_url + 'regions/' + region_id,
}
+PROJECT_WITH_PARENT = {
+ 'id': project_id + '-with-parent',
+ 'name': project_name + ' and their parents',
+ 'description': project_description + ' plus another four',
+ 'enabled': True,
+ 'domain_id': domain_id,
+ 'parent_id': project_id,
+ 'links': base_url + 'projects/' + (project_id + '-with-parent'),
+}
+
role_id = 'r1'
role_name = 'roller'
@@ -231,9 +241,11 @@ TOKEN_WITH_DOMAIN_ID = {
idp_id = 'test_idp'
idp_description = 'super exciting IdP description'
+idp_remote_ids = ['entity1', 'entity2']
IDENTITY_PROVIDER = {
'id': idp_id,
+ 'remote_ids': idp_remote_ids,
'enabled': True,
'description': idp_description
}
diff --git a/openstackclient/tests/identity/v3/test_identity_provider.py b/openstackclient/tests/identity/v3/test_identity_provider.py
index 527f01b5..cd328c1d 100644
--- a/openstackclient/tests/identity/v3/test_identity_provider.py
+++ b/openstackclient/tests/identity/v3/test_identity_provider.py
@@ -14,6 +14,8 @@
import copy
+import mock
+
from openstackclient.identity.v3 import identity_provider
from openstackclient.tests import fakes
from openstackclient.tests.identity.v3 import fakes as identity_fakes
@@ -51,6 +53,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
# Set expected values
kwargs = {
+ 'remote_ids': None,
'enabled': True,
'description': None,
}
@@ -60,12 +63,13 @@ class TestIdentityProviderCreate(TestIdentityProvider):
**kwargs
)
- collist = ('description', 'enabled', 'id')
+ collist = ('description', 'enabled', 'id', 'remote_ids')
self.assertEqual(collist, columns)
datalist = (
identity_fakes.idp_description,
True,
identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
)
self.assertEqual(datalist, data)
@@ -83,6 +87,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
# Set expected values
kwargs = {
+ 'remote_ids': None,
'description': identity_fakes.idp_description,
'enabled': True,
}
@@ -92,12 +97,121 @@ class TestIdentityProviderCreate(TestIdentityProvider):
**kwargs
)
- collist = ('description', 'enabled', 'id')
+ collist = ('description', 'enabled', 'id', 'remote_ids')
+ self.assertEqual(collist, columns)
+ datalist = (
+ identity_fakes.idp_description,
+ True,
+ identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
+ )
+ self.assertEqual(datalist, data)
+
+ def test_create_identity_provider_remote_id(self):
+ arglist = [
+ identity_fakes.idp_id,
+ '--remote-id', identity_fakes.idp_remote_ids[0]
+ ]
+ verifylist = [
+ ('identity_provider_id', identity_fakes.idp_id),
+ ('remote_id', identity_fakes.idp_remote_ids[:1]),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # Set expected values
+ kwargs = {
+ 'remote_ids': identity_fakes.idp_remote_ids[:1],
+ 'description': None,
+ 'enabled': True,
+ }
+
+ self.identity_providers_mock.create.assert_called_with(
+ id=identity_fakes.idp_id,
+ **kwargs
+ )
+
+ collist = ('description', 'enabled', 'id', 'remote_ids')
+ self.assertEqual(collist, columns)
+ datalist = (
+ identity_fakes.idp_description,
+ True,
+ identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
+ )
+ self.assertEqual(datalist, data)
+
+ def test_create_identity_provider_remote_ids_multiple(self):
+ arglist = [
+ '--remote-id', identity_fakes.idp_remote_ids[0],
+ '--remote-id', identity_fakes.idp_remote_ids[1],
+ identity_fakes.idp_id
+ ]
+ verifylist = [
+ ('identity_provider_id', identity_fakes.idp_id),
+ ('remote_id', identity_fakes.idp_remote_ids),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # Set expected values
+ kwargs = {
+ 'remote_ids': identity_fakes.idp_remote_ids,
+ 'description': None,
+ 'enabled': True,
+ }
+
+ self.identity_providers_mock.create.assert_called_with(
+ id=identity_fakes.idp_id,
+ **kwargs
+ )
+
+ collist = ('description', 'enabled', 'id', 'remote_ids')
self.assertEqual(collist, columns)
datalist = (
identity_fakes.idp_description,
True,
identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
+ )
+ self.assertEqual(datalist, data)
+
+ def test_create_identity_provider_remote_ids_file(self):
+ arglist = [
+ '--remote-id-file', '/tmp/file_name',
+ identity_fakes.idp_id,
+ ]
+ verifylist = [
+ ('identity_provider_id', identity_fakes.idp_id),
+ ('remote_id_file', '/tmp/file_name'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ mocker = mock.Mock()
+ mocker.return_value = "\n".join(identity_fakes.idp_remote_ids)
+ with mock.patch("openstackclient.identity.v3.identity_provider."
+ "utils.read_blob_file_contents", mocker):
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # Set expected values
+ kwargs = {
+ 'remote_ids': identity_fakes.idp_remote_ids,
+ 'description': None,
+ 'enabled': True,
+ }
+
+ self.identity_providers_mock.create.assert_called_with(
+ id=identity_fakes.idp_id,
+ **kwargs
+ )
+
+ collist = ('description', 'enabled', 'id', 'remote_ids')
+ self.assertEqual(collist, columns)
+ datalist = (
+ identity_fakes.idp_description,
+ True,
+ identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
)
self.assertEqual(datalist, data)
@@ -123,6 +237,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
# Set expected values
kwargs = {
+ 'remote_ids': None,
'enabled': False,
'description': None,
}
@@ -132,12 +247,13 @@ class TestIdentityProviderCreate(TestIdentityProvider):
**kwargs
)
- collist = ('description', 'enabled', 'id')
+ collist = ('description', 'enabled', 'id', 'remote_ids')
self.assertEqual(collist, columns)
datalist = (
None,
False,
identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
)
self.assertEqual(datalist, data)
@@ -241,12 +357,13 @@ class TestIdentityProviderShow(TestIdentityProvider):
identity_fakes.idp_id,
)
- collist = ('description', 'enabled', 'id')
+ collist = ('description', 'enabled', 'id', 'remote_ids')
self.assertEqual(collist, columns)
datalist = (
identity_fakes.idp_description,
True,
identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
)
self.assertEqual(datalist, data)
@@ -276,11 +393,14 @@ class TestIdentityProviderSet(TestIdentityProvider):
prepare(self)
arglist = [
'--disable', identity_fakes.idp_id,
+ '--remote-id', identity_fakes.idp_remote_ids[0],
+ '--remote-id', identity_fakes.idp_remote_ids[1]
]
verifylist = [
('identity_provider', identity_fakes.idp_id),
('enable', False),
('disable', True),
+ ('remote_id', identity_fakes.idp_remote_ids)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -288,14 +408,16 @@ class TestIdentityProviderSet(TestIdentityProvider):
self.identity_providers_mock.update.assert_called_with(
identity_fakes.idp_id,
enabled=False,
+ remote_ids=identity_fakes.idp_remote_ids
)
- collist = ('description', 'enabled', 'id')
+ collist = ('description', 'enabled', 'id', 'remote_ids')
self.assertEqual(collist, columns)
datalist = (
identity_fakes.idp_description,
False,
identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
)
self.assertEqual(datalist, data)
@@ -316,23 +438,122 @@ class TestIdentityProviderSet(TestIdentityProvider):
prepare(self)
arglist = [
'--enable', identity_fakes.idp_id,
+ '--remote-id', identity_fakes.idp_remote_ids[0],
+ '--remote-id', identity_fakes.idp_remote_ids[1]
]
verifylist = [
('identity_provider', identity_fakes.idp_id),
('enable', True),
('disable', False),
+ ('remote_id', identity_fakes.idp_remote_ids)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.identity_providers_mock.update.assert_called_with(
- identity_fakes.idp_id, enabled=True)
- collist = ('description', 'enabled', 'id')
+ identity_fakes.idp_id, enabled=True,
+ remote_ids=identity_fakes.idp_remote_ids)
+ collist = ('description', 'enabled', 'id', 'remote_ids')
+ self.assertEqual(collist, columns)
+ datalist = (
+ identity_fakes.idp_description,
+ True,
+ identity_fakes.idp_id,
+ identity_fakes.idp_remote_ids
+ )
+ self.assertEqual(datalist, data)
+
+ def test_identity_provider_replace_remote_ids(self):
+ """Enable Identity Provider.
+
+ Set Identity Provider's ``enabled`` attribute to True.
+ """
+ def prepare(self):
+ """Prepare fake return objects before the test is executed"""
+ self.new_remote_id = 'new_entity'
+
+ updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
+ updated_idp['remote_ids'] = [self.new_remote_id]
+ resources = fakes.FakeResource(
+ None,
+ updated_idp,
+ loaded=True
+ )
+ self.identity_providers_mock.update.return_value = resources
+
+ prepare(self)
+ arglist = [
+ '--enable', identity_fakes.idp_id,
+ '--remote-id', self.new_remote_id
+ ]
+ verifylist = [
+ ('identity_provider', identity_fakes.idp_id),
+ ('enable', True),
+ ('disable', False),
+ ('remote_id', [self.new_remote_id])
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ self.identity_providers_mock.update.assert_called_with(
+ identity_fakes.idp_id, enabled=True,
+ remote_ids=[self.new_remote_id])
+ collist = ('description', 'enabled', 'id', 'remote_ids')
+ self.assertEqual(collist, columns)
+ datalist = (
+ identity_fakes.idp_description,
+ True,
+ identity_fakes.idp_id,
+ [self.new_remote_id]
+ )
+ self.assertEqual(datalist, data)
+
+ def test_identity_provider_replace_remote_ids_file(self):
+ """Enable Identity Provider.
+
+ Set Identity Provider's ``enabled`` attribute to True.
+ """
+ def prepare(self):
+ """Prepare fake return objects before the test is executed"""
+ self.new_remote_id = 'new_entity'
+
+ updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
+ updated_idp['remote_ids'] = [self.new_remote_id]
+ resources = fakes.FakeResource(
+ None,
+ updated_idp,
+ loaded=True
+ )
+ self.identity_providers_mock.update.return_value = resources
+
+ prepare(self)
+ arglist = [
+ '--enable', identity_fakes.idp_id,
+ '--remote-id-file', self.new_remote_id,
+ ]
+ verifylist = [
+ ('identity_provider', identity_fakes.idp_id),
+ ('enable', True),
+ ('disable', False),
+ ('remote_id_file', self.new_remote_id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ mocker = mock.Mock()
+ mocker.return_value = self.new_remote_id
+ with mock.patch("openstackclient.identity.v3.identity_provider."
+ "utils.read_blob_file_contents", mocker):
+ columns, data = self.cmd.take_action(parsed_args)
+ self.identity_providers_mock.update.assert_called_with(
+ identity_fakes.idp_id, enabled=True,
+ remote_ids=[self.new_remote_id])
+ collist = ('description', 'enabled', 'id', 'remote_ids')
self.assertEqual(collist, columns)
datalist = (
identity_fakes.idp_description,
True,
identity_fakes.idp_id,
+ [self.new_remote_id]
)
self.assertEqual(datalist, data)
@@ -361,6 +582,7 @@ class TestIdentityProviderSet(TestIdentityProvider):
('identity_provider', identity_fakes.idp_id),
('enable', False),
('disable', False),
+ ('remote_id', None)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/identity/v3/test_project.py b/openstackclient/tests/identity/v3/test_project.py
index 874908da..ec50da0c 100644
--- a/openstackclient/tests/identity/v3/test_project.py
+++ b/openstackclient/tests/identity/v3/test_project.py
@@ -16,6 +16,7 @@
import copy
import mock
+from openstackclient.common import exceptions
from openstackclient.identity.v3 import project
from openstackclient.tests import fakes
from openstackclient.tests.identity.v3 import fakes as identity_fakes
@@ -60,6 +61,7 @@ class TestProjectCreate(TestProject):
identity_fakes.project_name,
]
verifylist = [
+ ('parent', None),
('enable', False),
('disable', False),
('name', identity_fakes.project_name),
@@ -75,6 +77,7 @@ class TestProjectCreate(TestProject):
'domain': None,
'description': None,
'enabled': True,
+ 'parent': None,
}
# ProjectManager.create(name=, domain=, description=,
# enabled=, **kwargs)
@@ -103,6 +106,7 @@ class TestProjectCreate(TestProject):
('enable', False),
('disable', False),
('name', identity_fakes.project_name),
+ ('parent', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -115,6 +119,7 @@ class TestProjectCreate(TestProject):
'domain': None,
'description': 'new desc',
'enabled': True,
+ 'parent': None,
}
# ProjectManager.create(name=, domain=, description=,
# enabled=, **kwargs)
@@ -143,6 +148,7 @@ class TestProjectCreate(TestProject):
('enable', False),
('disable', False),
('name', identity_fakes.project_name),
+ ('parent', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -155,6 +161,7 @@ class TestProjectCreate(TestProject):
'domain': identity_fakes.domain_id,
'description': None,
'enabled': True,
+ 'parent': None,
}
# ProjectManager.create(name=, domain=, description=,
# enabled=, **kwargs)
@@ -183,6 +190,7 @@ class TestProjectCreate(TestProject):
('enable', False),
('disable', False),
('name', identity_fakes.project_name),
+ ('parent', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
mocker = mock.Mock()
@@ -197,6 +205,7 @@ class TestProjectCreate(TestProject):
'domain': identity_fakes.domain_id,
'description': None,
'enabled': True,
+ 'parent': None,
}
self.projects_mock.create.assert_called_with(
**kwargs
@@ -221,6 +230,7 @@ class TestProjectCreate(TestProject):
('enable', True),
('disable', False),
('name', identity_fakes.project_name),
+ ('parent', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -233,6 +243,7 @@ class TestProjectCreate(TestProject):
'domain': None,
'description': None,
'enabled': True,
+ 'parent': None,
}
# ProjectManager.create(name=, domain=, description=,
# enabled=, **kwargs)
@@ -260,6 +271,7 @@ class TestProjectCreate(TestProject):
('enable', False),
('disable', True),
('name', identity_fakes.project_name),
+ ('parent', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -272,6 +284,7 @@ class TestProjectCreate(TestProject):
'domain': None,
'description': None,
'enabled': False,
+ 'parent': None,
}
# ProjectManager.create(name=, domain=,
# description=, enabled=, **kwargs)
@@ -311,6 +324,7 @@ class TestProjectCreate(TestProject):
'domain': None,
'description': None,
'enabled': True,
+ 'parent': None,
'fee': 'fi',
'fo': 'fum',
}
@@ -331,6 +345,92 @@ class TestProjectCreate(TestProject):
)
self.assertEqual(datalist, data)
+ def test_project_create_parent(self):
+ self.projects_mock.get.return_value = fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.PROJECT),
+ loaded=True,
+ )
+ self.projects_mock.create.return_value = fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.PROJECT_WITH_PARENT),
+ loaded=True,
+ )
+
+ arglist = [
+ '--domain', identity_fakes.PROJECT_WITH_PARENT['domain_id'],
+ '--parent', identity_fakes.PROJECT['name'],
+ identity_fakes.PROJECT_WITH_PARENT['name'],
+ ]
+ verifylist = [
+ ('domain', identity_fakes.PROJECT_WITH_PARENT['domain_id']),
+ ('parent', identity_fakes.PROJECT['name']),
+ ('enable', False),
+ ('disable', False),
+ ('name', identity_fakes.PROJECT_WITH_PARENT['name']),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ kwargs = {
+ 'name': identity_fakes.PROJECT_WITH_PARENT['name'],
+ 'domain': identity_fakes.PROJECT_WITH_PARENT['domain_id'],
+ 'parent': identity_fakes.PROJECT['id'],
+ 'description': None,
+ 'enabled': True,
+ }
+
+ self.projects_mock.create.assert_called_with(
+ **kwargs
+ )
+
+ collist = (
+ 'description',
+ 'domain_id',
+ 'enabled',
+ 'id',
+ 'name',
+ 'parent_id',
+ )
+ self.assertEqual(columns, collist)
+ datalist = (
+ identity_fakes.PROJECT_WITH_PARENT['description'],
+ identity_fakes.PROJECT_WITH_PARENT['domain_id'],
+ identity_fakes.PROJECT_WITH_PARENT['enabled'],
+ identity_fakes.PROJECT_WITH_PARENT['id'],
+ identity_fakes.PROJECT_WITH_PARENT['name'],
+ identity_fakes.PROJECT['id'],
+ )
+ self.assertEqual(data, datalist)
+
+ def test_project_create_invalid_parent(self):
+ self.projects_mock.resource_class.__name__ = 'Project'
+ self.projects_mock.get.side_effect = exceptions.NotFound(
+ 'Invalid parent')
+ self.projects_mock.find.side_effect = exceptions.NotFound(
+ 'Invalid parent')
+
+ arglist = [
+ '--domain', identity_fakes.domain_name,
+ '--parent', 'invalid',
+ identity_fakes.project_name,
+ ]
+ verifylist = [
+ ('domain', identity_fakes.domain_name),
+ ('parent', 'invalid'),
+ ('enable', False),
+ ('disable', False),
+ ('name', identity_fakes.project_name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args,
+ )
+
class TestProjectDelete(TestProject):
diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py
index 2776e744..ef7ca9ea 100644
--- a/openstackclient/tests/image/v1/test_image.py
+++ b/openstackclient/tests/image/v1/test_image.py
@@ -306,8 +306,8 @@ class TestImageList(TestImage):
super(TestImageList, self).setUp()
self.api_mock = mock.Mock()
- self.api_mock.image_list.return_value = [
- copy.deepcopy(image_fakes.IMAGE),
+ self.api_mock.image_list.side_effect = [
+ [copy.deepcopy(image_fakes.IMAGE)], [],
]
self.app.client_manager.image.api = self.api_mock
@@ -327,6 +327,7 @@ class TestImageList(TestImage):
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=False,
+ marker=image_fakes.image_id,
)
collist = ('ID', 'Name')
@@ -354,6 +355,7 @@ class TestImageList(TestImage):
self.api_mock.image_list.assert_called_with(
detailed=False,
public=True,
+ marker=image_fakes.image_id,
)
collist = ('ID', 'Name')
@@ -381,6 +383,7 @@ class TestImageList(TestImage):
self.api_mock.image_list.assert_called_with(
detailed=False,
private=True,
+ marker=image_fakes.image_id,
)
collist = ('ID', 'Name')
@@ -405,6 +408,7 @@ class TestImageList(TestImage):
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=True,
+ marker=image_fakes.image_id,
)
collist = (
@@ -437,8 +441,8 @@ class TestImageList(TestImage):
@mock.patch('openstackclient.api.utils.simple_filter')
def test_image_list_property_option(self, sf_mock):
- sf_mock.return_value = [
- copy.deepcopy(image_fakes.IMAGE),
+ sf_mock.side_effect = [
+ [copy.deepcopy(image_fakes.IMAGE)], [],
]
arglist = [
@@ -453,6 +457,7 @@ class TestImageList(TestImage):
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=True,
+ marker=image_fakes.image_id,
)
sf_mock.assert_called_with(
[image_fakes.IMAGE],
@@ -472,8 +477,8 @@ class TestImageList(TestImage):
@mock.patch('openstackclient.common.utils.sort_items')
def test_image_list_sort_option(self, si_mock):
- si_mock.return_value = [
- copy.deepcopy(image_fakes.IMAGE)
+ si_mock.side_effect = [
+ [copy.deepcopy(image_fakes.IMAGE)], [],
]
arglist = ['--sort', 'name:asc']
@@ -483,7 +488,8 @@ class TestImageList(TestImage):
# DisplayCommandBase.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
- detailed=False
+ detailed=False,
+ marker=image_fakes.image_id,
)
si_mock.assert_called_with(
[image_fakes.IMAGE],
@@ -653,3 +659,36 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+
+
+class TestImageShow(TestImage):
+
+ def setUp(self):
+ super(TestImageShow, self).setUp()
+
+ self.images_mock.get.return_value = fakes.FakeResource(
+ None,
+ copy.deepcopy(image_fakes.IMAGE),
+ loaded=True,
+ )
+
+ # Get the command object to test
+ self.cmd = image.ShowImage(self.app, None)
+
+ def test_image_show(self):
+ arglist = [
+ image_fakes.image_id,
+ ]
+ verifylist = [
+ ('image', image_fakes.image_id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ columns, data = self.cmd.take_action(parsed_args)
+ self.images_mock.get.assert_called_with(
+ image_fakes.image_id,
+ )
+
+ self.assertEqual(image_fakes.IMAGE_columns, columns)
+ self.assertEqual(image_fakes.IMAGE_data, data)
diff --git a/openstackclient/tests/image/v2/fakes.py b/openstackclient/tests/image/v2/fakes.py
index 1b7edf08..678291bb 100644
--- a/openstackclient/tests/image/v2/fakes.py
+++ b/openstackclient/tests/image/v2/fakes.py
@@ -19,18 +19,105 @@ from openstackclient.tests import fakes
from openstackclient.tests import utils
-image_id = 'im1'
+image_id = '0f41529e-7c12-4de8-be2d-181abb825b3c'
image_name = 'graven'
image_owner = 'baal'
-image_public = False
image_protected = False
+image_visibility = 'public'
IMAGE = {
'id': image_id,
'name': image_name,
- 'is_public': image_public,
'owner': image_owner,
'protected': image_protected,
+ 'visibility': image_visibility,
+}
+
+IMAGE_columns = tuple(sorted(IMAGE))
+IMAGE_data = tuple((IMAGE[x] for x in sorted(IMAGE)))
+
+# Just enough v2 schema to do some testing
+IMAGE_schema = {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "name": "image",
+ "links": [
+ {
+ "href": "{self}",
+ "rel": "self"
+ },
+ {
+ "href": "{file}",
+ "rel": "enclosure"
+ },
+ {
+ "href": "{schema}",
+ "rel": "describedby"
+ }
+ ],
+ "properties": {
+ "id": {
+ "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", # noqa
+ "type": "string",
+ "description": "An identifier for the image"
+ },
+ "name": {
+ "type": [
+ "null",
+ "string"
+ ],
+ "description": "Descriptive name for the image",
+ "maxLength": 255
+ },
+ "owner": {
+ "type": [
+ "null",
+ "string"
+ ],
+ "description": "Owner of the image",
+ "maxLength": 255
+ },
+ "protected": {
+ "type": "boolean",
+ "description": "If true, image will not be deletable."
+ },
+ "self": {
+ "type": "string",
+ "description": "(READ-ONLY)"
+ },
+ "schema": {
+ "type": "string",
+ "description": "(READ-ONLY)"
+ },
+ "size": {
+ "type": [
+ "null",
+ "integer"
+ ],
+ "description": "Size of image file in bytes (READ-ONLY)"
+ },
+ "status": {
+ "enum": [
+ "queued",
+ "saving",
+ "active",
+ "killed",
+ "deleted",
+ "pending_delete"
+ ],
+ "type": "string",
+ "description": "Status of the image (READ-ONLY)"
+ },
+ "visibility": {
+ "enum": [
+ "public",
+ "private"
+ ],
+ "type": "string",
+ "description": "Scope of image accessibility"
+ },
+ }
}
diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py
index 6a28b1ec..73b5d39a 100644
--- a/openstackclient/tests/image/v2/test_image.py
+++ b/openstackclient/tests/image/v2/test_image.py
@@ -16,6 +16,9 @@
import copy
import mock
+import warlock
+
+from glanceclient.v2 import schemas
from openstackclient.image.v2 import image
from openstackclient.tests import fakes
from openstackclient.tests.image.v2 import fakes as image_fakes
@@ -70,8 +73,8 @@ class TestImageList(TestImage):
super(TestImageList, self).setUp()
self.api_mock = mock.Mock()
- self.api_mock.image_list.return_value = [
- copy.deepcopy(image_fakes.IMAGE),
+ self.api_mock.image_list.side_effect = [
+ [copy.deepcopy(image_fakes.IMAGE)], [],
]
self.app.client_manager.image.api = self.api_mock
@@ -90,7 +93,9 @@ class TestImageList(TestImage):
# DisplayCommandBase.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- self.api_mock.image_list.assert_called_with()
+ self.api_mock.image_list.assert_called_with(
+ marker=image_fakes.image_id,
+ )
collist = ('ID', 'Name')
@@ -117,6 +122,7 @@ class TestImageList(TestImage):
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
public=True,
+ marker=image_fakes.image_id,
)
collist = ('ID', 'Name')
@@ -144,6 +150,7 @@ class TestImageList(TestImage):
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
private=True,
+ marker=image_fakes.image_id,
)
collist = ('ID', 'Name')
@@ -171,6 +178,7 @@ class TestImageList(TestImage):
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
shared=True,
+ marker=image_fakes.image_id,
)
collist = ('ID', 'Name')
@@ -193,7 +201,9 @@ class TestImageList(TestImage):
# DisplayCommandBase.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- self.api_mock.image_list.assert_called_with()
+ self.api_mock.image_list.assert_called_with(
+ marker=image_fakes.image_id,
+ )
collist = (
'ID',
@@ -216,7 +226,7 @@ class TestImageList(TestImage):
'',
'',
'',
- '',
+ 'public',
False,
image_fakes.image_owner,
'',
@@ -239,7 +249,9 @@ class TestImageList(TestImage):
# DisplayCommandBase.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- self.api_mock.image_list.assert_called_with()
+ self.api_mock.image_list.assert_called_with(
+ marker=image_fakes.image_id,
+ )
sf_mock.assert_called_with(
[image_fakes.IMAGE],
attr='a',
@@ -268,7 +280,9 @@ class TestImageList(TestImage):
# DisplayCommandBase.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- self.api_mock.image_list.assert_called_with()
+ self.api_mock.image_list.assert_called_with(
+ marker=image_fakes.image_id,
+ )
si_mock.assert_called_with(
[image_fakes.IMAGE],
'name:asc'
@@ -282,3 +296,38 @@ class TestImageList(TestImage):
image_fakes.image_name
), )
self.assertEqual(datalist, tuple(data))
+
+
+class TestImageShow(TestImage):
+
+ def setUp(self):
+ super(TestImageShow, self).setUp()
+
+ # Set up the schema
+ self.model = warlock.model_factory(
+ image_fakes.IMAGE_schema,
+ schemas.SchemaBasedModel,
+ )
+
+ self.images_mock.get.return_value = self.model(**image_fakes.IMAGE)
+
+ # Get the command object to test
+ self.cmd = image.ShowImage(self.app, None)
+
+ def test_image_show(self):
+ arglist = [
+ image_fakes.image_id,
+ ]
+ verifylist = [
+ ('image', image_fakes.image_id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ columns, data = self.cmd.take_action(parsed_args)
+ self.images_mock.get.assert_called_with(
+ image_fakes.image_id,
+ )
+
+ self.assertEqual(image_fakes.IMAGE_columns, columns)
+ self.assertEqual(image_fakes.IMAGE_data, data)
diff --git a/openstackclient/tests/test_shell.py b/openstackclient/tests/test_shell.py
index f1043072..a43be954 100644
--- a/openstackclient/tests/test_shell.py
+++ b/openstackclient/tests/test_shell.py
@@ -82,34 +82,62 @@ class TestShell(utils.TestCase):
fake_execute(_shell, _cmd)
self.app.assert_called_with(["list", "project"])
- self.assertEqual(default_args["auth_url"],
- _shell.options.os_auth_url)
- self.assertEqual(default_args["project_id"],
- _shell.options.os_project_id)
- self.assertEqual(default_args["project_name"],
- _shell.options.os_project_name)
- self.assertEqual(default_args["domain_id"],
- _shell.options.os_domain_id)
- self.assertEqual(default_args["domain_name"],
- _shell.options.os_domain_name)
- self.assertEqual(default_args["user_domain_id"],
- _shell.options.os_user_domain_id)
- self.assertEqual(default_args["user_domain_name"],
- _shell.options.os_user_domain_name)
- self.assertEqual(default_args["project_domain_id"],
- _shell.options.os_project_domain_id)
- self.assertEqual(default_args["project_domain_name"],
- _shell.options.os_project_domain_name)
- self.assertEqual(default_args["username"],
- _shell.options.os_username)
- self.assertEqual(default_args["password"],
- _shell.options.os_password)
- self.assertEqual(default_args["region_name"],
- _shell.options.os_region_name)
- self.assertEqual(default_args["trust_id"],
- _shell.options.os_trust_id)
- self.assertEqual(default_args['auth_type'],
- _shell.options.os_auth_type)
+ self.assertEqual(
+ default_args.get("auth_url", ''),
+ _shell.options.auth_url,
+ )
+ self.assertEqual(
+ default_args.get("project_id", ''),
+ _shell.options.project_id,
+ )
+ self.assertEqual(
+ default_args.get("project_name", ''),
+ _shell.options.project_name,
+ )
+ self.assertEqual(
+ default_args.get("domain_id", ''),
+ _shell.options.domain_id,
+ )
+ self.assertEqual(
+ default_args.get("domain_name", ''),
+ _shell.options.domain_name,
+ )
+ self.assertEqual(
+ default_args.get("user_domain_id", ''),
+ _shell.options.user_domain_id,
+ )
+ self.assertEqual(
+ default_args.get("user_domain_name", ''),
+ _shell.options.user_domain_name,
+ )
+ self.assertEqual(
+ default_args.get("project_domain_id", ''),
+ _shell.options.project_domain_id,
+ )
+ self.assertEqual(
+ default_args.get("project_domain_name", ''),
+ _shell.options.project_domain_name,
+ )
+ self.assertEqual(
+ default_args.get("username", ''),
+ _shell.options.username,
+ )
+ self.assertEqual(
+ default_args.get("password", ''),
+ _shell.options.password,
+ )
+ self.assertEqual(
+ default_args.get("region_name", ''),
+ _shell.options.region_name,
+ )
+ self.assertEqual(
+ default_args.get("trust_id", ''),
+ _shell.options.trust_id,
+ )
+ self.assertEqual(
+ default_args.get('auth_type', ''),
+ _shell.options.auth_type,
+ )
def _assert_token_auth(self, cmd_options, default_args):
with mock.patch("openstackclient.shell.OpenStackShell.initialize_app",
@@ -118,9 +146,34 @@ class TestShell(utils.TestCase):
fake_execute(_shell, _cmd)
self.app.assert_called_with(["list", "role"])
- self.assertEqual(default_args["os_token"], _shell.options.os_token)
- self.assertEqual(default_args["os_auth_url"],
- _shell.options.os_auth_url)
+ self.assertEqual(
+ default_args.get("token", ''),
+ _shell.options.token,
+ "token"
+ )
+ self.assertEqual(
+ default_args.get("auth_url", ''),
+ _shell.options.auth_url,
+ "auth_url"
+ )
+
+ def _assert_token_endpoint_auth(self, cmd_options, default_args):
+ with mock.patch("openstackclient.shell.OpenStackShell.initialize_app",
+ self.app):
+ _shell, _cmd = make_shell(), cmd_options + " list role"
+ fake_execute(_shell, _cmd)
+
+ self.app.assert_called_with(["list", "role"])
+ self.assertEqual(
+ default_args.get("token", ''),
+ _shell.options.token,
+ "token",
+ )
+ self.assertEqual(
+ default_args.get("url", ''),
+ _shell.options.url,
+ "url",
+ )
def _assert_cli(self, cmd_options, default_args):
with mock.patch("openstackclient.shell.OpenStackShell.initialize_app",
@@ -178,301 +231,233 @@ class TestShellPasswordAuth(TestShell):
flag = "--os-auth-url " + DEFAULT_AUTH_URL
kwargs = {
"auth_url": DEFAULT_AUTH_URL,
- "project_id": "",
- "project_name": "",
- "user_domain_id": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_project_id_flow(self):
flag = "--os-project-id " + DEFAULT_PROJECT_ID
kwargs = {
- "auth_url": "",
"project_id": DEFAULT_PROJECT_ID,
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_project_name_flow(self):
flag = "--os-project-name " + DEFAULT_PROJECT_NAME
kwargs = {
- "auth_url": "",
- "project_id": "",
"project_name": DEFAULT_PROJECT_NAME,
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_domain_id_flow(self):
flag = "--os-domain-id " + DEFAULT_DOMAIN_ID
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
"domain_id": DEFAULT_DOMAIN_ID,
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_domain_name_flow(self):
flag = "--os-domain-name " + DEFAULT_DOMAIN_NAME
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
"domain_name": DEFAULT_DOMAIN_NAME,
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_user_domain_id_flow(self):
flag = "--os-user-domain-id " + DEFAULT_USER_DOMAIN_ID
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
"user_domain_id": DEFAULT_USER_DOMAIN_ID,
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_user_domain_name_flow(self):
flag = "--os-user-domain-name " + DEFAULT_USER_DOMAIN_NAME
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
"user_domain_name": DEFAULT_USER_DOMAIN_NAME,
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_project_domain_id_flow(self):
flag = "--os-project-domain-id " + DEFAULT_PROJECT_DOMAIN_ID
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
"project_domain_id": DEFAULT_PROJECT_DOMAIN_ID,
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_project_domain_name_flow(self):
flag = "--os-project-domain-name " + DEFAULT_PROJECT_DOMAIN_NAME
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
"project_domain_name": DEFAULT_PROJECT_DOMAIN_NAME,
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_username_flow(self):
flag = "--os-username " + DEFAULT_USERNAME
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
"username": DEFAULT_USERNAME,
- "password": "",
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_password_flow(self):
flag = "--os-password " + DEFAULT_PASSWORD
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
"password": DEFAULT_PASSWORD,
- "region_name": "",
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_region_name_flow(self):
flag = "--os-region-name " + DEFAULT_REGION_NAME
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
"region_name": DEFAULT_REGION_NAME,
- "trust_id": "",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_trust_id_flow(self):
flag = "--os-trust-id " + "1234"
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
"trust_id": "1234",
- "auth_type": "",
}
self._assert_password_auth(flag, kwargs)
def test_only_auth_type_flow(self):
flag = "--os-auth-type " + "v2password"
kwargs = {
- "auth_url": "",
- "project_id": "",
- "project_name": "",
- "domain_id": "",
- "domain_name": "",
- "user_domain_id": "",
- "user_domain_name": "",
- "project_domain_id": "",
- "project_domain_name": "",
- "username": "",
- "password": "",
- "region_name": "",
- "trust_id": "",
"auth_type": DEFAULT_AUTH_PLUGIN
}
self._assert_password_auth(flag, kwargs)
class TestShellTokenAuth(TestShell):
+ def test_only_token(self):
+ flag = "--os-token " + DEFAULT_TOKEN
+ kwargs = {
+ "token": DEFAULT_TOKEN,
+ "auth_url": '',
+ }
+ self._assert_token_auth(flag, kwargs)
+
+ def test_only_auth_url(self):
+ flag = "--os-auth-url " + DEFAULT_AUTH_URL
+ kwargs = {
+ "token": '',
+ "auth_url": DEFAULT_AUTH_URL,
+ }
+ self._assert_token_auth(flag, kwargs)
+
+ def test_empty_auth(self):
+ os.environ = {}
+ flag = ""
+ kwargs = {}
+ self._assert_token_auth(flag, kwargs)
+
+
+class TestShellTokenAuthEnv(TestShell):
def setUp(self):
- super(TestShellTokenAuth, self).setUp()
+ super(TestShellTokenAuthEnv, self).setUp()
env = {
"OS_TOKEN": DEFAULT_TOKEN,
- "OS_AUTH_URL": DEFAULT_SERVICE_URL,
+ "OS_AUTH_URL": DEFAULT_AUTH_URL,
}
self.orig_env, os.environ = os.environ, env.copy()
def tearDown(self):
- super(TestShellTokenAuth, self).tearDown()
+ super(TestShellTokenAuthEnv, self).tearDown()
os.environ = self.orig_env
- def test_default_auth(self):
+ def test_env(self):
flag = ""
kwargs = {
- "os_token": DEFAULT_TOKEN,
- "os_auth_url": DEFAULT_SERVICE_URL
+ "token": DEFAULT_TOKEN,
+ "auth_url": DEFAULT_AUTH_URL,
+ }
+ self._assert_token_auth(flag, kwargs)
+
+ def test_only_token(self):
+ flag = "--os-token xyzpdq"
+ kwargs = {
+ "token": "xyzpdq",
+ "auth_url": DEFAULT_AUTH_URL,
+ }
+ self._assert_token_auth(flag, kwargs)
+
+ def test_only_auth_url(self):
+ flag = "--os-auth-url http://cloud.local:555"
+ kwargs = {
+ "token": DEFAULT_TOKEN,
+ "auth_url": "http://cloud.local:555",
+ }
+ self._assert_token_auth(flag, kwargs)
+
+ def test_empty_auth(self):
+ os.environ = {}
+ flag = ""
+ kwargs = {
+ "token": '',
+ "auth_url": '',
+ }
+ self._assert_token_auth(flag, kwargs)
+
+
+class TestShellTokenEndpointAuth(TestShell):
+ def test_only_token(self):
+ flag = "--os-token " + DEFAULT_TOKEN
+ kwargs = {
+ "token": DEFAULT_TOKEN,
+ "url": '',
+ }
+ self._assert_token_endpoint_auth(flag, kwargs)
+
+ def test_only_url(self):
+ flag = "--os-url " + DEFAULT_SERVICE_URL
+ kwargs = {
+ "token": '',
+ "url": DEFAULT_SERVICE_URL,
+ }
+ self._assert_token_endpoint_auth(flag, kwargs)
+
+ def test_empty_auth(self):
+ os.environ = {}
+ flag = ""
+ kwargs = {
+ "token": '',
+ "auth_url": '',
+ }
+ self._assert_token_endpoint_auth(flag, kwargs)
+
+
+class TestShellTokenEndpointAuthEnv(TestShell):
+ def setUp(self):
+ super(TestShellTokenEndpointAuthEnv, self).setUp()
+ env = {
+ "OS_TOKEN": DEFAULT_TOKEN,
+ "OS_URL": DEFAULT_SERVICE_URL,
+ }
+ self.orig_env, os.environ = os.environ, env.copy()
+
+ def tearDown(self):
+ super(TestShellTokenEndpointAuthEnv, self).tearDown()
+ os.environ = self.orig_env
+
+ def test_env(self):
+ flag = ""
+ kwargs = {
+ "token": DEFAULT_TOKEN,
+ "url": DEFAULT_SERVICE_URL,
+ }
+ self._assert_token_auth(flag, kwargs)
+
+ def test_only_token(self):
+ flag = "--os-token xyzpdq"
+ kwargs = {
+ "token": "xyzpdq",
+ "url": DEFAULT_SERVICE_URL,
+ }
+ self._assert_token_auth(flag, kwargs)
+
+ def test_only_url(self):
+ flag = "--os-url http://cloud.local:555"
+ kwargs = {
+ "token": DEFAULT_TOKEN,
+ "url": "http://cloud.local:555",
}
self._assert_token_auth(flag, kwargs)
@@ -480,8 +465,8 @@ class TestShellTokenAuth(TestShell):
os.environ = {}
flag = ""
kwargs = {
- "os_token": "",
- "os_auth_url": ""
+ "token": '',
+ "url": '',
}
self._assert_token_auth(flag, kwargs)
diff --git a/openstackclient/tests/volume/test_find_resource.py b/openstackclient/tests/volume/test_find_resource.py
index 56081966..00cc46a6 100644
--- a/openstackclient/tests/volume/test_find_resource.py
+++ b/openstackclient/tests/volume/test_find_resource.py
@@ -24,6 +24,13 @@ from openstackclient.tests import utils as test_utils
from openstackclient.volume import client # noqa
+# Monkey patch for v1 cinderclient
+# NOTE(dtroyer): Do here because openstackclient.volume.client
+# doesn't do it until the client object is created now.
+volumes.Volume.NAME_ATTR = 'display_name'
+volume_snapshots.Snapshot.NAME_ATTR = 'display_name'
+
+
ID = '1after909'
NAME = 'PhilSpector'