diff options
Diffstat (limited to 'openstackclient/tests')
| -rw-r--r-- | openstackclient/tests/fakes.py | 1 | ||||
| -rw-r--r-- | openstackclient/tests/network/__init__.py | 0 | ||||
| -rw-r--r-- | openstackclient/tests/network/common.py | 52 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2_0/__init__.py | 0 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2_0/test_network.py | 319 | ||||
| -rw-r--r-- | openstackclient/tests/test_shell.py | 11 |
6 files changed, 381 insertions, 2 deletions
diff --git a/openstackclient/tests/fakes.py b/openstackclient/tests/fakes.py index 4c50c0be..fb27ef94 100644 --- a/openstackclient/tests/fakes.py +++ b/openstackclient/tests/fakes.py @@ -52,6 +52,7 @@ class FakeClientManager(object): self.image = None self.object = None self.volume = None + self.network = None self.auth_ref = None diff --git a/openstackclient/tests/network/__init__.py b/openstackclient/tests/network/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/openstackclient/tests/network/__init__.py diff --git a/openstackclient/tests/network/common.py b/openstackclient/tests/network/common.py new file mode 100644 index 00000000..9c5a5ce9 --- /dev/null +++ b/openstackclient/tests/network/common.py @@ -0,0 +1,52 @@ +# 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 argparse +import mock + +from openstackclient.tests import utils + + +class TestNetworkBase(utils.TestCommand): + def setUp(self): + super(TestNetworkBase, self).setUp() + self.app = mock.Mock(name='app') + self.app.client_manager = mock.Mock(name='client_manager') + self.namespace = argparse.Namespace() + + given_show_options = [ + '-f', + 'shell', + '-c', + 'id', + '--prefix', + 'TST', + ] + then_show_options = [ + ('formatter', 'shell'), + ('columns', ['id']), + ('prefix', 'TST'), + ] + given_list_options = [ + '-f', + 'csv', + '-c', + 'id', + '--quote', + 'all', + ] + then_list_options = [ + ('formatter', 'csv'), + ('columns', ['id']), + ('quote_mode', 'all'), + ] diff --git a/openstackclient/tests/network/v2_0/__init__.py b/openstackclient/tests/network/v2_0/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/openstackclient/tests/network/v2_0/__init__.py diff --git a/openstackclient/tests/network/v2_0/test_network.py b/openstackclient/tests/network/v2_0/test_network.py new file mode 100644 index 00000000..ef7d24ee --- /dev/null +++ b/openstackclient/tests/network/v2_0/test_network.py @@ -0,0 +1,319 @@ +# 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 exceptions +from openstackclient.network.v2_0 import network +from openstackclient.tests.network import common + +RESOURCE = 'network' +RESOURCES = 'networks' +FAKE_ID = 'iditty' +FAKE_NAME = 'noo' +RECORD = { + 'id': FAKE_ID, + 'name': FAKE_NAME, + 'router:external': True, + 'subnets': ['a', 'b'], +} +COLUMNS = ['id', 'name', 'subnets'] +RESPONSE = {RESOURCE: RECORD} +FILTERED = [('id', 'name', 'router:external', 'subnets'), + (FAKE_ID, FAKE_NAME, True, 'a, b')] + + +class TestCreateNetwork(common.TestNetworkBase): + def test_create_no_options(self): + arglist = [ + FAKE_NAME, + ] + verifylist = [ + ('name', FAKE_NAME), + ('admin_state', True), + ('shared', None), + ] + mocker = mock.Mock(return_value=copy.deepcopy(RESPONSE)) + self.app.client_manager.network.create_network = mocker + cmd = network.CreateNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + mocker.assert_called_with({ + RESOURCE: { + 'admin_state_up': True, + 'name': FAKE_NAME, + } + }) + self.assertEqual(FILTERED, result) + + def test_create_all_options(self): + arglist = [ + "--admin-state-down", + "--share", + FAKE_NAME, + ] + self.given_show_options + verifylist = [ + ('admin_state', False), + ('shared', True), + ('name', FAKE_NAME), + ] + self.then_show_options + mocker = mock.Mock(return_value=copy.deepcopy(RESPONSE)) + self.app.client_manager.network.create_network = mocker + cmd = network.CreateNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + mocker.assert_called_with({ + RESOURCE: { + 'admin_state_up': False, + 'name': FAKE_NAME, + 'shared': True, + } + }) + self.assertEqual(FILTERED, result) + + def test_create_other_options(self): + arglist = [ + "--admin-state-up", + "--no-share", + FAKE_NAME, + ] + verifylist = [ + ('admin_state', True), + ('shared', False), + ('name', FAKE_NAME), + ] + mocker = mock.Mock(return_value=copy.deepcopy(RESPONSE)) + self.app.client_manager.network.create_network = mocker + cmd = network.CreateNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + mocker.assert_called_with({ + RESOURCE: { + 'admin_state_up': True, + 'name': FAKE_NAME, + 'shared': False, + } + }) + self.assertEqual(FILTERED, result) + + +class TestDeleteNetwork(common.TestNetworkBase): + def test_delete(self): + arglist = [ + FAKE_NAME, + ] + verifylist = [ + ('identifier', FAKE_NAME), + ] + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + mocker = mock.Mock(return_value=None) + self.app.client_manager.network.delete_network = mocker + cmd = network.DeleteNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + mocker.assert_called_with(FAKE_ID) + self.assertEqual(None, result) + + +class TestListNetwork(common.TestNetworkBase): + def test_list_no_options(self): + arglist = [] + verifylist = [ + ('long', False), + ('dhcp', None), + ('external', False), + ] + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + cmd = network.ListNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + lister.assert_called_with() + self.assertEqual(COLUMNS, result[0]) + self.assertEqual((FAKE_ID, FAKE_NAME, 'a, b'), next(result[1])) + self.assertRaises(StopIteration, next, result[1]) + + def test_list_long(self): + arglist = ['--long'] + verifylist = [ + ('long', True), + ('dhcp', None), + ('external', False), + ] + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + cmd = network.ListNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + lister.assert_called_with() + headings = ['id', 'name', 'router:external', 'subnets'] + self.assertEqual(headings, result[0]) + data = (FAKE_ID, FAKE_NAME, True, 'a, b') + self.assertEqual(data, next(result[1])) + self.assertRaises(StopIteration, next, result[1]) + + def test_list_dhcp(self): + arglist = [ + '--dhcp', + 'dhcpid', + ] + self.given_list_options + verifylist = [ + ('dhcp', 'dhcpid'), + ] + self.then_list_options + fake_dhcp_data = [{'id': '1'}, {'id': '2'}] + fake_dhcp_response = {'networks_on_dhcp_agent': fake_dhcp_data} + lister = mock.Mock(return_value=fake_dhcp_response) + netty = self.app.client_manager.network + netty.list_networks_on_dhcp_agent = lister + cmd = network.ListNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + lister.assert_called_with(dhcp_agent='dhcpid') + self.assertEqual(['id'], result[0]) + self.assertEqual(('1',), next(result[1])) + self.assertEqual(('2',), next(result[1])) + self.assertRaises(StopIteration, next, result[1]) + + def test_list_external(self): + arglist = ['--external', '-c', 'id'] + verifylist = [('external', True)] + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + cmd = network.ListNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + lister.assert_called_with(**{'router:external': True}) + self.assertEqual(['id'], result[0]) + self.assertEqual((FAKE_ID,), next(result[1])) + self.assertRaises(StopIteration, next, result[1]) + + +class TestSetNetwork(common.TestNetworkBase): + def test_set_this(self): + arglist = [ + FAKE_NAME, + '--admin-state-up', + '--name', 'noob', + '--share', + ] + verifylist = [ + ('identifier', FAKE_NAME), + ('admin_state', True), + ('name', 'noob'), + ('shared', True), + ] + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + mocker = mock.Mock(return_value=None) + self.app.client_manager.network.update_network = mocker + cmd = network.SetNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + exp = {'admin_state_up': True, 'name': 'noob', 'shared': True} + exp_record = {RESOURCE: exp} + mocker.assert_called_with(FAKE_ID, exp_record) + self.assertEqual(None, result) + + def test_set_that(self): + arglist = [ + FAKE_NAME, + '--admin-state-down', + '--no-share', + ] + verifylist = [ + ('identifier', FAKE_NAME), + ('admin_state', False), + ('shared', False), + ] + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + mocker = mock.Mock(return_value=None) + self.app.client_manager.network.update_network = mocker + cmd = network.SetNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + exp = {'admin_state_up': False, 'shared': False} + exp_record = {RESOURCE: exp} + mocker.assert_called_with(FAKE_ID, exp_record) + self.assertEqual(None, result) + + def test_set_nothing(self): + arglist = [FAKE_NAME, ] + verifylist = [('identifier', FAKE_NAME), ] + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + mocker = mock.Mock(return_value=None) + self.app.client_manager.network.update_network = mocker + cmd = network.SetNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + self.assertRaises(exceptions.CommandError, cmd.take_action, + parsed_args) + + +class TestShowNetwork(common.TestNetworkBase): + def test_show_no_options(self): + arglist = [ + FAKE_NAME, + ] + verifylist = [ + ('identifier', FAKE_NAME), + ] + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + mocker = mock.Mock(return_value=copy.deepcopy(RESPONSE)) + self.app.client_manager.network.show_network = mocker + cmd = network.ShowNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + mocker.assert_called_with(FAKE_ID) + self.assertEqual(FILTERED, result) + + def test_show_all_options(self): + arglist = [FAKE_NAME] + self.given_show_options + verifylist = [('identifier', FAKE_NAME)] + self.then_show_options + lister = mock.Mock(return_value={RESOURCES: [RECORD]}) + self.app.client_manager.network.list_networks = lister + mocker = mock.Mock(return_value=copy.deepcopy(RESPONSE)) + self.app.client_manager.network.show_network = mocker + cmd = network.ShowNetwork(self.app, self.namespace) + + parsed_args = self.check_parser(cmd, arglist, verifylist) + result = cmd.take_action(parsed_args) + + mocker.assert_called_with(FAKE_ID) + self.assertEqual(FILTERED, result) diff --git a/openstackclient/tests/test_shell.py b/openstackclient/tests/test_shell.py index 9253f701..2ee8503a 100644 --- a/openstackclient/tests/test_shell.py +++ b/openstackclient/tests/test_shell.py @@ -39,11 +39,13 @@ DEFAULT_COMPUTE_API_VERSION = "2" DEFAULT_IDENTITY_API_VERSION = "2.0" DEFAULT_IMAGE_API_VERSION = "v2" DEFAULT_VOLUME_API_VERSION = "1" +DEFAULT_NETWORK_API_VERSION = "2.0" LIB_COMPUTE_API_VERSION = "2" LIB_IDENTITY_API_VERSION = "2.0" LIB_IMAGE_API_VERSION = "1" LIB_VOLUME_API_VERSION = "1" +LIB_NETWORK_API_VERSION = "2.0" def make_shell(): @@ -128,6 +130,8 @@ class TestShell(utils.TestCase): default_args["image_api_version"]) self.assertEqual(_shell.options.os_volume_api_version, default_args["volume_api_version"]) + self.assertEqual(_shell.options.os_network_api_version, + default_args["network_api_version"]) class TestShellHelp(TestShell): @@ -455,6 +459,7 @@ class TestShellCli(TestShell): "OS_IDENTITY_API_VERSION": DEFAULT_IDENTITY_API_VERSION, "OS_IMAGE_API_VERSION": DEFAULT_IMAGE_API_VERSION, "OS_VOLUME_API_VERSION": DEFAULT_VOLUME_API_VERSION, + "OS_NETWORK_API_VERSION": DEFAULT_NETWORK_API_VERSION, } self.orig_env, os.environ = os.environ, env.copy() @@ -475,7 +480,8 @@ class TestShellCli(TestShell): "compute_api_version": DEFAULT_COMPUTE_API_VERSION, "identity_api_version": DEFAULT_IDENTITY_API_VERSION, "image_api_version": DEFAULT_IMAGE_API_VERSION, - "volume_api_version": DEFAULT_VOLUME_API_VERSION + "volume_api_version": DEFAULT_VOLUME_API_VERSION, + "network_api_version": DEFAULT_NETWORK_API_VERSION, } self._assert_cli(flag, kwargs) @@ -486,6 +492,7 @@ class TestShellCli(TestShell): "compute_api_version": LIB_COMPUTE_API_VERSION, "identity_api_version": LIB_IDENTITY_API_VERSION, "image_api_version": LIB_IMAGE_API_VERSION, - "volume_api_version": LIB_VOLUME_API_VERSION + "volume_api_version": LIB_VOLUME_API_VERSION, + "network_api_version": LIB_NETWORK_API_VERSION } self._assert_cli(flag, kwargs) |
