diff options
Diffstat (limited to 'openstackclient/tests/network')
| -rw-r--r-- | openstackclient/tests/network/v2/fakes.py | 13 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_floating_ip.py | 178 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_network.py | 84 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_port.py | 61 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_router.py | 38 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_security_group.py | 41 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_security_group_rule.py | 319 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_subnet.py | 90 | ||||
| -rw-r--r-- | openstackclient/tests/network/v2/test_subnet_pool.py | 82 |
9 files changed, 800 insertions, 106 deletions
diff --git a/openstackclient/tests/network/v2/fakes.py b/openstackclient/tests/network/v2/fakes.py index 71543274..7f89ef7a 100644 --- a/openstackclient/tests/network/v2/fakes.py +++ b/openstackclient/tests/network/v2/fakes.py @@ -152,6 +152,7 @@ class FakeNetwork(object): 'router_external': True, 'availability_zones': [], 'availability_zone_hints': [], + 'is_default': False, } # Overwrite default attributes. @@ -161,7 +162,7 @@ class FakeNetwork(object): network_methods = { 'keys': ['id', 'name', 'admin_state_up', 'router_external', 'status', 'subnets', 'tenant_id', 'availability_zones', - 'availability_zone_hints'], + 'availability_zone_hints', 'is_default'], } # Overwrite default methods. @@ -510,11 +511,11 @@ class FakeSecurityGroupRule(object): 'direction': 'ingress', 'ethertype': 'IPv4', 'id': 'security-group-rule-id-' + uuid.uuid4().hex, - 'port_range_max': None, - 'port_range_min': None, - 'protocol': None, - 'remote_group_id': 'remote-security-group-id-' + uuid.uuid4().hex, - 'remote_ip_prefix': None, + 'port_range_max': 0, + 'port_range_min': 0, + 'protocol': 'tcp', + 'remote_group_id': None, + 'remote_ip_prefix': '0.0.0.0/0', 'security_group_id': 'security-group-id-' + uuid.uuid4().hex, 'tenant_id': 'project-id-' + uuid.uuid4().hex, } diff --git a/openstackclient/tests/network/v2/test_floating_ip.py b/openstackclient/tests/network/v2/test_floating_ip.py index 1c1088a3..3e261fb5 100644 --- a/openstackclient/tests/network/v2/test_floating_ip.py +++ b/openstackclient/tests/network/v2/test_floating_ip.py @@ -16,6 +16,7 @@ import mock from openstackclient.network.v2 import floating_ip from openstackclient.tests.compute.v2 import fakes as compute_fakes from openstackclient.tests.network.v2 import fakes as network_fakes +from openstackclient.tests import utils as tests_utils # Tests for Neutron network @@ -29,6 +30,115 @@ class TestFloatingIPNetwork(network_fakes.TestNetworkV2): self.network = self.app.client_manager.network +class TestCreateFloatingIPNetwork(TestFloatingIPNetwork): + + # Fake data for option tests. + floating_network = network_fakes.FakeNetwork.create_one_network() + subnet = network_fakes.FakeSubnet.create_one_subnet() + port = network_fakes.FakePort.create_one_port() + + # The floating ip to be deleted. + floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip( + attrs={ + 'floating_network_id': floating_network.id, + 'port_id': port.id, + } + ) + + columns = ( + 'dns_domain', + 'dns_name', + 'fixed_ip_address', + 'floating_ip_address', + 'floating_network_id', + 'id', + 'port_id', + 'project_id', + 'router_id', + 'status', + ) + + data = ( + floating_ip.dns_domain, + floating_ip.dns_name, + floating_ip.fixed_ip_address, + floating_ip.floating_ip_address, + floating_ip.floating_network_id, + floating_ip.id, + floating_ip.port_id, + floating_ip.project_id, + floating_ip.router_id, + floating_ip.status, + ) + + def setUp(self): + super(TestCreateFloatingIPNetwork, self).setUp() + + self.network.create_ip = mock.Mock(return_value=self.floating_ip) + + self.network.find_network = mock.Mock( + return_value=self.floating_network) + self.network.find_subnet = mock.Mock(return_value=self.subnet) + self.network.find_port = mock.Mock(return_value=self.port) + + # Get the command object to test + self.cmd = floating_ip.CreateFloatingIP(self.app, self.namespace) + + def test_create_no_options(self): + arglist = [] + verifylist = [] + + # Missing required args should bail here + self.assertRaises(tests_utils.ParserException, self.check_parser, + self.cmd, arglist, verifylist) + + def test_create_default_options(self): + arglist = [ + self.floating_ip.floating_network_id, + ] + verifylist = [ + ('network', self.floating_ip.floating_network_id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.create_ip.assert_called_once_with(**{ + 'floating_network_id': self.floating_ip.floating_network_id, + }) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_create_all_options(self): + arglist = [ + '--subnet', self.subnet.id, + '--port', self.floating_ip.port_id, + '--floating-ip-address', self.floating_ip.floating_ip_address, + '--fixed-ip-address', self.floating_ip.fixed_ip_address, + self.floating_ip.floating_network_id, + ] + verifylist = [ + ('subnet', self.subnet.id), + ('port', self.floating_ip.port_id), + ('floating_ip_address', self.floating_ip.floating_ip_address), + ('fixed_ip_address', self.floating_ip.fixed_ip_address), + ('network', self.floating_ip.floating_network_id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.create_ip.assert_called_once_with(**{ + 'subnet_id': self.subnet.id, + 'port_id': self.floating_ip.port_id, + 'floating_ip_address': self.floating_ip.floating_ip_address, + 'fixed_ip_address': self.floating_ip.fixed_ip_address, + 'floating_network_id': self.floating_ip.floating_network_id, + }) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork): # The floating ip to be deleted. @@ -54,8 +164,8 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork): result = self.cmd.take_action(parsed_args) - self.network.find_ip.assert_called_with(self.floating_ip.id) - self.network.delete_ip.assert_called_with(self.floating_ip) + self.network.find_ip.assert_called_once_with(self.floating_ip.id) + self.network.delete_ip.assert_called_once_with(self.floating_ip) self.assertIsNone(result) @@ -95,7 +205,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork): columns, data = self.cmd.take_action(parsed_args) - self.network.ips.assert_called_with(**{}) + self.network.ips.assert_called_once_with(**{}) self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) @@ -150,7 +260,7 @@ class TestShowFloatingIPNetwork(TestFloatingIPNetwork): columns, data = self.cmd.take_action(parsed_args) - self.network.find_ip.assert_called_with( + self.network.find_ip.assert_called_once_with( self.floating_ip.id, ignore_missing=False ) @@ -169,6 +279,62 @@ class TestFloatingIPCompute(compute_fakes.TestComputev2): self.compute = self.app.client_manager.compute +class TestCreateFloatingIPCompute(TestFloatingIPCompute): + + # The floating ip to be deleted. + floating_ip = compute_fakes.FakeFloatingIP.create_one_floating_ip() + + columns = ( + 'fixed_ip', + 'id', + 'instance_id', + 'ip', + 'pool', + ) + + data = ( + floating_ip.fixed_ip, + floating_ip.id, + floating_ip.instance_id, + floating_ip.ip, + floating_ip.pool, + ) + + def setUp(self): + super(TestCreateFloatingIPCompute, self).setUp() + + self.app.client_manager.network_endpoint_enabled = False + + self.compute.floating_ips.create.return_value = self.floating_ip + + # Get the command object to test + self.cmd = floating_ip.CreateFloatingIP(self.app, None) + + def test_create_no_options(self): + arglist = [] + verifylist = [] + + # Missing required args should bail here + self.assertRaises(tests_utils.ParserException, self.check_parser, + self.cmd, arglist, verifylist) + + def test_create_default_options(self): + arglist = [ + self.floating_ip.pool, + ] + verifylist = [ + ('network', self.floating_ip.pool), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.compute.floating_ips.create.assert_called_once_with( + self.floating_ip.pool) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + class TestDeleteFloatingIPCompute(TestFloatingIPCompute): # The floating ip to be deleted. @@ -198,7 +364,7 @@ class TestDeleteFloatingIPCompute(TestFloatingIPCompute): result = self.cmd.take_action(parsed_args) - self.compute.floating_ips.delete.assert_called_with( + self.compute.floating_ips.delete.assert_called_once_with( self.floating_ip.id ) self.assertIsNone(result) @@ -244,7 +410,7 @@ class TestListFloatingIPCompute(TestFloatingIPCompute): columns, data = self.cmd.take_action(parsed_args) - self.compute.floating_ips.list.assert_called_with() + self.compute.floating_ips.list.assert_called_once_with() self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py index e70a66c1..2493362e 100644 --- a/openstackclient/tests/network/v2/test_network.py +++ b/openstackclient/tests/network/v2/test_network.py @@ -51,6 +51,7 @@ class TestCreateNetworkIdentityV3(TestNetwork): 'availability_zone_hints', 'availability_zones', 'id', + 'is_default', 'name', 'project_id', 'router_external', @@ -63,6 +64,7 @@ class TestCreateNetworkIdentityV3(TestNetwork): utils.format_list(_network.availability_zone_hints), utils.format_list(_network.availability_zones), _network.id, + _network.is_default, _network.name, _network.project_id, network._format_router_external(_network.router_external), @@ -116,15 +118,16 @@ class TestCreateNetworkIdentityV3(TestNetwork): ] verifylist = [ ('name', self._network.name), - ('admin_state', True), - ('shared', None), + ('enable', True), + ('share', None), ('project', None), + ('external', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.network.create_network.assert_called_with(**{ + self.network.create_network.assert_called_once_with(**{ 'admin_state_up': True, 'name': self._network.name, }) @@ -138,26 +141,40 @@ class TestCreateNetworkIdentityV3(TestNetwork): "--project", identity_fakes_v3.project_name, "--project-domain", identity_fakes_v3.domain_name, "--availability-zone-hint", "nova", + "--external", "--default", + "--provider-network-type", "vlan", + "--provider-physical-network", "physnet1", + "--provider-segmentation-id", "400", self._network.name, ] verifylist = [ - ('admin_state', False), - ('shared', True), + ('disable', True), + ('share', True), ('project', identity_fakes_v3.project_name), ('project_domain', identity_fakes_v3.domain_name), ('availability_zone_hints', ["nova"]), + ('external', True), + ('default', True), + ('provider_network_type', 'vlan'), + ('physical_network', 'physnet1'), + ('segmentation_id', '400'), ('name', self._network.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = (self.cmd.take_action(parsed_args)) - self.network.create_network.assert_called_with(**{ + self.network.create_network.assert_called_once_with(**{ 'admin_state_up': False, 'availability_zone_hints': ["nova"], 'name': self._network.name, 'shared': True, 'tenant_id': identity_fakes_v3.project_id, + 'is_default': True, + 'router:external': True, + 'provider:network_type': 'vlan', + 'provider:physical_network': 'physnet1', + 'provider:segmentation_id': '400', }) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -169,15 +186,16 @@ class TestCreateNetworkIdentityV3(TestNetwork): self._network.name, ] verifylist = [ - ('admin_state', True), - ('shared', False), + ('enable', True), + ('no_share', True), ('name', self._network.name), + ('external', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.network.create_network.assert_called_with(**{ + self.network.create_network.assert_called_once_with(**{ 'admin_state_up': True, 'name': self._network.name, 'shared': False, @@ -198,6 +216,7 @@ class TestCreateNetworkIdentityV2(TestNetwork): 'availability_zone_hints', 'availability_zones', 'id', + 'is_default', 'name', 'project_id', 'router_external', @@ -210,6 +229,7 @@ class TestCreateNetworkIdentityV2(TestNetwork): utils.format_list(_network.availability_zone_hints), utils.format_list(_network.availability_zones), _network.id, + _network.is_default, _network.name, _network.project_id, network._format_router_external(_network.router_external), @@ -249,16 +269,17 @@ class TestCreateNetworkIdentityV2(TestNetwork): self._network.name, ] verifylist = [ - ('admin_state', True), - ('shared', None), + ('enable', True), + ('share', None), ('name', self._network.name), ('project', identity_fakes_v2.project_name), + ('external', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.network.create_network.assert_called_with(**{ + self.network.create_network.assert_called_once_with(**{ 'admin_state_up': True, 'name': self._network.name, 'tenant_id': identity_fakes_v2.project_id, @@ -273,11 +294,12 @@ class TestCreateNetworkIdentityV2(TestNetwork): self._network.name, ] verifylist = [ - ('admin_state', True), - ('shared', None), + ('enable', True), + ('share', None), ('project', identity_fakes_v3.project_name), ('project_domain', identity_fakes_v3.domain_name), ('name', self._network.name), + ('external', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -315,7 +337,7 @@ class TestDeleteNetwork(TestNetwork): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - self.network.delete_network.assert_called_with(self._network) + self.network.delete_network.assert_called_once_with(self._network) self.assertIsNone(result) @@ -386,7 +408,7 @@ class TestListNetwork(TestNetwork): # containing the data to be listed. columns, data = self.cmd.take_action(parsed_args) - self.network.networks.assert_called_with() + self.network.networks.assert_called_once_with() self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) @@ -405,7 +427,7 @@ class TestListNetwork(TestNetwork): # containing the data to be listed. columns, data = self.cmd.take_action(parsed_args) - self.network.networks.assert_called_with( + self.network.networks.assert_called_once_with( **{'router:external': True} ) self.assertEqual(self.columns, columns) @@ -426,7 +448,7 @@ class TestListNetwork(TestNetwork): # containing the data to be listed. columns, data = self.cmd.take_action(parsed_args) - self.network.networks.assert_called_with() + self.network.networks.assert_called_once_with() self.assertEqual(self.columns_long, columns) self.assertEqual(self.data_long, list(data)) @@ -455,9 +477,9 @@ class TestSetNetwork(TestNetwork): ] verifylist = [ ('network', self._network.name), - ('admin_state', True), + ('enable', True), ('name', 'noob'), - ('shared', True), + ('share', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -468,7 +490,8 @@ class TestSetNetwork(TestNetwork): 'admin_state_up': True, 'shared': True, } - self.network.update_network.assert_called_with(self._network, **attrs) + self.network.update_network.assert_called_once_with( + self._network, **attrs) self.assertIsNone(result) def test_set_that(self): @@ -479,8 +502,8 @@ class TestSetNetwork(TestNetwork): ] verifylist = [ ('network', self._network.name), - ('admin_state', False), - ('shared', False), + ('disable', True), + ('no_share', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -490,7 +513,8 @@ class TestSetNetwork(TestNetwork): 'admin_state_up': False, 'shared': False, } - self.network.update_network.assert_called_with(self._network, **attrs) + self.network.update_network.assert_called_once_with( + self._network, **attrs) self.assertIsNone(result) def test_set_nothing(self): @@ -512,6 +536,7 @@ class TestShowNetwork(TestNetwork): 'availability_zone_hints', 'availability_zones', 'id', + 'is_default', 'name', 'project_id', 'router_external', @@ -524,6 +549,7 @@ class TestShowNetwork(TestNetwork): utils.format_list(_network.availability_zone_hints), utils.format_list(_network.availability_zones), _network.id, + _network.is_default, _network.name, _network.project_id, network._format_router_external(_network.router_external), @@ -558,8 +584,8 @@ class TestShowNetwork(TestNetwork): parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.network.find_network.assert_called_with(self._network.name, - ignore_missing=False) + self.network.find_network.assert_called_once_with( + self._network.name, ignore_missing=False) self.assertEqual(tuple(self.columns), columns) self.assertEqual(list(self.data), list(data)) @@ -682,7 +708,7 @@ class TestCreateNetworkCompute(TestNetworkCompute): columns, data = self.cmd.take_action(parsed_args) - self.compute.networks.create.assert_called_with(**{ + self.compute.networks.create.assert_called_once_with(**{ 'cidr': self._network.cidr, 'label': self._network.label, }) @@ -719,7 +745,7 @@ class TestDeleteNetworkCompute(TestNetworkCompute): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - self.compute.networks.delete.assert_called_with(self._network.id) + self.compute.networks.delete.assert_called_once_with(self._network.id) self.assertIsNone(result) @@ -765,7 +791,7 @@ class TestListNetworkCompute(TestNetworkCompute): # containing the data to be listed. columns, data = self.cmd.take_action(parsed_args) - self.compute.networks.list.assert_called_with() + self.compute.networks.list.assert_called_once_with() self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) diff --git a/openstackclient/tests/network/v2/test_port.py b/openstackclient/tests/network/v2/test_port.py index 7b1c655f..31454dba 100644 --- a/openstackclient/tests/network/v2/test_port.py +++ b/openstackclient/tests/network/v2/test_port.py @@ -103,14 +103,14 @@ class TestCreatePort(TestPort): ] verifylist = [ ('network', self._port.network_id,), - ('admin_state', True), + ('enable', True), ('name', 'test-port'), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = (self.cmd.take_action(parsed_args)) - self.network.create_port.assert_called_with(**{ + self.network.create_port.assert_called_once_with(**{ 'admin_state_up': True, 'network_id': self._port.network_id, 'name': 'test-port', @@ -125,7 +125,7 @@ class TestCreatePort(TestPort): '--mac-address', 'aa:aa:aa:aa:aa:aa', '--fixed-ip', 'subnet=%s,ip-address=10.0.0.2' % self.fake_subnet.id, - '--device-id', 'deviceid', + '--device', 'deviceid', '--device-owner', 'fakeowner', '--disable', '--vnic-type', 'macvtap', @@ -141,9 +141,9 @@ class TestCreatePort(TestPort): 'fixed_ip', [{'subnet': self.fake_subnet.id, 'ip-address': '10.0.0.2'}] ), - ('device_id', 'deviceid'), + ('device', 'deviceid'), ('device_owner', 'fakeowner'), - ('admin_state', False), + ('disable', True), ('vnic_type', 'macvtap'), ('binding_profile', {'foo': 'bar', 'foo2': 'bar2'}), ('network', self._port.network_id), @@ -154,7 +154,7 @@ class TestCreatePort(TestPort): columns, data = (self.cmd.take_action(parsed_args)) - self.network.create_port.assert_called_with(**{ + self.network.create_port.assert_called_once_with(**{ 'mac_address': 'aa:aa:aa:aa:aa:aa', 'fixed_ips': [{'subnet_id': self.fake_subnet.id, 'ip_address': '10.0.0.2'}], @@ -195,7 +195,7 @@ class TestDeletePort(TestPort): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - self.network.delete_port.assert_called_with(self._port) + self.network.delete_port.assert_called_once_with(self._port) self.assertIsNone(result) @@ -224,8 +224,11 @@ class TestListPort(TestPort): # Get the command object to test self.cmd = port.ListPort(self.app, self.namespace) - self.network.ports = mock.Mock(return_value=self._ports) + fake_router = network_fakes.FakeRouter.create_one_router({ + 'id': 'fake-router-id', + }) + self.network.find_router = mock.Mock(return_value=fake_router) def test_port_list_no_options(self): arglist = [] @@ -235,7 +238,26 @@ class TestListPort(TestPort): columns, data = self.cmd.take_action(parsed_args) - self.network.ports.assert_called_with() + self.network.ports.assert_called_once_with() + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + + def test_port_list_router_opt(self): + arglist = [ + '--router', 'fake-router-name', + ] + + verifylist = [ + ('router', 'fake-router-name') + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.ports.assert_called_once_with(**{ + 'device_id': 'fake-router-id' + }) self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) @@ -270,7 +292,7 @@ class TestSetPort(TestPort): attrs = { 'fixed_ips': [{'ip_address': '10.0.0.11'}], } - self.network.update_port.assert_called_with(self._port, **attrs) + self.network.update_port.assert_called_once_with(self._port, **attrs) self.assertIsNone(result) def test_set_this(self): @@ -279,7 +301,7 @@ class TestSetPort(TestPort): self._port.name, ] verifylist = [ - ('admin_state', False), + ('disable', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -288,7 +310,7 @@ class TestSetPort(TestPort): attrs = { 'admin_state_up': False, } - self.network.update_port.assert_called_with(self._port, **attrs) + self.network.update_port.assert_called_once_with(self._port, **attrs) self.assertIsNone(result) def test_set_that(self): @@ -296,14 +318,16 @@ class TestSetPort(TestPort): '--enable', '--vnic-type', 'macvtap', '--binding-profile', 'foo=bar', - '--host-id', 'binding-host-id-xxxx', + '--host', 'binding-host-id-xxxx', + '--name', 'newName', self._port.name, ] verifylist = [ - ('admin_state', True), + ('enable', True), ('vnic_type', 'macvtap'), ('binding_profile', {'foo': 'bar'}), - ('host_id', 'binding-host-id-xxxx'), + ('host', 'binding-host-id-xxxx'), + ('name', 'newName') ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -314,8 +338,9 @@ class TestSetPort(TestPort): 'binding:vnic_type': 'macvtap', 'binding:profile': {'foo': 'bar'}, 'binding:host_id': 'binding-host-id-xxxx', + 'name': 'newName', } - self.network.update_port.assert_called_with(self._port, **attrs) + self.network.update_port.assert_called_once_with(self._port, **attrs) self.assertIsNone(result) @@ -350,8 +375,8 @@ class TestShowPort(TestPort): columns, data = self.cmd.take_action(parsed_args) - self.network.find_port.assert_called_with(self._port.name, - ignore_missing=False) + self.network.find_port.assert_called_once_with( + self._port.name, ignore_missing=False) ref_columns, ref_data = self._get_common_cols_data(self._port) self.assertEqual(ref_columns, columns) diff --git a/openstackclient/tests/network/v2/test_router.py b/openstackclient/tests/network/v2/test_router.py index 68c225e7..4aaa68e4 100644 --- a/openstackclient/tests/network/v2/test_router.py +++ b/openstackclient/tests/network/v2/test_router.py @@ -73,17 +73,16 @@ class TestCreateRouter(TestRouter): ] verifylist = [ ('name', self.new_router.name), - ('admin_state_up', True), + ('enable', True), ('distributed', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = (self.cmd.take_action(parsed_args)) - self.network.create_router.assert_called_with(**{ + self.network.create_router.assert_called_once_with(**{ 'admin_state_up': True, 'name': self.new_router.name, - 'distributed': False, }) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -97,16 +96,15 @@ class TestCreateRouter(TestRouter): verifylist = [ ('name', self.new_router.name), ('availability_zone_hints', ['fake-az', 'fake-az2']), - ('admin_state_up', True), + ('enable', True), ('distributed', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = (self.cmd.take_action(parsed_args)) - self.network.create_router.assert_called_with(**{ + self.network.create_router.assert_called_once_with(**{ 'admin_state_up': True, 'name': self.new_router.name, - 'distributed': False, 'availability_zone_hints': ['fake-az', 'fake-az2'], }) @@ -139,7 +137,7 @@ class TestDeleteRouter(TestRouter): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - self.network.delete_router.assert_called_with(self._router) + self.network.delete_router.assert_called_once_with(self._router) self.assertIsNone(result) @@ -205,7 +203,7 @@ class TestListRouter(TestRouter): # containing the data to be listed. columns, data = self.cmd.take_action(parsed_args) - self.network.routers.assert_called_with() + self.network.routers.assert_called_once_with() self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) @@ -223,7 +221,7 @@ class TestListRouter(TestRouter): # containing the data to be listed. columns, data = self.cmd.take_action(parsed_args) - self.network.routers.assert_called_with() + self.network.routers.assert_called_once_with() self.assertEqual(self.columns_long, columns) self.assertEqual(self.data_long, list(data)) @@ -252,7 +250,7 @@ class TestSetRouter(TestRouter): ] verifylist = [ ('router', self._router.name), - ('admin_state_up', True), + ('enable', True), ('distributed', True), ('name', 'noob'), ] @@ -265,7 +263,8 @@ class TestSetRouter(TestRouter): 'distributed': True, 'name': 'noob', } - self.network.update_router.assert_called_with(self._router, **attrs) + self.network.update_router.assert_called_once_with( + self._router, **attrs) self.assertIsNone(result) def test_set_that(self): @@ -276,8 +275,8 @@ class TestSetRouter(TestRouter): ] verifylist = [ ('router', self._router.name), - ('admin_state_up', False), - ('distributed', False), + ('disable', True), + ('centralized', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -287,7 +286,8 @@ class TestSetRouter(TestRouter): 'admin_state_up': False, 'distributed': False, } - self.network.update_router.assert_called_with(self._router, **attrs) + self.network.update_router.assert_called_once_with( + self._router, **attrs) self.assertIsNone(result) def test_set_distributed_centralized(self): @@ -324,7 +324,8 @@ class TestSetRouter(TestRouter): 'routes': [{'destination': '10.20.30.0/24', 'gateway': '10.20.30.1'}], } - self.network.update_router.assert_called_with(self._router, **attrs) + self.network.update_router.assert_called_once_with( + self._router, **attrs) self.assertIsNone(result) def test_set_clear_routes(self): @@ -343,7 +344,8 @@ class TestSetRouter(TestRouter): attrs = { 'routes': [], } - self.network.update_router.assert_called_with(self._router, **attrs) + self.network.update_router.assert_called_once_with( + self._router, **attrs) self.assertIsNone(result) def test_set_route_clear_routes(self): @@ -422,7 +424,7 @@ class TestShowRouter(TestRouter): columns, data = self.cmd.take_action(parsed_args) - self.network.find_router.assert_called_with(self._router.name, - ignore_missing=False) + self.network.find_router.assert_called_once_with( + self._router.name, ignore_missing=False) self.assertEqual(tuple(self.columns), columns) self.assertEqual(self.data, data) diff --git a/openstackclient/tests/network/v2/test_security_group.py b/openstackclient/tests/network/v2/test_security_group.py index 2d43d872..dd6a3d41 100644 --- a/openstackclient/tests/network/v2/test_security_group.py +++ b/openstackclient/tests/network/v2/test_security_group.py @@ -11,10 +11,13 @@ # under the License. # +import copy import mock from openstackclient.network.v2 import security_group from openstackclient.tests.compute.v2 import fakes as compute_fakes +from openstackclient.tests import fakes +from openstackclient.tests.identity.v3 import fakes as identity_fakes from openstackclient.tests.network.v2 import fakes as network_fakes from openstackclient.tests import utils as tests_utils @@ -65,6 +68,30 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork): self.network.create_security_group = mock.Mock( return_value=self._security_group) + # Set identity client v3. And get a shortcut to Identity client. + identity_client = identity_fakes.FakeIdentityv3Client( + endpoint=fakes.AUTH_URL, + token=fakes.AUTH_TOKEN, + ) + self.app.client_manager.identity = identity_client + self.identity = self.app.client_manager.identity + + # Get a shortcut to the ProjectManager Mock + self.projects_mock = self.identity.projects + self.projects_mock.get.return_value = fakes.FakeResource( + None, + copy.deepcopy(identity_fakes.PROJECT), + loaded=True, + ) + + # Get a shortcut to the DomainManager Mock + self.domains_mock = self.identity.domains + self.domains_mock.get.return_value = fakes.FakeResource( + None, + copy.deepcopy(identity_fakes.DOMAIN), + loaded=True, + ) + # Get the command object to test self.cmd = security_group.CreateSecurityGroup(self.app, self.namespace) @@ -93,11 +120,15 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork): def test_create_all_options(self): arglist = [ '--description', self._security_group.description, + '--project', identity_fakes.project_name, + '--project-domain', identity_fakes.domain_name, self._security_group.name, ] verifylist = [ ('description', self._security_group.description), ('name', self._security_group.name), + ('project', identity_fakes.project_name), + ('project_domain', identity_fakes.domain_name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -106,6 +137,7 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork): self.network.create_security_group.assert_called_once_with(**{ 'description': self._security_group.description, 'name': self._security_group.name, + 'tenant_id': identity_fakes.project_id, }) self.assertEqual(tuple(self.columns), columns) self.assertEqual(self.data, data) @@ -147,6 +179,15 @@ class TestCreateSecurityGroupCompute(TestSecurityGroupCompute): self.assertRaises(tests_utils.ParserException, self.check_parser, self.cmd, [], []) + def test_create_network_options(self): + arglist = [ + '--project', identity_fakes.project_name, + '--project-domain', identity_fakes.domain_name, + self._security_group.name, + ] + self.assertRaises(tests_utils.ParserException, + self.check_parser, self.cmd, arglist, []) + def test_create_min_options(self): arglist = [ self._security_group.name, diff --git a/openstackclient/tests/network/v2/test_security_group_rule.py b/openstackclient/tests/network/v2/test_security_group_rule.py index db15d0e2..81b9e18b 100644 --- a/openstackclient/tests/network/v2/test_security_group_rule.py +++ b/openstackclient/tests/network/v2/test_security_group_rule.py @@ -39,6 +39,317 @@ class TestSecurityGroupRuleCompute(compute_fakes.TestComputev2): self.compute = self.app.client_manager.compute +class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork): + + # The security group rule to be created. + _security_group_rule = None + + # The security group that will contain the rule created. + _security_group = \ + network_fakes.FakeSecurityGroup.create_one_security_group() + + expected_columns = ( + 'direction', + 'ethertype', + 'id', + 'port_range_max', + 'port_range_min', + 'project_id', + 'protocol', + 'remote_group_id', + 'remote_ip_prefix', + 'security_group_id', + ) + + expected_data = None + + def _setup_security_group_rule(self, attrs=None): + self._security_group_rule = \ + network_fakes.FakeSecurityGroupRule.create_one_security_group_rule( + attrs) + self.network.create_security_group_rule = mock.Mock( + return_value=self._security_group_rule) + self.expected_data = ( + self._security_group_rule.direction, + self._security_group_rule.ethertype, + self._security_group_rule.id, + self._security_group_rule.port_range_max, + self._security_group_rule.port_range_min, + self._security_group_rule.project_id, + self._security_group_rule.protocol, + self._security_group_rule.remote_group_id, + self._security_group_rule.remote_ip_prefix, + self._security_group_rule.security_group_id, + ) + + def setUp(self): + super(TestCreateSecurityGroupRuleNetwork, self).setUp() + + self.network.find_security_group = mock.Mock( + return_value=self._security_group) + + # Get the command object to test + self.cmd = security_group_rule.CreateSecurityGroupRule( + self.app, self.namespace) + + def test_create_no_options(self): + self.assertRaises(tests_utils.ParserException, + self.check_parser, self.cmd, [], []) + + def test_create_source_group_and_ip(self): + arglist = [ + '--src-ip', '10.10.0.0/24', + '--src-group', self._security_group.id, + self._security_group.id, + ] + self.assertRaises(tests_utils.ParserException, + self.check_parser, self.cmd, arglist, []) + + def test_create_bad_protocol(self): + arglist = [ + '--protocol', 'foo', + self._security_group.id, + ] + self.assertRaises(tests_utils.ParserException, + self.check_parser, self.cmd, arglist, []) + + def test_create_default_rule(self): + self._setup_security_group_rule({ + 'port_range_max': 443, + 'port_range_min': 443, + }) + arglist = [ + '--dst-port', str(self._security_group_rule.port_range_min), + self._security_group.id, + ] + verifylist = [ + ('group', self._security_group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.create_security_group_rule.assert_called_once_with(**{ + 'direction': self._security_group_rule.direction, + 'ethertype': self._security_group_rule.ethertype, + 'port_range_max': self._security_group_rule.port_range_max, + 'port_range_min': self._security_group_rule.port_range_min, + 'protocol': self._security_group_rule.protocol, + 'remote_ip_prefix': self._security_group_rule.remote_ip_prefix, + 'security_group_id': self._security_group.id, + }) + self.assertEqual(tuple(self.expected_columns), columns) + self.assertEqual(self.expected_data, data) + + def test_create_source_group(self): + self._setup_security_group_rule({ + 'port_range_max': 22, + 'port_range_min': 22, + 'remote_group_id': self._security_group.id, + }) + arglist = [ + '--dst-port', str(self._security_group_rule.port_range_min), + '--src-group', self._security_group.name, + self._security_group.id, + ] + verifylist = [ + ('dst_port', (self._security_group_rule.port_range_min, + self._security_group_rule.port_range_max)), + ('src_group', self._security_group.name), + ('group', self._security_group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.create_security_group_rule.assert_called_once_with(**{ + 'direction': self._security_group_rule.direction, + 'ethertype': self._security_group_rule.ethertype, + 'port_range_max': self._security_group_rule.port_range_max, + 'port_range_min': self._security_group_rule.port_range_min, + 'protocol': self._security_group_rule.protocol, + 'remote_group_id': self._security_group_rule.remote_group_id, + 'security_group_id': self._security_group.id, + }) + self.assertEqual(tuple(self.expected_columns), columns) + self.assertEqual(self.expected_data, data) + + def test_create_source_ip(self): + self._setup_security_group_rule({ + 'protocol': 'icmp', + 'port_range_max': -1, + 'port_range_min': -1, + 'remote_ip_prefix': '10.0.2.0/24', + }) + arglist = [ + '--proto', self._security_group_rule.protocol, + '--src-ip', self._security_group_rule.remote_ip_prefix, + self._security_group.id, + ] + verifylist = [ + ('proto', self._security_group_rule.protocol), + ('src_ip', self._security_group_rule.remote_ip_prefix), + ('group', self._security_group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.create_security_group_rule.assert_called_once_with(**{ + 'direction': self._security_group_rule.direction, + 'ethertype': self._security_group_rule.ethertype, + 'protocol': self._security_group_rule.protocol, + 'remote_ip_prefix': self._security_group_rule.remote_ip_prefix, + 'security_group_id': self._security_group.id, + }) + self.assertEqual(tuple(self.expected_columns), columns) + self.assertEqual(self.expected_data, data) + + +class TestCreateSecurityGroupRuleCompute(TestSecurityGroupRuleCompute): + + # The security group rule to be created. + _security_group_rule = None + + # The security group that will contain the rule created. + _security_group = \ + compute_fakes.FakeSecurityGroup.create_one_security_group() + + def _setup_security_group_rule(self, attrs=None): + self._security_group_rule = \ + compute_fakes.FakeSecurityGroupRule.create_one_security_group_rule( + attrs) + self.compute.security_group_rules.create.return_value = \ + self._security_group_rule + expected_columns, expected_data = \ + security_group_rule._format_security_group_rule_show( + self._security_group_rule._info) + return expected_columns, expected_data + + def setUp(self): + super(TestCreateSecurityGroupRuleCompute, self).setUp() + + self.app.client_manager.network_endpoint_enabled = False + + self.compute.security_groups.get.return_value = self._security_group + + # Get the command object to test + self.cmd = security_group_rule.CreateSecurityGroupRule(self.app, None) + + def test_create_no_options(self): + self.assertRaises(tests_utils.ParserException, + self.check_parser, self.cmd, [], []) + + def test_create_source_group_and_ip(self): + arglist = [ + '--src-ip', '10.10.0.0/24', + '--src-group', self._security_group.id, + self._security_group.id, + ] + self.assertRaises(tests_utils.ParserException, + self.check_parser, self.cmd, arglist, []) + + def test_create_bad_protocol(self): + arglist = [ + '--protocol', 'foo', + self._security_group.id, + ] + self.assertRaises(tests_utils.ParserException, + self.check_parser, self.cmd, arglist, []) + + def test_create_default_rule(self): + expected_columns, expected_data = self._setup_security_group_rule() + dst_port = str(self._security_group_rule.from_port) + ':' + \ + str(self._security_group_rule.to_port) + arglist = [ + '--dst-port', dst_port, + self._security_group.id, + ] + verifylist = [ + ('dst_port', (self._security_group_rule.from_port, + self._security_group_rule.to_port)), + ('group', self._security_group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.compute.security_group_rules.create.assert_called_once_with( + self._security_group.id, + self._security_group_rule.ip_protocol, + self._security_group_rule.from_port, + self._security_group_rule.to_port, + self._security_group_rule.ip_range['cidr'], + None, + ) + self.assertEqual(expected_columns, columns) + self.assertEqual(expected_data, data) + + def test_create_source_group(self): + expected_columns, expected_data = self._setup_security_group_rule({ + 'from_port': 22, + 'to_port': 22, + 'group': {'name': self._security_group.name}, + }) + arglist = [ + '--dst-port', str(self._security_group_rule.from_port), + '--src-group', self._security_group.name, + self._security_group.id, + ] + verifylist = [ + ('dst_port', (self._security_group_rule.from_port, + self._security_group_rule.to_port)), + ('src_group', self._security_group.name), + ('group', self._security_group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.compute.security_group_rules.create.assert_called_once_with( + self._security_group.id, + self._security_group_rule.ip_protocol, + self._security_group_rule.from_port, + self._security_group_rule.to_port, + self._security_group_rule.ip_range['cidr'], + self._security_group.id, + ) + self.assertEqual(expected_columns, columns) + self.assertEqual(expected_data, data) + + def test_create_source_ip(self): + expected_columns, expected_data = self._setup_security_group_rule({ + 'ip_protocol': 'icmp', + 'from_port': -1, + 'to_port': -1, + 'ip_range': {'cidr': '10.0.2.0/24'}, + }) + arglist = [ + '--proto', self._security_group_rule.ip_protocol, + '--src-ip', self._security_group_rule.ip_range['cidr'], + self._security_group.id, + ] + verifylist = [ + ('proto', self._security_group_rule.ip_protocol), + ('src_ip', self._security_group_rule.ip_range['cidr']), + ('group', self._security_group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.compute.security_group_rules.create.assert_called_once_with( + self._security_group.id, + self._security_group_rule.ip_protocol, + self._security_group_rule.from_port, + self._security_group_rule.to_port, + self._security_group_rule.ip_range['cidr'], + None, + ) + self.assertEqual(expected_columns, columns) + self.assertEqual(expected_data, data) + + class TestDeleteSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork): # The security group rule to be deleted. @@ -68,7 +379,7 @@ class TestDeleteSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork): result = self.cmd.take_action(parsed_args) - self.network.delete_security_group_rule.assert_called_with( + self.network.delete_security_group_rule.assert_called_once_with( self._security_group_rule) self.assertIsNone(result) @@ -98,7 +409,7 @@ class TestDeleteSecurityGroupRuleCompute(TestSecurityGroupRuleCompute): result = self.cmd.take_action(parsed_args) - self.compute.security_group_rules.delete.assert_called_with( + self.compute.security_group_rules.delete.assert_called_once_with( self._security_group_rule.id) self.assertIsNone(result) @@ -160,7 +471,7 @@ class TestShowSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork): columns, data = self.cmd.take_action(parsed_args) - self.network.find_security_group_rule.assert_called_with( + self.network.find_security_group_rule.assert_called_once_with( self._security_group_rule.id, ignore_missing=False) self.assertEqual(tuple(self.columns), columns) self.assertEqual(self.data, data) @@ -207,6 +518,6 @@ class TestShowSecurityGroupRuleCompute(TestSecurityGroupRuleCompute): columns, data = self.cmd.take_action(parsed_args) - self.compute.security_groups.list.assert_called_with() + self.compute.security_groups.list.assert_called_once_with() self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) diff --git a/openstackclient/tests/network/v2/test_subnet.py b/openstackclient/tests/network/v2/test_subnet.py index b718d262..2535bbe6 100644 --- a/openstackclient/tests/network/v2/test_subnet.py +++ b/openstackclient/tests/network/v2/test_subnet.py @@ -14,6 +14,7 @@ import copy import mock +from openstackclient.common import exceptions from openstackclient.common import utils from openstackclient.network.v2 import subnet as subnet_v2 from openstackclient.tests import fakes @@ -203,9 +204,9 @@ class TestCreateSubnet(TestSubnet): self.network.find_network = mock.Mock(return_value=self._network) arglist = [ - self._subnet.name, "--subnet-range", self._subnet.cidr, "--network", self._subnet.network_id, + self._subnet.name, ] verifylist = [ ('name', self._subnet.name), @@ -219,7 +220,7 @@ class TestCreateSubnet(TestSubnet): parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.network.create_subnet.assert_called_with(**{ + self.network.create_subnet.assert_called_once_with(**{ 'cidr': self._subnet.cidr, 'enable_dhcp': self._subnet.enable_dhcp, 'ip_version': self._subnet.ip_version, @@ -266,7 +267,7 @@ class TestCreateSubnet(TestSubnet): ('ip_version', self._subnet_from_pool.ip_version), ('gateway', self._subnet_from_pool.gateway_ip), ('dns_nameservers', self._subnet_from_pool.dns_nameservers), - ('enable_dhcp', self._subnet_from_pool.enable_dhcp), + ('dhcp', self._subnet_from_pool.enable_dhcp), ('host_routes', subnet_v2.convert_entries_to_gateway( self._subnet_from_pool.host_routes)), ('subnet_pool', self._subnet_from_pool.subnetpool_id), @@ -275,7 +276,7 @@ class TestCreateSubnet(TestSubnet): parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.network.create_subnet.assert_called_with(**{ + self.network.create_subnet.assert_called_once_with(**{ 'dns_nameservers': self._subnet_from_pool.dns_nameservers, 'enable_dhcp': self._subnet_from_pool.enable_dhcp, 'gateway_ip': self._subnet_from_pool.gateway_ip, @@ -332,7 +333,7 @@ class TestCreateSubnet(TestSubnet): ('ipv6_address_mode', self._subnet_ipv6.ipv6_address_mode), ('gateway', self._subnet_ipv6.gateway_ip), ('dns_nameservers', self._subnet_ipv6.dns_nameservers), - ('enable_dhcp', self._subnet_ipv6.enable_dhcp), + ('dhcp', self._subnet_ipv6.enable_dhcp), ('host_routes', subnet_v2.convert_entries_to_gateway( self._subnet_ipv6.host_routes)), ('allocation_pools', self._subnet_ipv6.allocation_pools), @@ -341,7 +342,7 @@ class TestCreateSubnet(TestSubnet): parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.network.create_subnet.assert_called_with(**{ + self.network.create_subnet.assert_called_once_with(**{ 'cidr': self._subnet_ipv6.cidr, 'dns_nameservers': self._subnet_ipv6.dns_nameservers, 'enable_dhcp': self._subnet_ipv6.enable_dhcp, @@ -383,7 +384,7 @@ class TestDeleteSubnet(TestSubnet): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - self.network.delete_subnet.assert_called_with(self._subnet) + self.network.delete_subnet.assert_called_once_with(self._subnet) self.assertIsNone(result) @@ -449,7 +450,7 @@ class TestListSubnet(TestSubnet): columns, data = self.cmd.take_action(parsed_args) - self.network.subnets.assert_called_with() + self.network.subnets.assert_called_once_with() self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) @@ -464,11 +465,78 @@ class TestListSubnet(TestSubnet): columns, data = self.cmd.take_action(parsed_args) - self.network.subnets.assert_called_with() + self.network.subnets.assert_called_once_with() self.assertEqual(self.columns_long, columns) self.assertEqual(self.data_long, list(data)) +class TestSetSubnet(TestSubnet): + + _subnet = network_fakes.FakeSubnet.create_one_subnet() + + def setUp(self): + super(TestSetSubnet, self).setUp() + self.network.update_subnet = mock.Mock(return_value=None) + self.network.find_subnet = mock.Mock(return_value=self._subnet) + self.cmd = subnet_v2.SetSubnet(self.app, self.namespace) + + def test_set_this(self): + arglist = [ + "--name", "new_subnet", + "--dhcp", + "--gateway", self._subnet.gateway_ip, + self._subnet.name, + ] + verifylist = [ + ('name', "new_subnet"), + ('dhcp', True), + ('gateway', self._subnet.gateway_ip), + ('subnet', self._subnet.name), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + attrs = { + 'enable_dhcp': True, + 'gateway_ip': self._subnet.gateway_ip, + 'name': "new_subnet", + } + self.network.update_subnet.assert_called_with(self._subnet, **attrs) + self.assertIsNone(result) + + def test_set_that(self): + arglist = [ + "--name", "new_subnet", + "--no-dhcp", + "--gateway", "none", + self._subnet.name, + ] + verifylist = [ + ('name', "new_subnet"), + ('no_dhcp', True), + ('gateway', "none"), + ('subnet', self._subnet.name), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + attrs = { + 'enable_dhcp': False, + 'gateway_ip': None, + 'name': "new_subnet", + } + self.network.update_subnet.assert_called_with(self._subnet, **attrs) + self.assertIsNone(result) + + def test_set_nothing(self): + arglist = [self._subnet.name, ] + verifylist = [('subnet', self._subnet.name)] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + self.assertRaises(exceptions.CommandError, self.cmd.take_action, + parsed_args) + + class TestShowSubnet(TestSubnet): # The subnets to be shown _subnet = network_fakes.FakeSubnet.create_one_subnet() @@ -535,8 +603,8 @@ class TestShowSubnet(TestSubnet): parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.network.find_subnet.assert_called_with(self._subnet.name, - ignore_missing=False) + self.network.find_subnet.assert_called_once_with( + self._subnet.name, ignore_missing=False) self.assertEqual(self.columns, columns) self.assertEqual(list(self.data), list(data)) diff --git a/openstackclient/tests/network/v2/test_subnet_pool.py b/openstackclient/tests/network/v2/test_subnet_pool.py index 99994681..093e26c6 100644 --- a/openstackclient/tests/network/v2/test_subnet_pool.py +++ b/openstackclient/tests/network/v2/test_subnet_pool.py @@ -12,11 +12,14 @@ # import argparse +import copy import mock from openstackclient.common import exceptions from openstackclient.common import utils from openstackclient.network.v2 import subnet_pool +from openstackclient.tests import fakes +from openstackclient.tests.identity.v3 import fakes as identity_fakes_v3 from openstackclient.tests.network.v2 import fakes as network_fakes from openstackclient.tests import utils as tests_utils @@ -73,6 +76,30 @@ class TestCreateSubnetPool(TestSubnetPool): # Get the command object to test self.cmd = subnet_pool.CreateSubnetPool(self.app, self.namespace) + # Set identity client. And get a shortcut to Identity client. + identity_client = identity_fakes_v3.FakeIdentityv3Client( + endpoint=fakes.AUTH_URL, + token=fakes.AUTH_TOKEN, + ) + self.app.client_manager.identity = identity_client + self.identity = self.app.client_manager.identity + + # Get a shortcut to the ProjectManager Mock + self.projects_mock = self.identity.projects + self.projects_mock.get.return_value = fakes.FakeResource( + None, + copy.deepcopy(identity_fakes_v3.PROJECT), + loaded=True, + ) + + # Get a shortcut to the DomainManager Mock + self.domains_mock = self.identity.domains + self.domains_mock.get.return_value = fakes.FakeResource( + None, + copy.deepcopy(identity_fakes_v3.DOMAIN), + loaded=True, + ) + def test_create_no_options(self): arglist = [] verifylist = [] @@ -94,7 +121,7 @@ class TestCreateSubnetPool(TestSubnetPool): columns, data = (self.cmd.take_action(parsed_args)) - self.network.create_subnet_pool.assert_called_with(**{ + self.network.create_subnet_pool.assert_called_once_with(**{ 'prefixes': ['10.0.10.0/24'], 'name': self._subnet_pool.name, }) @@ -118,10 +145,11 @@ class TestCreateSubnetPool(TestSubnetPool): columns, data = (self.cmd.take_action(parsed_args)) - self.network.create_subnet_pool.assert_called_with(**{ - 'default_prefix_length': self._subnet_pool.default_prefixlen, - 'max_prefix_length': self._subnet_pool.max_prefixlen, - 'min_prefix_length': self._subnet_pool.min_prefixlen, + self.network.create_subnet_pool.assert_called_once_with(**{ + 'default_prefixlen': self._subnet_pool.default_prefixlen, + 'max_prefixlen': self._subnet_pool.max_prefixlen, + 'min_prefixlen': self._subnet_pool.min_prefixlen, + 'prefixes': [], 'name': self._subnet_pool.name, }) self.assertEqual(self.columns, columns) @@ -140,6 +168,31 @@ class TestCreateSubnetPool(TestSubnetPool): self.assertRaises(argparse.ArgumentTypeError, self.check_parser, self.cmd, arglist, verifylist) + def test_create_project_domain(self): + arglist = [ + '--pool-prefix', '10.0.10.0/24', + "--project", identity_fakes_v3.project_name, + "--project-domain", identity_fakes_v3.domain_name, + self._subnet_pool.name, + ] + verifylist = [ + ('prefixes', ['10.0.10.0/24']), + ('project', identity_fakes_v3.project_name), + ('project_domain', identity_fakes_v3.domain_name), + ('name', self._subnet_pool.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = (self.cmd.take_action(parsed_args)) + + self.network.create_subnet_pool.assert_called_once_with(**{ + 'prefixes': ['10.0.10.0/24'], + 'tenant_id': identity_fakes_v3.project_id, + 'name': self._subnet_pool.name, + }) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + class TestDeleteSubnetPool(TestSubnetPool): @@ -169,7 +222,8 @@ class TestDeleteSubnetPool(TestSubnetPool): result = self.cmd.take_action(parsed_args) - self.network.delete_subnet_pool.assert_called_with(self._subnet_pool) + self.network.delete_subnet_pool.assert_called_once_with( + self._subnet_pool) self.assertIsNone(result) @@ -222,7 +276,7 @@ class TestListSubnetPool(TestSubnetPool): columns, data = self.cmd.take_action(parsed_args) - self.network.subnet_pools.assert_called_with() + self.network.subnet_pools.assert_called_once_with() self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) @@ -237,7 +291,7 @@ class TestListSubnetPool(TestSubnetPool): columns, data = self.cmd.take_action(parsed_args) - self.network.subnet_pools.assert_called_with() + self.network.subnet_pools.assert_called_once_with() self.assertEqual(self.columns_long, columns) self.assertEqual(self.data_long, list(data)) @@ -277,10 +331,10 @@ class TestSetSubnetPool(TestSubnetPool): attrs = { 'name': 'noob', - 'default_prefix_length': '8', - 'min_prefix_length': '8', + 'default_prefixlen': '8', + 'min_prefixlen': '8', } - self.network.update_subnet_pool.assert_called_with( + self.network.update_subnet_pool.assert_called_once_with( self._subnet_pool, **attrs) self.assertIsNone(result) @@ -304,9 +358,9 @@ class TestSetSubnetPool(TestSubnetPool): prefixes.extend(self._subnet_pool.prefixes) attrs = { 'prefixes': prefixes, - 'max_prefix_length': '16', + 'max_prefixlen': '16', } - self.network.update_subnet_pool.assert_called_with( + self.network.update_subnet_pool.assert_called_once_with( self._subnet_pool, **attrs) self.assertIsNone(result) @@ -396,7 +450,7 @@ class TestShowSubnetPool(TestSubnetPool): columns, data = self.cmd.take_action(parsed_args) - self.network.find_subnet_pool.assert_called_with( + self.network.find_subnet_pool.assert_called_once_with( self._subnet_pool.name, ignore_missing=False ) |
