From 6460f1eb359d37dc43bdbb7d3eacc6c3f5cd7ede Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Fri, 15 Nov 2013 17:40:09 -0600 Subject: Complete basic test infrastructure This finally gets all of the API tests into a common framework regarding test classes and so forth. Change-Id: If675347129c50dcba0bfc5b6c58f5a2ca57ff46c --- openstackclient/tests/object/fakes.py | 67 ---- openstackclient/tests/object/test_container.py | 361 ------------------- openstackclient/tests/object/test_object.py | 413 ---------------------- openstackclient/tests/object/v1/fakes.py | 67 ++++ openstackclient/tests/object/v1/test_container.py | 361 +++++++++++++++++++ openstackclient/tests/object/v1/test_object.py | 413 ++++++++++++++++++++++ 6 files changed, 841 insertions(+), 841 deletions(-) delete mode 100644 openstackclient/tests/object/fakes.py delete mode 100644 openstackclient/tests/object/test_container.py delete mode 100644 openstackclient/tests/object/test_object.py create mode 100644 openstackclient/tests/object/v1/fakes.py create mode 100644 openstackclient/tests/object/v1/test_container.py create mode 100644 openstackclient/tests/object/v1/test_object.py (limited to 'openstackclient/tests/object') diff --git a/openstackclient/tests/object/fakes.py b/openstackclient/tests/object/fakes.py deleted file mode 100644 index fbc784aa..00000000 --- a/openstackclient/tests/object/fakes.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2013 Nebula Inc. -# -# 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. -# - -container_name = 'bit-bucket' -container_bytes = 1024 -container_count = 1 - -container_name_2 = 'archive' -container_name_3 = 'bit-blit' - -CONTAINER = { - 'name': container_name, - 'bytes': container_bytes, - 'count': container_count, -} - -CONTAINER_2 = { - 'name': container_name_2, - 'bytes': container_bytes * 2, - 'count': container_count * 2, -} - -CONTAINER_3 = { - 'name': container_name_3, - 'bytes': container_bytes * 3, - 'count': container_count * 3, -} - -object_name_1 = 'punch-card' -object_bytes_1 = 80 -object_hash_1 = '1234567890' -object_content_type_1 = 'text' -object_modified_1 = 'today' - -object_name_2 = 'floppy-disk' -object_bytes_2 = 1440000 -object_hash_2 = '0987654321' -object_content_type_2 = 'text' -object_modified_2 = 'today' - -OBJECT = { - 'name': object_name_1, - 'bytes': object_bytes_1, - 'hash': object_hash_1, - 'content_type': object_content_type_1, - 'last_modified': object_modified_1, -} - -OBJECT_2 = { - 'name': object_name_2, - 'bytes': object_bytes_2, - 'hash': object_hash_2, - 'content_type': object_content_type_2, - 'last_modified': object_modified_2, -} diff --git a/openstackclient/tests/object/test_container.py b/openstackclient/tests/object/test_container.py deleted file mode 100644 index 24d67633..00000000 --- a/openstackclient/tests/object/test_container.py +++ /dev/null @@ -1,361 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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.common import clientmanager -from openstackclient.object.v1 import container -from openstackclient.tests.object import fakes as object_fakes -from openstackclient.tests import utils - - -AUTH_TOKEN = "foobar" -AUTH_URL = "http://0.0.0.0" - - -class FakeClient(object): - def __init__(self, endpoint=None, **kwargs): - self.endpoint = AUTH_URL - self.token = AUTH_TOKEN - - -class TestObject(utils.TestCommand): - def setUp(self): - super(TestObject, self).setUp() - - api_version = {"object-store": "1"} - self.app.client_manager = clientmanager.ClientManager( - token=AUTH_TOKEN, - url=AUTH_URL, - auth_url=AUTH_URL, - api_version=api_version, - ) - - -class TestObjectClient(TestObject): - - def test_make_client(self): - self.assertEqual(self.app.client_manager.object.endpoint, AUTH_URL) - self.assertEqual(self.app.client_manager.object.token, AUTH_TOKEN) - - -@mock.patch( - 'openstackclient.object.v1.container.lib_container.list_containers' -) -class TestContainerList(TestObject): - - def setUp(self): - super(TestContainerList, self).setUp() - - # Get the command object to test - self.cmd = container.ListContainer(self.app, None) - - def test_object_list_containers_no_options(self, c_mock): - c_mock.return_value = [ - copy.deepcopy(object_fakes.CONTAINER), - copy.deepcopy(object_fakes.CONTAINER_3), - copy.deepcopy(object_fakes.CONTAINER_2), - ] - - arglist = [] - verifylist = [] - 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 = { - } - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.container_name, ), - (object_fakes.container_name_3, ), - (object_fakes.container_name_2, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_containers_prefix(self, c_mock): - c_mock.return_value = [ - copy.deepcopy(object_fakes.CONTAINER), - copy.deepcopy(object_fakes.CONTAINER_3), - ] - - arglist = [ - '--prefix', 'bit', - ] - verifylist = [ - ('prefix', 'bit'), - ] - 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 = { - 'prefix': 'bit', - } - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.container_name, ), - (object_fakes.container_name_3, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_containers_marker(self, c_mock): - c_mock.return_value = [ - copy.deepcopy(object_fakes.CONTAINER), - copy.deepcopy(object_fakes.CONTAINER_3), - ] - - arglist = [ - '--marker', object_fakes.container_name, - ] - verifylist = [ - ('marker', object_fakes.container_name), - ] - 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 = { - 'marker': object_fakes.container_name, - } - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.container_name, ), - (object_fakes.container_name_3, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_containers_end_marker(self, c_mock): - c_mock.return_value = [ - copy.deepcopy(object_fakes.CONTAINER), - copy.deepcopy(object_fakes.CONTAINER_3), - ] - - arglist = [ - '--end-marker', object_fakes.container_name_3, - ] - verifylist = [ - ('end_marker', object_fakes.container_name_3), - ] - 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 = { - 'end_marker': object_fakes.container_name_3, - } - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.container_name, ), - (object_fakes.container_name_3, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_containers_limit(self, c_mock): - c_mock.return_value = [ - copy.deepcopy(object_fakes.CONTAINER), - copy.deepcopy(object_fakes.CONTAINER_3), - ] - - arglist = [ - '--limit', '2', - ] - verifylist = [ - ('limit', 2), - ] - 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 = { - 'limit': 2, - } - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.container_name, ), - (object_fakes.container_name_3, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_containers_long(self, c_mock): - c_mock.return_value = [ - copy.deepcopy(object_fakes.CONTAINER), - copy.deepcopy(object_fakes.CONTAINER_3), - ] - - arglist = [ - '--long', - ] - verifylist = [ - ('long', True), - ] - 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 = { - } - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - **kwargs - ) - - collist = ('Name', 'Bytes', 'Count') - self.assertEqual(columns, collist) - datalist = ( - ( - object_fakes.container_name, - object_fakes.container_bytes, - object_fakes.container_count, - ), - ( - object_fakes.container_name_3, - object_fakes.container_bytes * 3, - object_fakes.container_count * 3, - ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_containers_all(self, c_mock): - c_mock.return_value = [ - copy.deepcopy(object_fakes.CONTAINER), - copy.deepcopy(object_fakes.CONTAINER_2), - copy.deepcopy(object_fakes.CONTAINER_3), - ] - - arglist = [ - '--all', - ] - verifylist = [ - ('all', True), - ] - 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 = { - 'full_listing': True, - } - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.container_name, ), - (object_fakes.container_name_2, ), - (object_fakes.container_name_3, ), - ) - self.assertEqual(tuple(data), datalist) - - -@mock.patch( - 'openstackclient.object.v1.container.lib_container.show_container' -) -class TestContainerShow(TestObject): - - def setUp(self): - super(TestContainerShow, self).setUp() - - # Get the command object to test - self.cmd = container.ShowContainer(self.app, None) - - def test_container_show(self, c_mock): - c_mock.return_value = copy.deepcopy(object_fakes.CONTAINER) - - arglist = [ - object_fakes.container_name, - ] - verifylist = [ - ('container', object_fakes.container_name), - ] - 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 = { - } - # lib.container.show_container(api, url, container) - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name, - **kwargs - ) - - collist = ('bytes', 'count', 'name') - self.assertEqual(columns, collist) - datalist = ( - object_fakes.container_bytes, - object_fakes.container_count, - object_fakes.container_name, - ) - self.assertEqual(data, datalist) diff --git a/openstackclient/tests/object/test_object.py b/openstackclient/tests/object/test_object.py deleted file mode 100644 index 1ceb0a59..00000000 --- a/openstackclient/tests/object/test_object.py +++ /dev/null @@ -1,413 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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.common import clientmanager -from openstackclient.object.v1 import object as obj -from openstackclient.tests.object import fakes as object_fakes -from openstackclient.tests import utils - - -AUTH_TOKEN = "foobar" -AUTH_URL = "http://0.0.0.0" - - -class FakeClient(object): - def __init__(self, endpoint=None, **kwargs): - self.endpoint = AUTH_URL - self.token = AUTH_TOKEN - - -class TestObject(utils.TestCommand): - def setUp(self): - super(TestObject, self).setUp() - - api_version = {"object-store": "1"} - self.app.client_manager = clientmanager.ClientManager( - token=AUTH_TOKEN, - url=AUTH_URL, - auth_url=AUTH_URL, - api_version=api_version, - ) - - -class TestObjectClient(TestObject): - - def test_make_client(self): - self.assertEqual(self.app.client_manager.object.endpoint, AUTH_URL) - self.assertEqual(self.app.client_manager.object.token, AUTH_TOKEN) - - -@mock.patch( - 'openstackclient.object.v1.object.lib_object.list_objects' -) -class TestObjectList(TestObject): - - def setUp(self): - super(TestObjectList, self).setUp() - - # Get the command object to test - self.cmd = obj.ListObject(self.app, None) - - def test_object_list_objects_no_options(self, o_mock): - o_mock.return_value = [ - copy.deepcopy(object_fakes.OBJECT), - copy.deepcopy(object_fakes.OBJECT_2), - ] - - arglist = [ - object_fakes.container_name, - ] - verifylist = [ - ('container', object_fakes.container_name), - ] - parsed_args = self.check_parser(self.cmd, arglist, verifylist) - - # DisplayCommandBase.take_action() returns two tuples - columns, data = self.cmd.take_action(parsed_args) - - o_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name, - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.object_name_1, ), - (object_fakes.object_name_2, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_objects_prefix(self, o_mock): - o_mock.return_value = [ - copy.deepcopy(object_fakes.OBJECT_2), - ] - - arglist = [ - '--prefix', 'floppy', - object_fakes.container_name_2, - ] - verifylist = [ - ('prefix', 'floppy'), - ('container', object_fakes.container_name_2), - ] - 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 = { - 'prefix': 'floppy', - } - o_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name_2, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.object_name_2, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_objects_delimiter(self, o_mock): - o_mock.return_value = [ - copy.deepcopy(object_fakes.OBJECT_2), - ] - - arglist = [ - '--delimiter', '=', - object_fakes.container_name_2, - ] - verifylist = [ - ('delimiter', '='), - ('container', object_fakes.container_name_2), - ] - 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 = { - 'delimiter': '=', - } - o_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name_2, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.object_name_2, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_objects_marker(self, o_mock): - o_mock.return_value = [ - copy.deepcopy(object_fakes.OBJECT_2), - ] - - arglist = [ - '--marker', object_fakes.object_name_2, - object_fakes.container_name_2, - ] - verifylist = [ - ('marker', object_fakes.object_name_2), - ('container', object_fakes.container_name_2), - ] - 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 = { - 'marker': object_fakes.object_name_2, - } - o_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name_2, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.object_name_2, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_objects_end_marker(self, o_mock): - o_mock.return_value = [ - copy.deepcopy(object_fakes.OBJECT_2), - ] - - arglist = [ - '--end-marker', object_fakes.object_name_2, - object_fakes.container_name_2, - ] - verifylist = [ - ('end_marker', object_fakes.object_name_2), - ('container', object_fakes.container_name_2), - ] - 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 = { - 'end_marker': object_fakes.object_name_2, - } - o_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name_2, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.object_name_2, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_objects_limit(self, o_mock): - o_mock.return_value = [ - copy.deepcopy(object_fakes.OBJECT_2), - ] - - arglist = [ - '--limit', '2', - object_fakes.container_name_2, - ] - verifylist = [ - ('limit', 2), - ('container', object_fakes.container_name_2), - ] - 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 = { - 'limit': 2, - } - o_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name_2, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.object_name_2, ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_objects_long(self, o_mock): - o_mock.return_value = [ - copy.deepcopy(object_fakes.OBJECT), - copy.deepcopy(object_fakes.OBJECT_2), - ] - - arglist = [ - '--long', - object_fakes.container_name, - ] - verifylist = [ - ('long', True), - ('container', object_fakes.container_name), - ] - 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 = { - } - o_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name, - **kwargs - ) - - collist = ('Name', 'Bytes', 'Hash', 'Content Type', 'Last Modified') - self.assertEqual(columns, collist) - datalist = ( - ( - object_fakes.object_name_1, - object_fakes.object_bytes_1, - object_fakes.object_hash_1, - object_fakes.object_content_type_1, - object_fakes.object_modified_1, - ), - ( - object_fakes.object_name_2, - object_fakes.object_bytes_2, - object_fakes.object_hash_2, - object_fakes.object_content_type_2, - object_fakes.object_modified_2, - ), - ) - self.assertEqual(tuple(data), datalist) - - def test_object_list_objects_all(self, o_mock): - o_mock.return_value = [ - copy.deepcopy(object_fakes.OBJECT), - copy.deepcopy(object_fakes.OBJECT_2), - ] - - arglist = [ - '--all', - object_fakes.container_name, - ] - verifylist = [ - ('all', True), - ('container', object_fakes.container_name), - ] - 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 = { - 'full_listing': True, - } - o_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name, - **kwargs - ) - - collist = ('Name',) - self.assertEqual(columns, collist) - datalist = ( - (object_fakes.object_name_1, ), - (object_fakes.object_name_2, ), - ) - self.assertEqual(tuple(data), datalist) - - -@mock.patch( - 'openstackclient.object.v1.object.lib_object.show_object' -) -class TestObjectShow(TestObject): - - def setUp(self): - super(TestObjectShow, self).setUp() - - # Get the command object to test - self.cmd = obj.ShowObject(self.app, None) - - def test_object_show(self, c_mock): - c_mock.return_value = copy.deepcopy(object_fakes.OBJECT) - - arglist = [ - object_fakes.container_name, - object_fakes.object_name_1, - ] - verifylist = [ - ('container', object_fakes.container_name), - ('object', object_fakes.object_name_1), - ] - 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 = { - } - # lib.container.show_container(api, url, container) - c_mock.assert_called_with( - self.app.restapi, - AUTH_URL, - object_fakes.container_name, - object_fakes.object_name_1, - **kwargs - ) - - collist = ('bytes', 'content_type', 'hash', 'last_modified', 'name') - self.assertEqual(columns, collist) - datalist = ( - object_fakes.object_bytes_1, - object_fakes.object_content_type_1, - object_fakes.object_hash_1, - object_fakes.object_modified_1, - object_fakes.object_name_1, - ) - self.assertEqual(data, datalist) diff --git a/openstackclient/tests/object/v1/fakes.py b/openstackclient/tests/object/v1/fakes.py new file mode 100644 index 00000000..fbc784aa --- /dev/null +++ b/openstackclient/tests/object/v1/fakes.py @@ -0,0 +1,67 @@ +# Copyright 2013 Nebula Inc. +# +# 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. +# + +container_name = 'bit-bucket' +container_bytes = 1024 +container_count = 1 + +container_name_2 = 'archive' +container_name_3 = 'bit-blit' + +CONTAINER = { + 'name': container_name, + 'bytes': container_bytes, + 'count': container_count, +} + +CONTAINER_2 = { + 'name': container_name_2, + 'bytes': container_bytes * 2, + 'count': container_count * 2, +} + +CONTAINER_3 = { + 'name': container_name_3, + 'bytes': container_bytes * 3, + 'count': container_count * 3, +} + +object_name_1 = 'punch-card' +object_bytes_1 = 80 +object_hash_1 = '1234567890' +object_content_type_1 = 'text' +object_modified_1 = 'today' + +object_name_2 = 'floppy-disk' +object_bytes_2 = 1440000 +object_hash_2 = '0987654321' +object_content_type_2 = 'text' +object_modified_2 = 'today' + +OBJECT = { + 'name': object_name_1, + 'bytes': object_bytes_1, + 'hash': object_hash_1, + 'content_type': object_content_type_1, + 'last_modified': object_modified_1, +} + +OBJECT_2 = { + 'name': object_name_2, + 'bytes': object_bytes_2, + 'hash': object_hash_2, + 'content_type': object_content_type_2, + 'last_modified': object_modified_2, +} diff --git a/openstackclient/tests/object/v1/test_container.py b/openstackclient/tests/object/v1/test_container.py new file mode 100644 index 00000000..2090b880 --- /dev/null +++ b/openstackclient/tests/object/v1/test_container.py @@ -0,0 +1,361 @@ +# Copyright 2013 OpenStack Foundation +# +# 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.common import clientmanager +from openstackclient.object.v1 import container +from openstackclient.tests.object.v1 import fakes as object_fakes +from openstackclient.tests import utils + + +AUTH_TOKEN = "foobar" +AUTH_URL = "http://0.0.0.0" + + +class FakeClient(object): + def __init__(self, endpoint=None, **kwargs): + self.endpoint = AUTH_URL + self.token = AUTH_TOKEN + + +class TestObject(utils.TestCommand): + def setUp(self): + super(TestObject, self).setUp() + + api_version = {"object-store": "1"} + self.app.client_manager = clientmanager.ClientManager( + token=AUTH_TOKEN, + url=AUTH_URL, + auth_url=AUTH_URL, + api_version=api_version, + ) + + +class TestObjectClient(TestObject): + + def test_make_client(self): + self.assertEqual(self.app.client_manager.object.endpoint, AUTH_URL) + self.assertEqual(self.app.client_manager.object.token, AUTH_TOKEN) + + +@mock.patch( + 'openstackclient.object.v1.container.lib_container.list_containers' +) +class TestContainerList(TestObject): + + def setUp(self): + super(TestContainerList, self).setUp() + + # Get the command object to test + self.cmd = container.ListContainer(self.app, None) + + def test_object_list_containers_no_options(self, c_mock): + c_mock.return_value = [ + copy.deepcopy(object_fakes.CONTAINER), + copy.deepcopy(object_fakes.CONTAINER_3), + copy.deepcopy(object_fakes.CONTAINER_2), + ] + + arglist = [] + verifylist = [] + 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 = { + } + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.container_name, ), + (object_fakes.container_name_3, ), + (object_fakes.container_name_2, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_containers_prefix(self, c_mock): + c_mock.return_value = [ + copy.deepcopy(object_fakes.CONTAINER), + copy.deepcopy(object_fakes.CONTAINER_3), + ] + + arglist = [ + '--prefix', 'bit', + ] + verifylist = [ + ('prefix', 'bit'), + ] + 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 = { + 'prefix': 'bit', + } + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.container_name, ), + (object_fakes.container_name_3, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_containers_marker(self, c_mock): + c_mock.return_value = [ + copy.deepcopy(object_fakes.CONTAINER), + copy.deepcopy(object_fakes.CONTAINER_3), + ] + + arglist = [ + '--marker', object_fakes.container_name, + ] + verifylist = [ + ('marker', object_fakes.container_name), + ] + 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 = { + 'marker': object_fakes.container_name, + } + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.container_name, ), + (object_fakes.container_name_3, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_containers_end_marker(self, c_mock): + c_mock.return_value = [ + copy.deepcopy(object_fakes.CONTAINER), + copy.deepcopy(object_fakes.CONTAINER_3), + ] + + arglist = [ + '--end-marker', object_fakes.container_name_3, + ] + verifylist = [ + ('end_marker', object_fakes.container_name_3), + ] + 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 = { + 'end_marker': object_fakes.container_name_3, + } + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.container_name, ), + (object_fakes.container_name_3, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_containers_limit(self, c_mock): + c_mock.return_value = [ + copy.deepcopy(object_fakes.CONTAINER), + copy.deepcopy(object_fakes.CONTAINER_3), + ] + + arglist = [ + '--limit', '2', + ] + verifylist = [ + ('limit', 2), + ] + 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 = { + 'limit': 2, + } + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.container_name, ), + (object_fakes.container_name_3, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_containers_long(self, c_mock): + c_mock.return_value = [ + copy.deepcopy(object_fakes.CONTAINER), + copy.deepcopy(object_fakes.CONTAINER_3), + ] + + arglist = [ + '--long', + ] + verifylist = [ + ('long', True), + ] + 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 = { + } + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + **kwargs + ) + + collist = ('Name', 'Bytes', 'Count') + self.assertEqual(columns, collist) + datalist = ( + ( + object_fakes.container_name, + object_fakes.container_bytes, + object_fakes.container_count, + ), + ( + object_fakes.container_name_3, + object_fakes.container_bytes * 3, + object_fakes.container_count * 3, + ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_containers_all(self, c_mock): + c_mock.return_value = [ + copy.deepcopy(object_fakes.CONTAINER), + copy.deepcopy(object_fakes.CONTAINER_2), + copy.deepcopy(object_fakes.CONTAINER_3), + ] + + arglist = [ + '--all', + ] + verifylist = [ + ('all', True), + ] + 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 = { + 'full_listing': True, + } + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.container_name, ), + (object_fakes.container_name_2, ), + (object_fakes.container_name_3, ), + ) + self.assertEqual(tuple(data), datalist) + + +@mock.patch( + 'openstackclient.object.v1.container.lib_container.show_container' +) +class TestContainerShow(TestObject): + + def setUp(self): + super(TestContainerShow, self).setUp() + + # Get the command object to test + self.cmd = container.ShowContainer(self.app, None) + + def test_container_show(self, c_mock): + c_mock.return_value = copy.deepcopy(object_fakes.CONTAINER) + + arglist = [ + object_fakes.container_name, + ] + verifylist = [ + ('container', object_fakes.container_name), + ] + 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 = { + } + # lib.container.show_container(api, url, container) + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name, + **kwargs + ) + + collist = ('bytes', 'count', 'name') + self.assertEqual(columns, collist) + datalist = ( + object_fakes.container_bytes, + object_fakes.container_count, + object_fakes.container_name, + ) + self.assertEqual(data, datalist) diff --git a/openstackclient/tests/object/v1/test_object.py b/openstackclient/tests/object/v1/test_object.py new file mode 100644 index 00000000..52b5ebd0 --- /dev/null +++ b/openstackclient/tests/object/v1/test_object.py @@ -0,0 +1,413 @@ +# Copyright 2013 OpenStack Foundation +# +# 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.common import clientmanager +from openstackclient.object.v1 import object as obj +from openstackclient.tests.object.v1 import fakes as object_fakes +from openstackclient.tests import utils + + +AUTH_TOKEN = "foobar" +AUTH_URL = "http://0.0.0.0" + + +class FakeClient(object): + def __init__(self, endpoint=None, **kwargs): + self.endpoint = AUTH_URL + self.token = AUTH_TOKEN + + +class TestObject(utils.TestCommand): + def setUp(self): + super(TestObject, self).setUp() + + api_version = {"object-store": "1"} + self.app.client_manager = clientmanager.ClientManager( + token=AUTH_TOKEN, + url=AUTH_URL, + auth_url=AUTH_URL, + api_version=api_version, + ) + + +class TestObjectClient(TestObject): + + def test_make_client(self): + self.assertEqual(self.app.client_manager.object.endpoint, AUTH_URL) + self.assertEqual(self.app.client_manager.object.token, AUTH_TOKEN) + + +@mock.patch( + 'openstackclient.object.v1.object.lib_object.list_objects' +) +class TestObjectList(TestObject): + + def setUp(self): + super(TestObjectList, self).setUp() + + # Get the command object to test + self.cmd = obj.ListObject(self.app, None) + + def test_object_list_objects_no_options(self, o_mock): + o_mock.return_value = [ + copy.deepcopy(object_fakes.OBJECT), + copy.deepcopy(object_fakes.OBJECT_2), + ] + + arglist = [ + object_fakes.container_name, + ] + verifylist = [ + ('container', object_fakes.container_name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + + o_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name, + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.object_name_1, ), + (object_fakes.object_name_2, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_objects_prefix(self, o_mock): + o_mock.return_value = [ + copy.deepcopy(object_fakes.OBJECT_2), + ] + + arglist = [ + '--prefix', 'floppy', + object_fakes.container_name_2, + ] + verifylist = [ + ('prefix', 'floppy'), + ('container', object_fakes.container_name_2), + ] + 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 = { + 'prefix': 'floppy', + } + o_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name_2, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.object_name_2, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_objects_delimiter(self, o_mock): + o_mock.return_value = [ + copy.deepcopy(object_fakes.OBJECT_2), + ] + + arglist = [ + '--delimiter', '=', + object_fakes.container_name_2, + ] + verifylist = [ + ('delimiter', '='), + ('container', object_fakes.container_name_2), + ] + 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 = { + 'delimiter': '=', + } + o_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name_2, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.object_name_2, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_objects_marker(self, o_mock): + o_mock.return_value = [ + copy.deepcopy(object_fakes.OBJECT_2), + ] + + arglist = [ + '--marker', object_fakes.object_name_2, + object_fakes.container_name_2, + ] + verifylist = [ + ('marker', object_fakes.object_name_2), + ('container', object_fakes.container_name_2), + ] + 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 = { + 'marker': object_fakes.object_name_2, + } + o_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name_2, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.object_name_2, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_objects_end_marker(self, o_mock): + o_mock.return_value = [ + copy.deepcopy(object_fakes.OBJECT_2), + ] + + arglist = [ + '--end-marker', object_fakes.object_name_2, + object_fakes.container_name_2, + ] + verifylist = [ + ('end_marker', object_fakes.object_name_2), + ('container', object_fakes.container_name_2), + ] + 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 = { + 'end_marker': object_fakes.object_name_2, + } + o_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name_2, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.object_name_2, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_objects_limit(self, o_mock): + o_mock.return_value = [ + copy.deepcopy(object_fakes.OBJECT_2), + ] + + arglist = [ + '--limit', '2', + object_fakes.container_name_2, + ] + verifylist = [ + ('limit', 2), + ('container', object_fakes.container_name_2), + ] + 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 = { + 'limit': 2, + } + o_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name_2, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.object_name_2, ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_objects_long(self, o_mock): + o_mock.return_value = [ + copy.deepcopy(object_fakes.OBJECT), + copy.deepcopy(object_fakes.OBJECT_2), + ] + + arglist = [ + '--long', + object_fakes.container_name, + ] + verifylist = [ + ('long', True), + ('container', object_fakes.container_name), + ] + 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 = { + } + o_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name, + **kwargs + ) + + collist = ('Name', 'Bytes', 'Hash', 'Content Type', 'Last Modified') + self.assertEqual(columns, collist) + datalist = ( + ( + object_fakes.object_name_1, + object_fakes.object_bytes_1, + object_fakes.object_hash_1, + object_fakes.object_content_type_1, + object_fakes.object_modified_1, + ), + ( + object_fakes.object_name_2, + object_fakes.object_bytes_2, + object_fakes.object_hash_2, + object_fakes.object_content_type_2, + object_fakes.object_modified_2, + ), + ) + self.assertEqual(tuple(data), datalist) + + def test_object_list_objects_all(self, o_mock): + o_mock.return_value = [ + copy.deepcopy(object_fakes.OBJECT), + copy.deepcopy(object_fakes.OBJECT_2), + ] + + arglist = [ + '--all', + object_fakes.container_name, + ] + verifylist = [ + ('all', True), + ('container', object_fakes.container_name), + ] + 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 = { + 'full_listing': True, + } + o_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name, + **kwargs + ) + + collist = ('Name',) + self.assertEqual(columns, collist) + datalist = ( + (object_fakes.object_name_1, ), + (object_fakes.object_name_2, ), + ) + self.assertEqual(tuple(data), datalist) + + +@mock.patch( + 'openstackclient.object.v1.object.lib_object.show_object' +) +class TestObjectShow(TestObject): + + def setUp(self): + super(TestObjectShow, self).setUp() + + # Get the command object to test + self.cmd = obj.ShowObject(self.app, None) + + def test_object_show(self, c_mock): + c_mock.return_value = copy.deepcopy(object_fakes.OBJECT) + + arglist = [ + object_fakes.container_name, + object_fakes.object_name_1, + ] + verifylist = [ + ('container', object_fakes.container_name), + ('object', object_fakes.object_name_1), + ] + 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 = { + } + # lib.container.show_container(api, url, container) + c_mock.assert_called_with( + self.app.restapi, + AUTH_URL, + object_fakes.container_name, + object_fakes.object_name_1, + **kwargs + ) + + collist = ('bytes', 'content_type', 'hash', 'last_modified', 'name') + self.assertEqual(columns, collist) + datalist = ( + object_fakes.object_bytes_1, + object_fakes.object_content_type_1, + object_fakes.object_hash_1, + object_fakes.object_modified_1, + object_fakes.object_name_1, + ) + self.assertEqual(data, datalist) -- cgit v1.2.1