summaryrefslogtreecommitdiff
path: root/cinderclient/tests
diff options
context:
space:
mode:
Diffstat (limited to 'cinderclient/tests')
-rw-r--r--cinderclient/tests/unit/test_utils.py17
-rw-r--r--cinderclient/tests/unit/v3/fakes.py6
-rw-r--r--cinderclient/tests/unit/v3/test_resource_filters.py32
-rw-r--r--cinderclient/tests/unit/v3/test_shell.py98
-rw-r--r--cinderclient/tests/unit/v3/test_volumes.py13
5 files changed, 166 insertions, 0 deletions
diff --git a/cinderclient/tests/unit/test_utils.py b/cinderclient/tests/unit/test_utils.py
index a62425e..eeb4800 100644
--- a/cinderclient/tests/unit/test_utils.py
+++ b/cinderclient/tests/unit/test_utils.py
@@ -12,6 +12,7 @@
# limitations under the License.
import collections
+import ddt
import sys
import mock
@@ -21,6 +22,7 @@ import six
from cinderclient import api_versions
from cinderclient.apiclient import base as common_base
from cinderclient import exceptions
+from cinderclient import shell_utils
from cinderclient import utils
from cinderclient import base
from cinderclient.tests.unit import utils as test_utils
@@ -187,6 +189,21 @@ class BuildQueryParamTestCase(test_utils.TestCase):
self.assertFalse(result_2)
+@ddt.ddt
+class ExtractFilterTestCase(test_utils.TestCase):
+
+ @ddt.data({'content': ['key1=value1'],
+ 'expected': {'key1': 'value1'}},
+ {'content': ['key1={key2:value2}'],
+ 'expected': {'key1': {'key2': 'value2'}}},
+ {'content': ['key1=value1', 'key2={key22:value22}'],
+ 'expected': {'key1': 'value1', 'key2': {'key22': 'value22'}}})
+ @ddt.unpack
+ def test_extract_filters(self, content, expected):
+ result = shell_utils.extract_filters(content)
+ self.assertEqual(expected, result)
+
+
class PrintListTestCase(test_utils.TestCase):
def test_print_list_with_list(self):
diff --git a/cinderclient/tests/unit/v3/fakes.py b/cinderclient/tests/unit/v3/fakes.py
index 6a62477..25a8151 100644
--- a/cinderclient/tests/unit/v3/fakes.py
+++ b/cinderclient/tests/unit/v3/fakes.py
@@ -544,6 +544,12 @@ class FakeHTTPClient(fake_v2.FakeHTTPClient):
}
return 200, {}, {'message': message}
+ #
+ # resource filters
+ #
+ def get_resource_filters(self, **kw):
+ return 200, {}, {'resource_filters': []}
+
def fake_request_get():
versions = {'versions': [{'id': 'v1.0',
diff --git a/cinderclient/tests/unit/v3/test_resource_filters.py b/cinderclient/tests/unit/v3/test_resource_filters.py
new file mode 100644
index 0000000..3b14124
--- /dev/null
+++ b/cinderclient/tests/unit/v3/test_resource_filters.py
@@ -0,0 +1,32 @@
+# 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 ddt
+
+from cinderclient.tests.unit import utils
+from cinderclient.tests.unit.v3 import fakes
+
+cs = fakes.FakeClient()
+
+
+@ddt.ddt
+class ResourceFilterTests(utils.TestCase):
+ @ddt.data({'resource': None, 'query_url': None},
+ {'resource': 'volume', 'query_url': '?resource=volume'},
+ {'resource': 'group', 'query_url': '?resource=group'})
+ @ddt.unpack
+ def test_list_messages(self, resource, query_url):
+ cs.resource_filters.list(resource)
+ url = '/resource_filters'
+ if resource is not None:
+ url += query_url
+ cs.assert_called('GET', url)
diff --git a/cinderclient/tests/unit/v3/test_shell.py b/cinderclient/tests/unit/v3/test_shell.py
index 08bd2c2..c13cdb2 100644
--- a/cinderclient/tests/unit/v3/test_shell.py
+++ b/cinderclient/tests/unit/v3/test_shell.py
@@ -66,6 +66,104 @@ class ShellTest(utils.TestCase):
return self.shell.cs.assert_called(method, url, body,
partial_body, **kwargs)
+ @ddt.data({'resource': None, 'query_url': None},
+ {'resource': 'volume', 'query_url': '?resource=volume'},
+ {'resource': 'group', 'query_url': '?resource=group'})
+ @ddt.unpack
+ def test_list_filters(self, resource, query_url):
+ url = '/resource_filters'
+ if resource is not None:
+ url += query_url
+ self.run_command('--os-volume-api-version 3.33 '
+ 'list-filters --resource=%s' % resource)
+ else:
+ self.run_command('--os-volume-api-version 3.33 list-filters')
+
+ self.assert_called('GET', url)
+
+ @ddt.data(
+ # testcases for list volume
+ {'command':
+ 'list --name=123 --filters name=456',
+ 'expected':
+ '/volumes/detail?name=456'},
+ {'command':
+ 'list --filters name=123',
+ 'expected':
+ '/volumes/detail?name=123'},
+ {'command':
+ 'list --filters metadata={key1:value1}',
+ 'expected':
+ '/volumes/detail?metadata=%7B%27key1%27%3A+%27value1%27%7D'},
+ # testcases for list group
+ {'command':
+ 'group-list --filters name=456',
+ 'expected':
+ '/groups/detail?name=456'},
+ {'command':
+ 'group-list --filters status=available',
+ 'expected':
+ '/groups/detail?status=available'},
+ # testcases for list group-snapshot
+ {'command':
+ 'group-snapshot-list --status=error --filters status=available',
+ 'expected':
+ '/group_snapshots/detail?status=available'},
+ {'command':
+ 'group-snapshot-list --filters availability_zone=123',
+ 'expected':
+ '/group_snapshots/detail?availability_zone=123'},
+ # testcases for list message
+ {'command':
+ 'message-list --event_id=123 --filters event_id=456',
+ 'expected':
+ '/messages?event_id=456'},
+ {'command':
+ 'message-list --filters request_id=123',
+ 'expected':
+ '/messages?request_id=123'},
+ # testcases for list attachment
+ {'command':
+ 'attachment-list --volume-id=123 --filters volume_id=456',
+ 'expected':
+ '/attachments?volume_id=456'},
+ {'command':
+ 'attachment-list --filters mountpoint=123',
+ 'expected':
+ '/attachments?mountpoint=123'},
+ # testcases for list backup
+ {'command':
+ 'backup-list --volume-id=123 --filters volume_id=456',
+ 'expected':
+ '/backups/detail?volume_id=456'},
+ {'command':
+ 'backup-list --filters name=123',
+ 'expected':
+ '/backups/detail?name=123'},
+ # testcases for list snapshot
+ {'command':
+ 'snapshot-list --volume-id=123 --filters volume_id=456',
+ 'expected':
+ '/snapshots/detail?volume_id=456'},
+ {'command':
+ 'snapshot-list --filters name=123',
+ 'expected':
+ '/snapshots/detail?name=123'},
+ # testcases for get pools
+ {'command':
+ 'get-pools --filters name=456 --detail',
+ 'expected':
+ '/scheduler-stats/get_pools?detail=True&name=456'},
+ {'command':
+ 'get-pools --filters name=456',
+ 'expected':
+ '/scheduler-stats/get_pools?name=456'}
+ )
+ @ddt.unpack
+ def test_list_with_filters_mixed(self, command, expected):
+ self.run_command('--os-volume-api-version 3.33 %s' % command)
+ self.assert_called('GET', expected)
+
def test_list(self):
self.run_command('list')
# NOTE(jdg): we default to detail currently
diff --git a/cinderclient/tests/unit/v3/test_volumes.py b/cinderclient/tests/unit/v3/test_volumes.py
index 4613f37..f6164a5 100644
--- a/cinderclient/tests/unit/v3/test_volumes.py
+++ b/cinderclient/tests/unit/v3/test_volumes.py
@@ -15,6 +15,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+import ddt
+
from cinderclient import api_versions
from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v3 import fakes
@@ -25,6 +27,7 @@ from six.moves.urllib import parse
cs = fakes.FakeClient()
+@ddt.data
class VolumesTest(utils.TestCase):
def test_volume_manager_upload_to_image(self):
@@ -100,3 +103,13 @@ class VolumesTest(utils.TestCase):
expected = ("/volumes/detail?glance_metadata=%s"
% parse.quote_plus("{'key1': 'val1'}"))
cs.assert_called('GET', expected)
+
+ @ddt.data(True, False)
+ def test_get_pools_filter_by_name(self, detail):
+ cs = fakes.FakeClient(api_version=api_versions.APIVersion('3.33'))
+ vol = cs.volumes.get_pools(detail, 'pool1')
+ request_url = '/scheduler-stats/get_pools?name=pool1'
+ if detail:
+ request_url = '/scheduler-stats/get_pools?detail=True&name=pool1'
+ cs.assert_called('GET', request_url)
+ self._assert_request_id(vol)