diff options
Diffstat (limited to 'openstackclient/tests/unit/network')
| -rw-r--r-- | openstackclient/tests/unit/network/v2/fakes.py | 5 | ||||
| -rw-r--r-- | openstackclient/tests/unit/network/v2/test_network.py | 169 | ||||
| -rw-r--r-- | openstackclient/tests/unit/network/v2/test_port.py | 201 | ||||
| -rw-r--r-- | openstackclient/tests/unit/network/v2/test_router.py | 146 | ||||
| -rw-r--r-- | openstackclient/tests/unit/network/v2/test_subnet.py | 164 | ||||
| -rw-r--r-- | openstackclient/tests/unit/network/v2/test_subnet_pool.py | 153 |
6 files changed, 771 insertions, 67 deletions
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py index 98bda164..eadab584 100644 --- a/openstackclient/tests/unit/network/v2/fakes.py +++ b/openstackclient/tests/unit/network/v2/fakes.py @@ -350,6 +350,7 @@ class FakeNetwork(object): 'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex, 'ipv4_address_scope': 'ipv4' + uuid.uuid4().hex, 'ipv6_address_scope': 'ipv6' + uuid.uuid4().hex, + 'tags': [], } # Overwrite default attributes. @@ -576,6 +577,7 @@ class FakePort(object): 'status': 'ACTIVE', 'tenant_id': 'project-id-' + uuid.uuid4().hex, 'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex, + 'tags': [], } # Overwrite default attributes. @@ -1053,6 +1055,7 @@ class FakeRouter(object): 'external_gateway_info': {}, 'availability_zone_hints': [], 'availability_zones': [], + 'tags': [], } # Overwrite default attributes. @@ -1294,6 +1297,7 @@ class FakeSubnet(object): 'service_types': [], 'subnetpool_id': None, 'description': 'subnet-description-' + uuid.uuid4().hex, + 'tags': [], } # Overwrite default attributes. @@ -1544,6 +1548,7 @@ class FakeSubnetPool(object): 'default_quota': None, 'ip_version': '4', 'description': 'subnet-pool-description-' + uuid.uuid4().hex, + 'tags': [], } # Overwrite default attributes. diff --git a/openstackclient/tests/unit/network/v2/test_network.py b/openstackclient/tests/unit/network/v2/test_network.py index bc8c4024..7b20c793 100644 --- a/openstackclient/tests/unit/network/v2/test_network.py +++ b/openstackclient/tests/unit/network/v2/test_network.py @@ -105,6 +105,7 @@ class TestCreateNetworkIdentityV3(TestNetwork): super(TestCreateNetworkIdentityV3, self).setUp() self.network.create_network = mock.Mock(return_value=self._network) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = network.CreateNetwork(self.app, self.namespace) @@ -139,6 +140,7 @@ class TestCreateNetworkIdentityV3(TestNetwork): 'admin_state_up': True, 'name': self._network.name, }) + self.assertFalse(self.network.set_tags.called) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -228,6 +230,44 @@ class TestCreateNetworkIdentityV3(TestNetwork): self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) + def _test_create_with_tag(self, add_tags=True): + arglist = [self._network.name] + if add_tags: + arglist += ['--tag', 'red', '--tag', 'blue'] + else: + arglist += ['--no-tag'] + verifylist = [ + ('name', self._network.name), + ('enable', True), + ('share', None), + ('project', None), + ('external', False), + ] + if add_tags: + verifylist.append(('tags', ['red', 'blue'])) + else: + verifylist.append(('no_tag', True)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = (self.cmd.take_action(parsed_args)) + + self.network.create_network.assert_called_once_with( + name=self._network.name, admin_state_up=True) + if add_tags: + self.network.set_tags.assert_called_once_with( + self._network, + tests_utils.CompareBySet(['red', 'blue'])) + else: + self.assertFalse(self.network.set_tags.called) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_create_with_tags(self): + self._test_create_with_tag(add_tags=True) + + def test_create_with_no_tag(self): + self._test_create_with_tag(add_tags=False) + class TestCreateNetworkIdentityV2(TestNetwork): @@ -287,6 +327,7 @@ class TestCreateNetworkIdentityV2(TestNetwork): super(TestCreateNetworkIdentityV2, self).setUp() self.network.create_network = mock.Mock(return_value=self._network) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = network.CreateNetwork(self.app, self.namespace) @@ -328,6 +369,7 @@ class TestCreateNetworkIdentityV2(TestNetwork): 'tenant_id': self.project.id, 'project_id': self.project.id, }) + self.assertFalse(self.network.set_tags.called) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -461,6 +503,7 @@ class TestListNetwork(TestNetwork): 'Network Type', 'Router Type', 'Availability Zones', + 'Tags', ) data = [] @@ -484,6 +527,7 @@ class TestListNetwork(TestNetwork): net.provider_network_type, network._format_router_external(net.is_router_external), utils.format_list(net.availability_zones), + utils.format_list(net.tags), )) def setUp(self): @@ -501,6 +545,9 @@ class TestListNetwork(TestNetwork): self.network.dhcp_agent_hosting_networks = mock.Mock( return_value=self._network) + # TestListTagMixin + self._tag_list_resource_mock = self.network.networks + def test_network_list_no_options(self): arglist = [] verifylist = [ @@ -794,11 +841,37 @@ class TestListNetwork(TestNetwork): self.assertEqual(self.columns, columns) self.assertEqual(list(data), list(self.data)) + def test_list_with_tag_options(self): + arglist = [ + '--tags', 'red,blue', + '--any-tags', 'red,green', + '--not-tags', 'orange,yellow', + '--not-any-tags', 'black,white', + ] + verifylist = [ + ('tags', ['red', 'blue']), + ('any_tags', ['red', 'green']), + ('not_tags', ['orange', 'yellow']), + ('not_any_tags', ['black', 'white']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + self.network.networks.assert_called_once_with( + **{'tags': 'red,blue', + 'any_tags': 'red,green', + 'not_tags': 'orange,yellow', + 'not_any_tags': 'black,white'} + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + class TestSetNetwork(TestNetwork): # The network to set. - _network = network_fakes.FakeNetwork.create_one_network() + _network = network_fakes.FakeNetwork.create_one_network( + {'tags': ['green', 'red']}) qos_policy = (network_fakes.FakeNetworkQosPolicy. create_one_qos_policy(attrs={'id': _network.qos_policy_id})) @@ -806,6 +879,7 @@ class TestSetNetwork(TestNetwork): super(TestSetNetwork, self).setUp() self.network.update_network = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) self.network.find_network = mock.Mock(return_value=self._network) self.network.find_qos_policy = mock.Mock(return_value=self.qos_policy) @@ -902,11 +976,38 @@ class TestSetNetwork(TestNetwork): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - attrs = {} - self.network.update_network.assert_called_once_with( - self._network, **attrs) + self.assertFalse(self.network.update_network.called) + self.assertFalse(self.network.set_tags.called) self.assertIsNone(result) + def _test_set_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['red', 'blue', 'green'] + else: + arglist = ['--no-tag'] + verifylist = [('no_tag', True)] + expected_args = [] + arglist.append(self._network.name) + verifylist.append( + ('network', self._network.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_network.called) + self.network.set_tags.assert_called_once_with( + self._network, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_set_with_tags(self): + self._test_set_tags(with_tags=True) + + def test_set_with_no_tag(self): + self._test_set_tags(with_tags=False) + class TestShowNetwork(TestNetwork): @@ -990,3 +1091,63 @@ class TestShowNetwork(TestNetwork): self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) + + +class TestUnsetNetwork(TestNetwork): + + # The network to set. + _network = network_fakes.FakeNetwork.create_one_network( + {'tags': ['green', 'red']}) + qos_policy = (network_fakes.FakeNetworkQosPolicy. + create_one_qos_policy(attrs={'id': _network.qos_policy_id})) + + def setUp(self): + super(TestUnsetNetwork, self).setUp() + + self.network.update_network = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) + + self.network.find_network = mock.Mock(return_value=self._network) + self.network.find_qos_policy = mock.Mock(return_value=self.qos_policy) + + # Get the command object to test + self.cmd = network.UnsetNetwork(self.app, self.namespace) + + def test_unset_nothing(self): + arglist = [self._network.name, ] + verifylist = [('network', self._network.name), ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_network.called) + self.assertFalse(self.network.set_tags.called) + self.assertIsNone(result) + + def _test_unset_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['green'] + else: + arglist = ['--all-tag'] + verifylist = [('all_tag', True)] + expected_args = [] + arglist.append(self._network.name) + verifylist.append( + ('network', self._network.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_network.called) + self.network.set_tags.assert_called_once_with( + self._network, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_unset_with_tags(self): + self._test_unset_tags(with_tags=True) + + def test_unset_with_all_tag(self): + self._test_unset_tags(with_tags=False) diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py index a8a6dba9..97be5afd 100644 --- a/openstackclient/tests/unit/network/v2/test_port.py +++ b/openstackclient/tests/unit/network/v2/test_port.py @@ -35,7 +35,8 @@ class TestPort(network_fakes.TestNetworkV2): # Get a shortcut to the ProjectManager Mock self.projects_mock = self.app.client_manager.identity.projects - def _get_common_cols_data(self, fake_port): + @staticmethod + def _get_common_cols_data(fake_port): columns = ( 'admin_state_up', 'allowed_address_pairs', @@ -61,6 +62,7 @@ class TestPort(network_fakes.TestNetworkV2): 'qos_policy_id', 'security_group_ids', 'status', + 'tags', ) data = ( @@ -88,6 +90,7 @@ class TestPort(network_fakes.TestNetworkV2): fake_port.qos_policy_id, utils.format_list(fake_port.security_group_ids), fake_port.status, + utils.format_list(fake_port.tags), ) return columns, data @@ -96,11 +99,13 @@ class TestPort(network_fakes.TestNetworkV2): class TestCreatePort(TestPort): _port = network_fakes.FakePort.create_one_port() + columns, data = TestPort._get_common_cols_data(_port) def setUp(self): super(TestCreatePort, self).setUp() self.network.create_port = mock.Mock(return_value=self._port) + self.network.set_tags = mock.Mock(return_value=None) fake_net = network_fakes.FakeNetwork.create_one_network({ 'id': self._port.network_id, }) @@ -129,10 +134,10 @@ class TestCreatePort(TestPort): 'network_id': self._port.network_id, 'name': 'test-port', }) + self.assertFalse(self.network.set_tags.called) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_full_options(self): arglist = [ @@ -166,7 +171,6 @@ class TestCreatePort(TestPort): ('network', self._port.network_id), ('dns_name', '8.8.8.8'), ('name', 'test-port'), - ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -187,9 +191,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_invalid_json_binding_profile(self): arglist = [ @@ -239,9 +242,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_with_security_group(self): secgroup = network_fakes.FakeSecurityGroup.create_one_security_group() @@ -269,9 +271,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_port_with_dns_name(self): arglist = [ @@ -296,9 +297,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_with_security_groups(self): sg_1 = network_fakes.FakeSecurityGroup.create_one_security_group() @@ -327,9 +327,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_with_no_security_groups(self): arglist = [ @@ -354,9 +353,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_port_with_allowed_address_pair_ipaddr(self): pairs = [{'ip_address': '192.168.1.123'}, @@ -385,9 +383,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_port_with_allowed_address_pair(self): pairs = [{'ip_address': '192.168.1.123', @@ -422,9 +419,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_port_with_qos(self): qos_policy = network_fakes.FakeNetworkQosPolicy.create_one_qos_policy() @@ -451,9 +447,8 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) - ref_columns, ref_data = self._get_common_cols_data(self._port) - self.assertEqual(ref_columns, columns) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) def test_create_port_security_enabled(self): arglist = [ @@ -503,6 +498,48 @@ class TestCreatePort(TestPort): 'name': 'test-port', }) + def _test_create_with_tag(self, add_tags=True): + arglist = [ + '--network', self._port.network_id, + 'test-port', + ] + if add_tags: + arglist += ['--tag', 'red', '--tag', 'blue'] + else: + arglist += ['--no-tag'] + verifylist = [ + ('network', self._port.network_id,), + ('enable', True), + ('name', 'test-port'), + ] + if add_tags: + verifylist.append(('tags', ['red', 'blue'])) + else: + verifylist.append(('no_tag', True)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = (self.cmd.take_action(parsed_args)) + + self.network.create_port.assert_called_once_with( + admin_state_up=True, + network_id=self._port.network_id, + name='test-port' + ) + if add_tags: + self.network.set_tags.assert_called_once_with( + self._port, + tests_utils.CompareBySet(['red', 'blue'])) + else: + self.assertFalse(self.network.set_tags.called) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_create_with_tags(self): + self._test_create_with_tag(add_tags=True) + + def test_create_with_no_tag(self): + self._test_create_with_tag(add_tags=False) + class TestDeletePort(TestPort): @@ -603,6 +640,7 @@ class TestListPort(TestPort): 'Status', 'Security Groups', 'Device Owner', + 'Tags', ) data = [] @@ -625,6 +663,7 @@ class TestListPort(TestPort): prt.status, utils.format_list(prt.security_group_ids), prt.device_owner, + utils.format_list(prt.tags), )) def setUp(self): @@ -901,10 +940,35 @@ class TestListPort(TestPort): self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) + def test_list_with_tag_options(self): + arglist = [ + '--tags', 'red,blue', + '--any-tags', 'red,green', + '--not-tags', 'orange,yellow', + '--not-any-tags', 'black,white', + ] + verifylist = [ + ('tags', ['red', 'blue']), + ('any_tags', ['red', 'green']), + ('not_tags', ['orange', 'yellow']), + ('not_any_tags', ['black', 'white']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + self.network.ports.assert_called_once_with( + **{'tags': 'red,blue', + 'any_tags': 'red,green', + 'not_tags': 'orange,yellow', + 'not_any_tags': 'black,white'} + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + class TestSetPort(TestPort): - _port = network_fakes.FakePort.create_one_port() + _port = network_fakes.FakePort.create_one_port({'tags': ['green', 'red']}) def setUp(self): super(TestSetPort, self).setUp() @@ -912,6 +976,7 @@ class TestSetPort(TestPort): self.network.find_subnet = mock.Mock(return_value=self.fake_subnet) self.network.find_port = mock.Mock(return_value=self._port) self.network.update_port = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = port.SetPort(self.app, self.namespace) @@ -926,8 +991,8 @@ class TestSetPort(TestPort): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - attrs = {} - self.network.update_port.assert_called_once_with(self._port, **attrs) + self.assertFalse(self.network.update_port.called) + self.assertFalse(self.network.set_tags.called) self.assertIsNone(result) def test_set_port_fixed_ip(self): @@ -1407,11 +1472,40 @@ class TestSetPort(TestPort): arglist, None) + def _test_set_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['red', 'blue', 'green'] + else: + arglist = ['--no-tag'] + verifylist = [('no_tag', True)] + expected_args = [] + arglist.append(self._port.name) + verifylist.append( + ('port', self._port.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_port.called) + self.network.set_tags.assert_called_once_with( + self._port, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_set_with_tags(self): + self._test_set_tags(with_tags=True) + + def test_set_with_no_tag(self): + self._test_set_tags(with_tags=False) + class TestShowPort(TestPort): # The port to show. _port = network_fakes.FakePort.create_one_port() + columns, data = TestPort._get_common_cols_data(_port) def setUp(self): super(TestShowPort, self).setUp() @@ -1442,9 +1536,8 @@ class TestShowPort(TestPort): 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) - self.assertEqual(ref_data, data) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) class TestUnsetPort(TestPort): @@ -1456,12 +1549,14 @@ class TestUnsetPort(TestPort): 'ip_address': '0.0.0.1'}, {'subnet_id': '042eb10a-3a18-4658-ab-cf47c8d03152', 'ip_address': '1.0.0.0'}], - 'binding:profile': {'batman': 'Joker', 'Superman': 'LexLuthor'}}) + 'binding:profile': {'batman': 'Joker', 'Superman': 'LexLuthor'}, + 'tags': ['green', 'red'], }) self.fake_subnet = network_fakes.FakeSubnet.create_one_subnet( {'id': '042eb10a-3a18-4658-ab-cf47c8d03152'}) self.network.find_subnet = mock.Mock(return_value=self.fake_subnet) self.network.find_port = mock.Mock(return_value=self._testport) self.network.update_port = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = port.UnsetPort(self.app, self.namespace) @@ -1632,3 +1727,31 @@ class TestUnsetPort(TestPort): self.network.update_port.assert_called_once_with(_fake_port, **attrs) self.assertIsNone(result) + + def _test_unset_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['green'] + else: + arglist = ['--all-tag'] + verifylist = [('all_tag', True)] + expected_args = [] + arglist.append(self._testport.name) + verifylist.append( + ('port', self._testport.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_port.called) + self.network.set_tags.assert_called_once_with( + self._testport, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_unset_with_tags(self): + self._test_unset_tags(with_tags=True) + + def test_unset_with_all_tag(self): + self._test_unset_tags(with_tags=False) diff --git a/openstackclient/tests/unit/network/v2/test_router.py b/openstackclient/tests/unit/network/v2/test_router.py index c153fe4a..2248db9a 100644 --- a/openstackclient/tests/unit/network/v2/test_router.py +++ b/openstackclient/tests/unit/network/v2/test_router.py @@ -129,6 +129,7 @@ class TestCreateRouter(TestRouter): 'project_id', 'routes', 'status', + 'tags', ) data = ( router._format_admin_state(new_router.admin_state_up), @@ -143,12 +144,14 @@ class TestCreateRouter(TestRouter): new_router.tenant_id, router._format_routes(new_router.routes), new_router.status, + osc_utils.format_list(new_router.tags), ) def setUp(self): super(TestCreateRouter, self).setUp() self.network.create_router = mock.Mock(return_value=self.new_router) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = router.CreateRouter(self.app, self.namespace) @@ -159,6 +162,7 @@ class TestCreateRouter(TestRouter): self.assertRaises(tests_utils.ParserException, self.check_parser, self.cmd, arglist, verifylist) + self.assertFalse(self.network.set_tags.called) def test_create_default_options(self): arglist = [ @@ -178,6 +182,7 @@ class TestCreateRouter(TestRouter): 'admin_state_up': True, 'name': self.new_router.name, }) + self.assertFalse(self.network.set_tags.called) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -265,6 +270,45 @@ class TestCreateRouter(TestRouter): self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) + def _test_create_with_tag(self, add_tags=True): + arglist = [self.new_router.name] + if add_tags: + arglist += ['--tag', 'red', '--tag', 'blue'] + else: + arglist += ['--no-tag'] + verifylist = [ + ('name', self.new_router.name), + ('enable', True), + ('distributed', False), + ('ha', False), + ] + if add_tags: + verifylist.append(('tags', ['red', 'blue'])) + else: + verifylist.append(('no_tag', True)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = (self.cmd.take_action(parsed_args)) + + self.network.create_router.assert_called_once_with( + name=self.new_router.name, + admin_state_up=True + ) + if add_tags: + self.network.set_tags.assert_called_once_with( + self.new_router, + tests_utils.CompareBySet(['red', 'blue'])) + else: + self.assertFalse(self.network.set_tags.called) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_create_with_tags(self): + self._test_create_with_tag(add_tags=True) + + def test_create_with_no_tag(self): + self._test_create_with_tag(add_tags=False) + class TestDeleteRouter(TestRouter): @@ -363,11 +407,13 @@ class TestListRouter(TestRouter): columns_long = columns + ( 'Routes', 'External gateway info', - 'Availability zones' + 'Availability zones', + 'Tags', ) columns_long_no_az = columns + ( 'Routes', 'External gateway info', + 'Tags', ) data = [] @@ -404,6 +450,7 @@ class TestListRouter(TestRouter): router._format_routes(r.routes), router._format_external_gateway_info(r.external_gateway_info), osc_utils.format_list(r.availability_zones), + osc_utils.format_list(r.tags), ) ) data_long_no_az = [] @@ -413,6 +460,7 @@ class TestListRouter(TestRouter): data[i] + ( router._format_routes(r.routes), router._format_external_gateway_info(r.external_gateway_info), + osc_utils.format_list(r.tags), ) ) @@ -606,6 +654,31 @@ class TestListRouter(TestRouter): self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) + def test_list_with_tag_options(self): + arglist = [ + '--tags', 'red,blue', + '--any-tags', 'red,green', + '--not-tags', 'orange,yellow', + '--not-any-tags', 'black,white', + ] + verifylist = [ + ('tags', ['red', 'blue']), + ('any_tags', ['red', 'green']), + ('not_tags', ['orange', 'yellow']), + ('not_any_tags', ['black', 'white']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + self.network.routers.assert_called_once_with( + **{'tags': 'red,blue', + 'any_tags': 'red,green', + 'not_tags': 'orange,yellow', + 'not_any_tags': 'black,white'} + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + class TestRemovePortFromRouter(TestRouter): '''Remove port from a Router ''' @@ -691,13 +764,15 @@ class TestSetRouter(TestRouter): _network = network_fakes.FakeNetwork.create_one_network() _subnet = network_fakes.FakeSubnet.create_one_subnet() _router = network_fakes.FakeRouter.create_one_router( - attrs={'routes': [_default_route]} + attrs={'routes': [_default_route], + 'tags': ['green', 'red']} ) def setUp(self): super(TestSetRouter, self).setUp() self.network.router_add_gateway = mock.Mock() self.network.update_router = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) self.network.find_router = mock.Mock(return_value=self._router) self.network.find_network = mock.Mock(return_value=self._network) self.network.find_subnet = mock.Mock(return_value=self._subnet) @@ -902,9 +977,8 @@ class TestSetRouter(TestRouter): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - attrs = {} - self.network.update_router.assert_called_once_with( - self._router, **attrs) + self.assertFalse(self.network.update_router.called) + self.assertFalse(self.network.set_tags.called) self.assertIsNone(result) def test_wrong_gateway_params(self): @@ -1011,6 +1085,34 @@ class TestSetRouter(TestRouter): 'enable_snat': True, }}) self.assertIsNone(result) + def _test_set_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['red', 'blue', 'green'] + else: + arglist = ['--no-tag'] + verifylist = [('no_tag', True)] + expected_args = [] + arglist.append(self._router.name) + verifylist.append( + ('router', self._router.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_router.called) + self.network.set_tags.assert_called_once_with( + self._router, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_set_with_tags(self): + self._test_set_tags(with_tags=True) + + def test_set_with_no_tag(self): + self._test_set_tags(with_tags=False) + class TestShowRouter(TestRouter): @@ -1030,6 +1132,7 @@ class TestShowRouter(TestRouter): 'project_id', 'routes', 'status', + 'tags', ) data = ( router._format_admin_state(_router.admin_state_up), @@ -1044,6 +1147,7 @@ class TestShowRouter(TestRouter): _router.tenant_id, router._format_routes(_router.routes), _router.status, + osc_utils.format_list(_router.tags), ) def setUp(self): @@ -1086,10 +1190,12 @@ class TestUnsetRouter(TestRouter): {'routes': [{"destination": "192.168.101.1/24", "nexthop": "172.24.4.3"}, {"destination": "192.168.101.2/24", - "nexthop": "172.24.4.3"}], }) + "nexthop": "172.24.4.3"}], + 'tags': ['green', 'red'], }) self.fake_subnet = network_fakes.FakeSubnet.create_one_subnet() self.network.find_router = mock.Mock(return_value=self._testrouter) self.network.update_router = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = router.UnsetRouter(self.app, self.namespace) @@ -1140,3 +1246,31 @@ class TestUnsetRouter(TestRouter): self.network.update_router.assert_called_once_with( self._testrouter, **attrs) self.assertIsNone(result) + + def _test_unset_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['green'] + else: + arglist = ['--all-tag'] + verifylist = [('all_tag', True)] + expected_args = [] + arglist.append(self._testrouter.name) + verifylist.append( + ('router', self._testrouter.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_router.called) + self.network.set_tags.assert_called_once_with( + self._testrouter, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_unset_with_tags(self): + self._test_unset_tags(with_tags=True) + + def test_unset_with_all_tag(self): + self._test_unset_tags(with_tags=False) diff --git a/openstackclient/tests/unit/network/v2/test_subnet.py b/openstackclient/tests/unit/network/v2/test_subnet.py index 47de5616..c96d680f 100644 --- a/openstackclient/tests/unit/network/v2/test_subnet.py +++ b/openstackclient/tests/unit/network/v2/test_subnet.py @@ -125,6 +125,7 @@ class TestCreateSubnet(TestSubnet): 'segment_id', 'service_types', 'subnetpool_id', + 'tags', ) data = ( @@ -145,6 +146,7 @@ class TestCreateSubnet(TestSubnet): _subnet.segment_id, utils.format_list(_subnet.service_types), _subnet.subnetpool_id, + utils.format_list(_subnet.tags), ) data_subnet_pool = ( @@ -165,6 +167,7 @@ class TestCreateSubnet(TestSubnet): _subnet_from_pool.segment_id, utils.format_list(_subnet_from_pool.service_types), _subnet_from_pool.subnetpool_id, + utils.format_list(_subnet.tags), ) data_ipv6 = ( @@ -185,6 +188,7 @@ class TestCreateSubnet(TestSubnet): _subnet_ipv6.segment_id, utils.format_list(_subnet_ipv6.service_types), _subnet_ipv6.subnetpool_id, + utils.format_list(_subnet.tags), ) def setUp(self): @@ -197,6 +201,8 @@ class TestCreateSubnet(TestSubnet): self.domains_mock.get.return_value = self.domain # Mock SDK calls for all tests. + self.network.create_subnet = mock.Mock(return_value=self._subnet) + self.network.set_tags = mock.Mock(return_value=None) self.network.find_network = mock.Mock(return_value=self._network) self.network.find_segment = mock.Mock( return_value=self._network_segment @@ -213,10 +219,11 @@ class TestCreateSubnet(TestSubnet): # throw a "ParserExecption" self.assertRaises(tests_utils.ParserException, self.check_parser, self.cmd, arglist, verifylist) + self.assertFalse(self.network.create_subnet.called) + self.assertFalse(self.network.set_tags.called) def test_create_default_options(self): # Mock SDK calls for this test. - self.network.create_subnet = mock.Mock(return_value=self._subnet) self._network.id = self._subnet.network_id arglist = [ @@ -230,7 +237,6 @@ class TestCreateSubnet(TestSubnet): ('network', self._subnet.network_id), ('ip_version', self._subnet.ip_version), ('gateway', 'auto'), - ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -242,13 +248,14 @@ class TestCreateSubnet(TestSubnet): 'name': self._subnet.name, 'network_id': self._subnet.network_id, }) + self.assertFalse(self.network.set_tags.called) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) def test_create_from_subnet_pool_options(self): # Mock SDK calls for this test. - self.network.create_subnet = \ - mock.Mock(return_value=self._subnet_from_pool) + self.network.create_subnet.return_value = self._subnet_from_pool + self.network.set_tags = mock.Mock(return_value=None) self._network.id = self._subnet_from_pool.network_id arglist = [ @@ -309,7 +316,7 @@ class TestCreateSubnet(TestSubnet): def test_create_options_subnet_range_ipv6(self): # Mock SDK calls for this test. - self.network.create_subnet = mock.Mock(return_value=self._subnet_ipv6) + self.network.create_subnet.return_value = self._subnet_ipv6 self._network.id = self._subnet_ipv6.network_id arglist = [ @@ -376,12 +383,12 @@ class TestCreateSubnet(TestSubnet): 'allocation_pools': self._subnet_ipv6.allocation_pools, 'service_types': self._subnet_ipv6.service_types, }) + self.assertFalse(self.network.set_tags.called) self.assertEqual(self.columns, columns) self.assertEqual(self.data_ipv6, data) def test_create_with_network_segment(self): # Mock SDK calls for this test. - self.network.create_subnet = mock.Mock(return_value=self._subnet) self._network.id = self._subnet.network_id arglist = [ @@ -410,12 +417,12 @@ class TestCreateSubnet(TestSubnet): 'network_id': self._subnet.network_id, 'segment_id': self._network_segment.id, }) + self.assertFalse(self.network.set_tags.called) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) def test_create_with_description(self): # Mock SDK calls for this test. - self.network.create_subnet = mock.Mock(return_value=self._subnet) self._network.id = self._subnet.network_id arglist = [ @@ -444,9 +451,55 @@ class TestCreateSubnet(TestSubnet): 'network_id': self._subnet.network_id, 'description': self._subnet.description, }) + self.assertFalse(self.network.set_tags.called) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) + def _test_create_with_tag(self, add_tags=True): + arglist = [ + "--subnet-range", self._subnet.cidr, + "--network", self._subnet.network_id, + self._subnet.name, + ] + if add_tags: + arglist += ['--tag', 'red', '--tag', 'blue'] + else: + arglist += ['--no-tag'] + verifylist = [ + ('name', self._subnet.name), + ('subnet_range', self._subnet.cidr), + ('network', self._subnet.network_id), + ('ip_version', self._subnet.ip_version), + ('gateway', 'auto'), + ] + if add_tags: + verifylist.append(('tags', ['red', 'blue'])) + else: + verifylist.append(('no_tag', True)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = (self.cmd.take_action(parsed_args)) + + self.network.create_subnet.assert_called_once_with( + cidr=self._subnet.cidr, + ip_version=self._subnet.ip_version, + name=self._subnet.name, + network_id=self._subnet.network_id) + if add_tags: + self.network.set_tags.assert_called_once_with( + self._subnet, + tests_utils.CompareBySet(['red', 'blue'])) + else: + self.assertFalse(self.network.set_tags.called) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_create_with_tags(self): + self._test_create_with_tag(add_tags=True) + + def test_create_with_no_tag(self): + self._test_create_with_tag(add_tags=False) + class TestDeleteSubnet(TestSubnet): @@ -546,6 +599,7 @@ class TestListSubnet(TestSubnet): 'IP Version', 'Gateway', 'Service Types', + 'Tags', ) data = [] @@ -572,6 +626,7 @@ class TestListSubnet(TestSubnet): subnet.ip_version, subnet.gateway_ip, utils.format_list(subnet.service_types), + utils.format_list(subnet.tags), )) def setUp(self): @@ -801,14 +856,41 @@ class TestListSubnet(TestSubnet): self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) + def test_list_with_tag_options(self): + arglist = [ + '--tags', 'red,blue', + '--any-tags', 'red,green', + '--not-tags', 'orange,yellow', + '--not-any-tags', 'black,white', + ] + verifylist = [ + ('tags', ['red', 'blue']), + ('any_tags', ['red', 'green']), + ('not_tags', ['orange', 'yellow']), + ('not_any_tags', ['black', 'white']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + self.network.subnets.assert_called_once_with( + **{'tags': 'red,blue', + 'any_tags': 'red,green', + 'not_tags': 'orange,yellow', + 'not_any_tags': 'black,white'} + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + class TestSetSubnet(TestSubnet): - _subnet = network_fakes.FakeSubnet.create_one_subnet() + _subnet = network_fakes.FakeSubnet.create_one_subnet( + {'tags': ['green', 'red']}) def setUp(self): super(TestSetSubnet, self).setUp() self.network.update_subnet = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) self.network.find_subnet = mock.Mock(return_value=self._subnet) self.cmd = subnet_v2.SetSubnet(self.app, self.namespace) @@ -867,8 +949,8 @@ class TestSetSubnet(TestSubnet): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - attrs = {} - self.network.update_subnet.assert_called_with(self._subnet, **attrs) + self.assertFalse(self.network.update_subnet.called) + self.assertFalse(self.network.set_tags.called) self.assertIsNone(result) def test_append_options(self): @@ -959,6 +1041,34 @@ class TestSetSubnet(TestSubnet): _testsubnet, **attrs) self.assertIsNone(result) + def _test_set_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['red', 'blue', 'green'] + else: + arglist = ['--no-tag'] + verifylist = [('no_tag', True)] + expected_args = [] + arglist.append(self._subnet.name) + verifylist.append( + ('subnet', self._subnet.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_subnet.called) + self.network.set_tags.assert_called_once_with( + self._subnet, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_set_with_tags(self): + self._test_set_tags(with_tags=True) + + def test_set_with_no_tag(self): + self._test_set_tags(with_tags=False) + class TestShowSubnet(TestSubnet): # The subnets to be shown @@ -982,6 +1092,7 @@ class TestShowSubnet(TestSubnet): 'segment_id', 'service_types', 'subnetpool_id', + 'tags', ) data = ( @@ -1002,6 +1113,7 @@ class TestShowSubnet(TestSubnet): _subnet.segment_id, utils.format_list(_subnet.service_types), _subnet.subnetpool_id, + utils.format_list(_subnet.tags), ) def setUp(self): @@ -1055,9 +1167,11 @@ class TestUnsetSubnet(TestSubnet): {'start': '8.8.8.160', 'end': '8.8.8.170'}], 'service_types': ['network:router_gateway', - 'network:floatingip_agent_gateway'], }) + 'network:floatingip_agent_gateway'], + 'tags': ['green', 'red'], }) self.network.find_subnet = mock.Mock(return_value=self._testsubnet) self.network.update_subnet = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = subnet_v2.UnsetSubnet(self.app, self.namespace) @@ -1169,3 +1283,31 @@ class TestUnsetSubnet(TestSubnet): parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.assertRaises(exceptions.CommandError, self.cmd.take_action, parsed_args) + + def _test_unset_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['green'] + else: + arglist = ['--all-tag'] + verifylist = [('all_tag', True)] + expected_args = [] + arglist.append(self._testsubnet.name) + verifylist.append( + ('subnet', self._testsubnet.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_subnet.called) + self.network.set_tags.assert_called_once_with( + self._testsubnet, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_unset_with_tags(self): + self._test_unset_tags(with_tags=True) + + def test_unset_with_all_tag(self): + self._test_unset_tags(with_tags=False) diff --git a/openstackclient/tests/unit/network/v2/test_subnet_pool.py b/openstackclient/tests/unit/network/v2/test_subnet_pool.py index 80a57bbb..139fddf8 100644 --- a/openstackclient/tests/unit/network/v2/test_subnet_pool.py +++ b/openstackclient/tests/unit/network/v2/test_subnet_pool.py @@ -60,6 +60,7 @@ class TestCreateSubnetPool(TestSubnetPool): 'prefixes', 'project_id', 'shared', + 'tags', ) data = ( _subnet_pool.address_scope_id, @@ -75,6 +76,7 @@ class TestCreateSubnetPool(TestSubnetPool): utils.format_list(_subnet_pool.prefixes), _subnet_pool.project_id, _subnet_pool.shared, + utils.format_list(_subnet_pool.tags), ) def setUp(self): @@ -82,6 +84,7 @@ class TestCreateSubnetPool(TestSubnetPool): self.network.create_subnet_pool = mock.Mock( return_value=self._subnet_pool) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = subnet_pool.CreateSubnetPool(self.app, self.namespace) @@ -98,6 +101,7 @@ class TestCreateSubnetPool(TestSubnetPool): self.assertRaises(tests_utils.ParserException, self.check_parser, self.cmd, arglist, verifylist) + self.assertFalse(self.network.set_tags.called) def test_create_no_pool_prefix(self): """Make sure --pool-prefix is a required argument""" @@ -127,6 +131,7 @@ class TestCreateSubnetPool(TestSubnetPool): 'prefixes': ['10.0.10.0/24'], 'name': self._subnet_pool.name, }) + self.assertFalse(self.network.set_tags.called) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -291,6 +296,46 @@ class TestCreateSubnetPool(TestSubnetPool): self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) + def _test_create_with_tag(self, add_tags=True): + arglist = [ + '--pool-prefix', '10.0.10.0/24', + self._subnet_pool.name, + ] + if add_tags: + arglist += ['--tag', 'red', '--tag', 'blue'] + else: + arglist += ['--no-tag'] + verifylist = [ + ('prefixes', ['10.0.10.0/24']), + ('name', self._subnet_pool.name), + ] + if add_tags: + verifylist.append(('tags', ['red', 'blue'])) + else: + verifylist.append(('no_tag', True)) + + 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'], + name=self._subnet_pool.name + ) + if add_tags: + self.network.set_tags.assert_called_once_with( + self._subnet_pool, + tests_utils.CompareBySet(['red', 'blue'])) + else: + self.assertFalse(self.network.set_tags.called) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_create_with_tags(self): + self._test_create_with_tag(add_tags=True) + + def test_create_with_no_tag(self): + self._test_create_with_tag(add_tags=False) + class TestDeleteSubnetPool(TestSubnetPool): @@ -388,6 +433,7 @@ class TestListSubnetPool(TestSubnetPool): 'Address Scope', 'Default Subnet Pool', 'Shared', + 'Tags', ) data = [] @@ -408,6 +454,7 @@ class TestListSubnetPool(TestSubnetPool): pool.address_scope_id, pool.is_default, pool.shared, + utils.format_list(pool.tags), )) def setUp(self): @@ -584,12 +631,38 @@ class TestListSubnetPool(TestSubnetPool): self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) + def test_list_with_tag_options(self): + arglist = [ + '--tags', 'red,blue', + '--any-tags', 'red,green', + '--not-tags', 'orange,yellow', + '--not-any-tags', 'black,white', + ] + verifylist = [ + ('tags', ['red', 'blue']), + ('any_tags', ['red', 'green']), + ('not_tags', ['orange', 'yellow']), + ('not_any_tags', ['black', 'white']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + self.network.subnet_pools.assert_called_once_with( + **{'tags': 'red,blue', + 'any_tags': 'red,green', + 'not_tags': 'orange,yellow', + 'not_any_tags': 'black,white'} + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + class TestSetSubnetPool(TestSubnetPool): # The subnet_pool to set. _subnet_pool = network_fakes.FakeSubnetPool.create_one_subnet_pool( - {'default_quota': 10}, + {'default_quota': 10, + 'tags': ['green', 'red']} ) _address_scope = network_fakes.FakeAddressScope.create_one_address_scope() @@ -598,6 +671,7 @@ class TestSetSubnetPool(TestSubnetPool): super(TestSetSubnetPool, self).setUp() self.network.update_subnet_pool = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) self.network.find_subnet_pool = mock.Mock( return_value=self._subnet_pool) @@ -667,9 +741,8 @@ class TestSetSubnetPool(TestSubnetPool): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - attrs = {} - self.network.update_subnet_pool.assert_called_once_with( - self._subnet_pool, **attrs) + self.assertFalse(self.network.update_subnet_pool.called) + self.assertFalse(self.network.set_tags.called) self.assertIsNone(result) def test_set_len_negative(self): @@ -834,6 +907,34 @@ class TestSetSubnetPool(TestSubnetPool): ) self.assertIsNone(result) + def _test_set_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['red', 'blue', 'green'] + else: + arglist = ['--no-tag'] + verifylist = [('no_tag', True)] + expected_args = [] + arglist.append(self._subnet_pool.name) + verifylist.append( + ('subnet_pool', self._subnet_pool.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_subnet_pool.called) + self.network.set_tags.assert_called_once_with( + self._subnet_pool, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_set_with_tags(self): + self._test_set_tags(with_tags=True) + + def test_set_with_no_tag(self): + self._test_set_tags(with_tags=False) + class TestShowSubnetPool(TestSubnetPool): @@ -854,6 +955,7 @@ class TestShowSubnetPool(TestSubnetPool): 'prefixes', 'project_id', 'shared', + 'tags', ) data = ( @@ -870,6 +972,7 @@ class TestShowSubnetPool(TestSubnetPool): utils.format_list(_subnet_pool.prefixes), _subnet_pool.tenant_id, _subnet_pool.shared, + utils.format_list(_subnet_pool.tags), ) def setUp(self): @@ -914,10 +1017,12 @@ class TestUnsetSubnetPool(TestSubnetPool): super(TestUnsetSubnetPool, self).setUp() self._subnetpool = network_fakes.FakeSubnetPool.create_one_subnet_pool( {'prefixes': ['10.0.10.0/24', '10.1.10.0/24', - '10.2.10.0/24'], }) + '10.2.10.0/24'], + 'tags': ['green', 'red']}) self.network.find_subnet_pool = mock.Mock( return_value=self._subnetpool) self.network.update_subnet_pool = mock.Mock(return_value=None) + self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = subnet_pool.UnsetSubnetPool(self.app, self.namespace) @@ -927,7 +1032,10 @@ class TestUnsetSubnetPool(TestSubnetPool): '--pool-prefix', '10.1.10.0/24', self._subnetpool.name, ] - verifylist = [('prefixes', ['10.0.10.0/24', '10.1.10.0/24'])] + verifylist = [ + ('prefixes', ['10.0.10.0/24', '10.1.10.0/24']), + ('subnet_pool', self._subnetpool.name), + ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) attrs = {'prefixes': ['10.2.10.0/24']} @@ -940,8 +1048,39 @@ class TestUnsetSubnetPool(TestSubnetPool): '--pool-prefix', '10.100.1.1/25', self._subnetpool.name, ] - verifylist = [('prefixes', ['10.100.1.1/25'])] + verifylist = [ + ('prefixes', ['10.100.1.1/25']), + ('subnet_pool', self._subnetpool.name), + ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.assertRaises(exceptions.CommandError, self.cmd.take_action, parsed_args) + + def _test_unset_tags(self, with_tags=True): + if with_tags: + arglist = ['--tag', 'red', '--tag', 'blue'] + verifylist = [('tags', ['red', 'blue'])] + expected_args = ['green'] + else: + arglist = ['--all-tag'] + verifylist = [('all_tag', True)] + expected_args = [] + arglist.append(self._subnetpool.name) + verifylist.append( + ('subnet_pool', self._subnetpool.name)) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + self.assertFalse(self.network.update_subnet_pool.called) + self.network.set_tags.assert_called_once_with( + self._subnetpool, + tests_utils.CompareBySet(expected_args)) + self.assertIsNone(result) + + def test_unset_with_tags(self): + self._test_unset_tags(with_tags=True) + + def test_unset_with_all_tag(self): + self._test_unset_tags(with_tags=False) |
