diff options
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/network/v2/network.py | 67 | ||||
| -rw-r--r-- | openstackclient/tests/image/v1/test_image.py | 26 | ||||
| -rw-r--r-- | openstackclient/tests/image/v2/test_image.py | 54 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_network.py | 114 |
4 files changed, 206 insertions, 55 deletions
diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py index fd7ab8fb..308e0e52 100644 --- a/openstackclient/network/v2/network.py +++ b/openstackclient/network/v2/network.py @@ -75,30 +75,27 @@ def _get_attrs(client_manager, parsed_args): return attrs -class CreateNetwork(command.ShowOne): +def _get_attrs_compute(client_manager, parsed_args): + attrs = {} + if parsed_args.name is not None: + attrs['label'] = str(parsed_args.name) + if parsed_args.shared is not None: + attrs['share_address'] = parsed_args.shared + if parsed_args.subnet is not None: + attrs['cidr'] = parsed_args.subnet + + return attrs + + +class CreateNetwork(common.NetworkAndComputeShowOne): """Create new network""" - def get_parser(self, prog_name): - parser = super(CreateNetwork, self).get_parser(prog_name) + def update_parser_common(self, parser): parser.add_argument( 'name', metavar='<name>', help='New network name', ) - admin_group = parser.add_mutually_exclusive_group() - admin_group.add_argument( - '--enable', - dest='admin_state', - action='store_true', - default=True, - help='Enable network (default)', - ) - admin_group.add_argument( - '--disable', - dest='admin_state', - action='store_false', - help='Disable network', - ) share_group = parser.add_mutually_exclusive_group() share_group.add_argument( '--share', @@ -113,13 +110,29 @@ class CreateNetwork(command.ShowOne): action='store_false', help='Do not share the network between projects', ) + return parser + + def update_parser_network(self, parser): + admin_group = parser.add_mutually_exclusive_group() + admin_group.add_argument( + '--enable', + dest='admin_state', + action='store_true', + default=True, + help='Enable network (default)', + ) + admin_group.add_argument( + '--disable', + dest='admin_state', + action='store_false', + help='Disable network', + ) parser.add_argument( '--project', metavar='<project>', help="Owner's project (name or ID)" ) identity_common.add_project_domain_option_to_parser(parser) - parser.add_argument( '--availability-zone-hint', action='append', @@ -131,16 +144,28 @@ class CreateNetwork(command.ShowOne): ) return parser - def take_action(self, parsed_args): - client = self.app.client_manager.network + def update_parser_compute(self, parser): + parser.add_argument( + '--subnet', + metavar='<subnet>', + help="IPv4 subnet for fixed IPs (in CIDR notation)" + ) + return parser + def take_action_network(self, client, parsed_args): attrs = _get_attrs(self.app.client_manager, parsed_args) obj = client.create_network(**attrs) columns = _get_columns(obj) - data = utils.get_item_properties(obj, columns, formatters=_formatters) return (columns, data) + def take_action_compute(self, client, parsed_args): + attrs = _get_attrs_compute(self.app.client_manager, parsed_args) + obj = client.networks.create(**attrs) + columns = tuple(sorted(obj._info.keys())) + data = utils.get_dict_properties(obj._info, columns) + return (columns, data) + class DeleteNetwork(common.NetworkAndComputeCommand): """Delete network(s)""" diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py index 201105a4..018e1199 100644 --- a/openstackclient/tests/image/v1/test_image.py +++ b/openstackclient/tests/image/v1/test_image.py @@ -236,11 +236,10 @@ class TestImageDelete(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) - self.images_mock.delete.assert_called_with( - image_fakes.image_id, - ) + self.images_mock.delete.assert_called_with(image_fakes.image_id) + self.assertIsNone(result) class TestImageList(TestImage): @@ -473,10 +472,11 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) # Verify update() was not called, if it was show the args self.assertEqual(self.images_mock.update.call_args_list, []) + self.assertIsNone(result) def test_image_set_options(self): arglist = [ @@ -501,7 +501,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'name': 'new-name', @@ -517,6 +517,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_bools1(self): arglist = [ @@ -533,7 +534,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'protected': True, @@ -544,6 +545,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_bools2(self): arglist = [ @@ -560,7 +562,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'protected': False, @@ -571,6 +573,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_properties(self): arglist = [ @@ -584,7 +587,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'properties': { @@ -598,6 +601,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_update_volume(self): # Set up VolumeManager Mock @@ -639,7 +643,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) # VolumeManager.upload_to_image(volume, force, image_name, # container_format, disk_format) @@ -650,13 +654,13 @@ class TestImageSet(TestImage): '', '', ) - # ImageManager.update(image_id, remove_props=, **) self.images_mock.update.assert_called_with( image_fakes.image_id, name='updated_image', volume='volly', ) + self.assertIsNone(result) class TestImageShow(TestImage): diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py index b8e137f8..0248f30b 100644 --- a/openstackclient/tests/image/v2/test_image.py +++ b/openstackclient/tests/image/v2/test_image.py @@ -445,11 +445,10 @@ class TestImageDelete(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) - self.images_mock.delete.assert_called_with( - images[0].id, - ) + self.images_mock.delete.assert_called_with(images[0].id) + self.assertIsNone(result) def test_image_delete_multi_images(self): images = self.setup_images_mock(count=3) @@ -458,14 +457,13 @@ class TestImageDelete(TestImage): verifylist = [ ('images', arglist), ] - parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) calls = [mock.call(i.id) for i in images] - self.images_mock.delete.assert_has_calls(calls) + self.assertIsNone(result) class TestImageList(TestImage): @@ -753,11 +751,13 @@ class TestRemoveProjectImage(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) + self.image_members_mock.delete.assert_called_with( image_fakes.image_id, identity_fakes.project_id, ) + self.assertIsNone(result) def test_remove_project_image_with_options(self): arglist = [ @@ -772,11 +772,13 @@ class TestRemoveProjectImage(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) + self.image_members_mock.delete.assert_called_with( image_fakes.image_id, identity_fakes.project_id, ) + self.assertIsNone(result) class TestImageSet(TestImage): @@ -829,7 +831,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'name': 'new-name', @@ -842,6 +844,7 @@ class TestImageSet(TestImage): # ImageManager.update(image, **kwargs) self.images_mock.update.assert_called_with( image_fakes.image_id, **kwargs) + self.assertIsNone(result) def test_image_set_with_unexist_owner(self): self.project_mock.get.side_effect = exceptions.NotFound(None) @@ -855,7 +858,6 @@ class TestImageSet(TestImage): ('owner', 'unexist_owner'), ('image', image_fakes.image_id), ] - parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.assertRaises( @@ -874,7 +876,6 @@ class TestImageSet(TestImage): ('project', 'unexist_owner'), ('image', image_fakes.image_id), ] - parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.assertRaises( @@ -896,7 +897,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'protected': True, @@ -907,6 +908,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_bools2(self): arglist = [ @@ -923,7 +925,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'protected': False, @@ -934,6 +936,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_properties(self): arglist = [ @@ -947,7 +950,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'Alpha': '1', @@ -958,6 +961,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_fake_properties(self): arglist = [ @@ -980,7 +984,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'architecture': 'z80', @@ -995,6 +999,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_tag(self): arglist = [ @@ -1007,7 +1012,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'tags': ['test-tag'], @@ -1017,6 +1022,7 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_activate(self): arglist = [ @@ -1030,7 +1036,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'tags': ['test-tag'], @@ -1039,12 +1045,12 @@ class TestImageSet(TestImage): self.images_mock.reactivate.assert_called_with( image_fakes.image_id, ) - # ImageManager.update(image, **kwargs) self.images_mock.update.assert_called_with( image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_deactivate(self): arglist = [ @@ -1058,7 +1064,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'tags': ['test-tag'], @@ -1067,12 +1073,12 @@ class TestImageSet(TestImage): self.images_mock.deactivate.assert_called_with( image_fakes.image_id, ) - # ImageManager.update(image, **kwargs) self.images_mock.update.assert_called_with( image_fakes.image_id, **kwargs ) + self.assertIsNone(result) def test_image_set_tag_merge(self): old_image = copy.copy(image_fakes.IMAGE) @@ -1088,7 +1094,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'tags': ['old1', 'new2', 'test-tag'], @@ -1098,6 +1104,7 @@ class TestImageSet(TestImage): self.assertEqual(image_fakes.image_id, a[0]) self.assertTrue('tags' in k) self.assertEqual(set(kwargs['tags']), set(k['tags'])) + self.assertIsNone(result) def test_image_set_tag_merge_dupe(self): old_image = copy.copy(image_fakes.IMAGE) @@ -1113,7 +1120,7 @@ class TestImageSet(TestImage): ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.cmd.take_action(parsed_args) + result = self.cmd.take_action(parsed_args) kwargs = { 'tags': ['new2', 'old1'], @@ -1123,6 +1130,7 @@ class TestImageSet(TestImage): self.assertEqual(image_fakes.image_id, a[0]) self.assertTrue('tags' in k) self.assertEqual(set(kwargs['tags']), set(k['tags'])) + self.assertIsNone(result) def test_image_set_dead_options(self): diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py index 26a9da40..e70a66c1 100644 --- a/openstackclient/tests/network/v2/test_network.py +++ b/openstackclient/tests/network/v2/test_network.py @@ -576,6 +576,120 @@ class TestNetworkCompute(compute_fakes.TestComputev2): self.compute = self.app.client_manager.compute +class TestCreateNetworkCompute(TestNetworkCompute): + + # The network to create. + _network = compute_fakes.FakeNetwork.create_one_network() + + columns = ( + 'bridge', + 'bridge_interface', + 'broadcast', + 'cidr', + 'cidr_v6', + 'created_at', + 'deleted', + 'deleted_at', + 'dhcp_server', + 'dhcp_start', + 'dns1', + 'dns2', + 'enable_dhcp', + 'gateway', + 'gateway_v6', + 'host', + 'id', + 'injected', + 'label', + 'mtu', + 'multi_host', + 'netmask', + 'netmask_v6', + 'priority', + 'project_id', + 'rxtx_base', + 'share_address', + 'updated_at', + 'vlan', + 'vpn_private_address', + 'vpn_public_address', + 'vpn_public_port', + ) + + data = ( + _network.bridge, + _network.bridge_interface, + _network.broadcast, + _network.cidr, + _network.cidr_v6, + _network.created_at, + _network.deleted, + _network.deleted_at, + _network.dhcp_server, + _network.dhcp_start, + _network.dns1, + _network.dns2, + _network.enable_dhcp, + _network.gateway, + _network.gateway_v6, + _network.host, + _network.id, + _network.injected, + _network.label, + _network.mtu, + _network.multi_host, + _network.netmask, + _network.netmask_v6, + _network.priority, + _network.project_id, + _network.rxtx_base, + _network.share_address, + _network.updated_at, + _network.vlan, + _network.vpn_private_address, + _network.vpn_public_address, + _network.vpn_public_port, + ) + + def setUp(self): + super(TestCreateNetworkCompute, self).setUp() + + self.app.client_manager.network_endpoint_enabled = False + + self.compute.networks.create.return_value = self._network + + # Get the command object to test + self.cmd = network.CreateNetwork(self.app, None) + + def test_create_no_options(self): + arglist = [] + verifylist = [] + + # Missing required args should raise exception here + self.assertRaises(tests_utils.ParserException, self.check_parser, + self.cmd, arglist, verifylist) + + def test_create_default_options(self): + arglist = [ + "--subnet", self._network.cidr, + self._network.label, + ] + verifylist = [ + ('subnet', self._network.cidr), + ('name', self._network.label), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.compute.networks.create.assert_called_with(**{ + 'cidr': self._network.cidr, + 'label': self._network.label, + }) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + class TestDeleteNetworkCompute(TestNetworkCompute): # The network to delete. |
