From 78a832441af3928994446d2afab07f0abb0dd26a Mon Sep 17 00:00:00 2001 From: Akihiro Motoki <amotoki@gmail.com> Date: Tue, 25 Jul 2017 09:22:29 +0000 Subject: [PATCH] network tag UT: avoid using mix-in test class This is a follow-up patch on https://review.openstack.org/#/c/461195/ There is a suggestion to keep test code more straight-forward and avoid using mix-in to reduce the code complexity. This commit moves all logic implemented in _test_tag.py into individual network tests. Change-Id: I0a9f8c6cd758db9035b0fd60ce4b9bfc791b6cbd --- .../tests/unit/network/v2/_test_tag.py | 190 ------------------ .../tests/unit/network/v2/test_network.py | 154 +++++++++++--- .../tests/unit/network/v2/test_port.py | 160 ++++++++++++--- .../tests/unit/network/v2/test_router.py | 156 +++++++++++--- .../tests/unit/network/v2/test_subnet.py | 168 ++++++++++++---- .../tests/unit/network/v2/test_subnet_pool.py | 159 +++++++++++---- 6 files changed, 628 insertions(+), 359 deletions(-) delete mode 100644 openstackclient/tests/unit/network/v2/_test_tag.py diff --git a/openstackclient/tests/unit/network/v2/_test_tag.py b/openstackclient/tests/unit/network/v2/_test_tag.py deleted file mode 100644 index bd46153782..0000000000 --- a/openstackclient/tests/unit/network/v2/_test_tag.py +++ /dev/null @@ -1,190 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# - -from openstackclient.tests.unit import utils as tests_utils - - -class TestCreateTagMixin(object): - """Test case mixin to test network tag operation for resource creation. - - * Each test class must create a mock for self.network.set_tags - * If you test tag operation combined with other options, - you need to write test(s) directly in individual test cases. - * The following instance attributes must be defined: - - * _tag_test_resource: Test resource returned by mocked create_<resource>. - * _tag_create_resource_mock: Mocked create_<resource> method of SDK. - * _tag_create_required_arglist: List of required arguments when creating - a resource with default options. - * _tag_create_required_verifylist: List of expected parsed_args params - when creating a resource with default options. - * _tag_create_required_attrs: Expected attributes passed to a mocked - create_resource method when creating a resource with default options. - """ - - def _test_create_with_tag(self, add_tags=True): - arglist = self._tag_create_required_arglist[:] - if add_tags: - arglist += ['--tag', 'red', '--tag', 'blue'] - else: - arglist += ['--no-tag'] - verifylist = self._tag_create_required_verifylist[:] - 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._tag_create_resource_mock.assert_called_once_with( - **self._tag_create_required_attrs) - if add_tags: - self.network.set_tags.assert_called_once_with( - self._tag_test_resource, - 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 TestListTagMixin(object): - """Test case mixin to test network tag operation for resource listing. - - * A test resource returned by find_<resource> must contains - "red" and "green" tags. - * Each test class must create a mock for self.network.set_tags - * If you test tag operation combined with other options, - you need to write test(s) directly in individual test cases. - * The following instance attributes must be defined: - - * _tag_create_resource_mock: Mocked list_<resource> method of SDK. - """ - - 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._tag_list_resource_mock.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 TestSetTagMixin(object): - """Test case mixin to test network tag operation for resource update. - - * A test resource returned by find_<resource> must contains - "red" and "green" tags. - * Each test class must create a mock for self.network.set_tags - * If you test tag operation combined with other options, - you need to write test(s) directly in individual test cases. - * The following instance attributes must be defined: - - * _tag_resource_name: positional arg name of a resource to be updated. - * _tag_test_resource: Test resource returned by mocked update_<resource>. - * _tag_update_resource_mock: Mocked update_<resource> method of SDK. - """ - - 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._tag_test_resource.name) - verifylist.append( - (self._tag_resource_name, self._tag_test_resource.name)) - - parsed_args = self.check_parser(self.cmd, arglist, verifylist) - result = self.cmd.take_action(parsed_args) - - self.assertFalse(self._tag_update_resource_mock.called) - self.network.set_tags.assert_called_once_with( - self._tag_test_resource, - 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 TestUnsetTagMixin(object): - """Test case mixin to test network tag operation for resource update. - - * Each test class must create a mock for self.network.set_tags - * If you test tag operation combined with other options, - you need to write test(s) directly in individual test cases. - * The following instance attributes must be defined: - - * _tag_resource_name: positional arg name of a resource to be updated. - * _tag_test_resource: Test resource returned by mocked update_<resource>. - * _tag_update_resource_mock: Mocked update_<resource> method of SDK. - """ - - 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._tag_test_resource.name) - verifylist.append( - (self._tag_resource_name, self._tag_test_resource.name)) - - parsed_args = self.check_parser(self.cmd, arglist, verifylist) - result = self.cmd.take_action(parsed_args) - - self.assertFalse(self._tag_update_resource_mock.called) - self.network.set_tags.assert_called_once_with( - self._tag_test_resource, - 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_network.py b/openstackclient/tests/unit/network/v2/test_network.py index e620cd9c1d..7b20c79338 100644 --- a/openstackclient/tests/unit/network/v2/test_network.py +++ b/openstackclient/tests/unit/network/v2/test_network.py @@ -22,7 +22,6 @@ from openstackclient.network.v2 import network from openstackclient.tests.unit import fakes from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes_v2 from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes_v3 -from openstackclient.tests.unit.network.v2 import _test_tag from openstackclient.tests.unit.network.v2 import fakes as network_fakes from openstackclient.tests.unit import utils as tests_utils @@ -42,7 +41,7 @@ class TestNetwork(network_fakes.TestNetworkV2): self.domains_mock = self.app.client_manager.identity.domains -class TestCreateNetworkIdentityV3(TestNetwork, _test_tag.TestCreateTagMixin): +class TestCreateNetworkIdentityV3(TestNetwork): project = identity_fakes_v3.FakeProject.create_one_project() domain = identity_fakes_v3.FakeDomain.create_one_domain() @@ -115,22 +114,6 @@ class TestCreateNetworkIdentityV3(TestNetwork, _test_tag.TestCreateTagMixin): self.domains_mock.get.return_value = self.domain self.network.find_qos_policy = mock.Mock(return_value=self.qos_policy) - # TestCreateTagMixin - self._tag_test_resource = self._network - self._tag_create_resource_mock = self.network.create_network - self._tag_create_required_arglist = [self._network.name] - self._tag_create_required_verifylist = [ - ('name', self._network.name), - ('enable', True), - ('share', None), - ('project', None), - ('external', False), - ] - self._tag_create_required_attrs = { - 'admin_state_up': True, - 'name': self._network.name, - } - def test_create_no_options(self): arglist = [] verifylist = [] @@ -247,6 +230,44 @@ class TestCreateNetworkIdentityV3(TestNetwork, _test_tag.TestCreateTagMixin): 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): @@ -461,7 +482,7 @@ class TestDeleteNetwork(TestNetwork): self.network.delete_network.assert_has_calls(calls) -class TestListNetwork(TestNetwork, _test_tag.TestListTagMixin): +class TestListNetwork(TestNetwork): # The networks going to be listed up. _network = network_fakes.FakeNetwork.create_networks(count=3) @@ -820,8 +841,33 @@ class TestListNetwork(TestNetwork, _test_tag.TestListTagMixin): 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) -class TestSetNetwork(TestNetwork, _test_tag.TestSetTagMixin): + 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( @@ -841,11 +887,6 @@ class TestSetNetwork(TestNetwork, _test_tag.TestSetTagMixin): # Get the command object to test self.cmd = network.SetNetwork(self.app, self.namespace) - # TestSetTagMixin - self._tag_resource_name = 'network' - self._tag_test_resource = self._network - self._tag_update_resource_mock = self.network.update_network - def test_set_this(self): arglist = [ self._network.name, @@ -939,6 +980,34 @@ class TestSetNetwork(TestNetwork, _test_tag.TestSetTagMixin): 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): @@ -1024,7 +1093,7 @@ class TestShowNetwork(TestNetwork): self.assertEqual(self.data, data) -class TestUnsetNetwork(TestNetwork, _test_tag.TestUnsetTagMixin): +class TestUnsetNetwork(TestNetwork): # The network to set. _network = network_fakes.FakeNetwork.create_one_network( @@ -1044,11 +1113,6 @@ class TestUnsetNetwork(TestNetwork, _test_tag.TestUnsetTagMixin): # Get the command object to test self.cmd = network.UnsetNetwork(self.app, self.namespace) - # TestUnsetNetwork - self._tag_resource_name = 'network' - self._tag_test_resource = self._network - self._tag_update_resource_mock = self.network.update_network - def test_unset_nothing(self): arglist = [self._network.name, ] verifylist = [('network', self._network.name), ] @@ -1059,3 +1123,31 @@ class TestUnsetNetwork(TestNetwork, _test_tag.TestUnsetTagMixin): 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 deda6b4128..97be5afd94 100644 --- a/openstackclient/tests/unit/network/v2/test_port.py +++ b/openstackclient/tests/unit/network/v2/test_port.py @@ -21,7 +21,6 @@ from osc_lib import utils from openstackclient.network.v2 import port from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes -from openstackclient.tests.unit.network.v2 import _test_tag from openstackclient.tests.unit.network.v2 import fakes as network_fakes from openstackclient.tests.unit import utils as tests_utils @@ -97,7 +96,7 @@ class TestPort(network_fakes.TestNetworkV2): return columns, data -class TestCreatePort(TestPort, _test_tag.TestCreateTagMixin): +class TestCreatePort(TestPort): _port = network_fakes.FakePort.create_one_port() columns, data = TestPort._get_common_cols_data(_port) @@ -116,24 +115,6 @@ class TestCreatePort(TestPort, _test_tag.TestCreateTagMixin): # Get the command object to test self.cmd = port.CreatePort(self.app, self.namespace) - # TestUnsetTagMixin - self._tag_test_resource = self._port - self._tag_create_resource_mock = self.network.create_port - self._tag_create_required_arglist = [ - '--network', self._port.network_id, - 'test-port', - ] - self._tag_create_required_verifylist = [ - ('network', self._port.network_id,), - ('enable', True), - ('name', 'test-port'), - ] - self._tag_create_required_attrs = { - 'admin_state_up': True, - 'network_id': self._port.network_id, - 'name': 'test-port', - } - def test_create_default_options(self): arglist = [ '--network', self._port.network_id, @@ -517,6 +498,48 @@ class TestCreatePort(TestPort, _test_tag.TestCreateTagMixin): '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): @@ -597,7 +620,7 @@ class TestDeletePort(TestPort): ) -class TestListPort(TestPort, _test_tag.TestListTagMixin): +class TestListPort(TestPort): _ports = network_fakes.FakePort.create_ports(count=3) @@ -658,8 +681,6 @@ class TestListPort(TestPort, _test_tag.TestListTagMixin): self.network.find_router = mock.Mock(return_value=fake_router) self.network.find_network = mock.Mock(return_value=fake_network) self.app.client_manager.compute = mock.Mock() - # TestUnsetTagMixin - self._tag_list_resource_mock = self.network.ports def test_port_list_no_options(self): arglist = [] @@ -919,8 +940,33 @@ class TestListPort(TestPort, _test_tag.TestListTagMixin): 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) -class TestSetPort(TestPort, _test_tag.TestSetTagMixin): + 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({'tags': ['green', 'red']}) @@ -934,10 +980,6 @@ class TestSetPort(TestPort, _test_tag.TestSetTagMixin): # Get the command object to test self.cmd = port.SetPort(self.app, self.namespace) - # TestSetTagMixin - self._tag_resource_name = 'port' - self._tag_test_resource = self._port - self._tag_update_resource_mock = self.network.update_port def test_set_port_defaults(self): arglist = [ @@ -1430,6 +1472,34 @@ class TestSetPort(TestPort, _test_tag.TestSetTagMixin): 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): @@ -1470,7 +1540,7 @@ class TestShowPort(TestPort): self.assertEqual(self.data, data) -class TestUnsetPort(TestPort, _test_tag.TestUnsetTagMixin): +class TestUnsetPort(TestPort): def setUp(self): super(TestUnsetPort, self).setUp() @@ -1489,10 +1559,6 @@ class TestUnsetPort(TestPort, _test_tag.TestUnsetTagMixin): self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = port.UnsetPort(self.app, self.namespace) - # TestUnsetTagMixin - self._tag_resource_name = 'port' - self._tag_test_resource = self._testport - self._tag_update_resource_mock = self.network.update_port def test_unset_port_parameters(self): arglist = [ @@ -1661,3 +1727,31 @@ class TestUnsetPort(TestPort, _test_tag.TestUnsetTagMixin): 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 d65c9aa9f7..2248db9a9c 100644 --- a/openstackclient/tests/unit/network/v2/test_router.py +++ b/openstackclient/tests/unit/network/v2/test_router.py @@ -19,7 +19,6 @@ from osc_lib import utils as osc_utils from openstackclient.network.v2 import router from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes_v3 -from openstackclient.tests.unit.network.v2 import _test_tag from openstackclient.tests.unit.network.v2 import fakes as network_fakes from openstackclient.tests.unit import utils as tests_utils @@ -112,7 +111,7 @@ class TestAddSubnetToRouter(TestRouter): self.assertIsNone(result) -class TestCreateRouter(TestRouter, _test_tag.TestCreateTagMixin): +class TestCreateRouter(TestRouter): # The new router created. new_router = network_fakes.FakeRouter.create_one_router() @@ -157,23 +156,6 @@ class TestCreateRouter(TestRouter, _test_tag.TestCreateTagMixin): # Get the command object to test self.cmd = router.CreateRouter(self.app, self.namespace) - # TestCreateTagMixin - self._tag_test_resource = self.new_router - self._tag_create_resource_mock = self.network.create_router - self._tag_create_required_arglist = [ - self.new_router.name, - ] - self._tag_create_required_verifylist = [ - ('name', self.new_router.name), - ('enable', True), - ('distributed', False), - ('ha', False), - ] - self._tag_create_required_attrs = { - 'admin_state_up': True, - 'name': self.new_router.name, - } - def test_create_no_options(self): arglist = [] verifylist = [] @@ -288,6 +270,45 @@ class TestCreateRouter(TestRouter, _test_tag.TestCreateTagMixin): 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): @@ -368,7 +389,7 @@ class TestDeleteRouter(TestRouter): ) -class TestListRouter(TestRouter, _test_tag.TestListTagMixin): +class TestListRouter(TestRouter): # The routers going to be listed up. routers = network_fakes.FakeRouter.create_routers(count=3) @@ -459,9 +480,6 @@ class TestListRouter(TestRouter, _test_tag.TestListTagMixin): self.network.get_agent = mock.Mock(return_value=self._testagent) self.network.get_router = mock.Mock(return_value=self.routers[0]) - # TestListTagMixin - self._tag_list_resource_mock = self.network.routers - def test_router_list_no_options(self): arglist = [] verifylist = [ @@ -636,6 +654,31 @@ class TestListRouter(TestRouter, _test_tag.TestListTagMixin): 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 ''' @@ -714,7 +757,7 @@ class TestRemoveSubnetFromRouter(TestRouter): self.assertIsNone(result) -class TestSetRouter(TestRouter, _test_tag.TestSetTagMixin): +class TestSetRouter(TestRouter): # The router to set. _default_route = {'destination': '10.20.20.0/24', 'nexthop': '10.20.30.1'} @@ -736,11 +779,6 @@ class TestSetRouter(TestRouter, _test_tag.TestSetTagMixin): # Get the command object to test self.cmd = router.SetRouter(self.app, self.namespace) - # TestSetTagMixin - self._tag_resource_name = 'router' - self._tag_test_resource = self._router - self._tag_update_resource_mock = self.network.update_router - def test_set_this(self): arglist = [ self._router.name, @@ -1047,6 +1085,34 @@ class TestSetRouter(TestRouter, _test_tag.TestSetTagMixin): '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): @@ -1132,10 +1198,6 @@ class TestUnsetRouter(TestRouter): self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = router.UnsetRouter(self.app, self.namespace) - # TestUnsetTagMixin - self._tag_resource_name = 'router' - self._tag_test_resource = self._testrouter - self._tag_update_resource_mock = self.network.update_router def test_unset_router_params(self): arglist = [ @@ -1184,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 509fbe6b12..c96d680fba 100644 --- a/openstackclient/tests/unit/network/v2/test_subnet.py +++ b/openstackclient/tests/unit/network/v2/test_subnet.py @@ -19,7 +19,6 @@ from osc_lib import utils from openstackclient.network.v2 import subnet as subnet_v2 from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes_v3 -from openstackclient.tests.unit.network.v2 import _test_tag from openstackclient.tests.unit.network.v2 import fakes as network_fakes from openstackclient.tests.unit import utils as tests_utils @@ -37,7 +36,7 @@ class TestSubnet(network_fakes.TestNetworkV2): self.domains_mock = self.app.client_manager.identity.domains -class TestCreateSubnet(TestSubnet, _test_tag.TestCreateTagMixin): +class TestCreateSubnet(TestSubnet): project = identity_fakes_v3.FakeProject.create_one_project() domain = identity_fakes_v3.FakeDomain.create_one_domain() @@ -212,28 +211,6 @@ class TestCreateSubnet(TestSubnet, _test_tag.TestCreateTagMixin): return_value=self._subnet_pool ) - # TestUnsetTagMixin - self._tag_test_resource = self._subnet - self._tag_create_resource_mock = self.network.create_subnet - self._tag_create_required_arglist = [ - "--subnet-range", self._subnet.cidr, - "--network", self._subnet.network_id, - self._subnet.name, - ] - self._tag_create_required_verifylist = [ - ('name', self._subnet.name), - ('subnet_range', self._subnet.cidr), - ('network', self._subnet.network_id), - ('ip_version', self._subnet.ip_version), - ('gateway', 'auto'), - ] - self._tag_create_required_attrs = { - 'cidr': self._subnet.cidr, - 'ip_version': self._subnet.ip_version, - 'name': self._subnet.name, - 'network_id': self._subnet.network_id, - } - def test_create_no_options(self): arglist = [] verifylist = [] @@ -478,6 +455,51 @@ class TestCreateSubnet(TestSubnet, _test_tag.TestCreateTagMixin): 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): @@ -558,7 +580,7 @@ class TestDeleteSubnet(TestSubnet): ) -class TestListSubnet(TestSubnet, _test_tag.TestListTagMixin): +class TestListSubnet(TestSubnet): # The subnets going to be listed up. _subnet = network_fakes.FakeSubnet.create_subnets(count=3) @@ -615,9 +637,6 @@ class TestListSubnet(TestSubnet, _test_tag.TestListTagMixin): self.network.subnets = mock.Mock(return_value=self._subnet) - # TestUnsetTagMixin - self._tag_list_resource_mock = self.network.subnets - def test_subnet_list_no_options(self): arglist = [] verifylist = [ @@ -837,8 +856,33 @@ class TestListSubnet(TestSubnet, _test_tag.TestListTagMixin): 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) -class TestSetSubnet(TestSubnet, _test_tag.TestSetTagMixin): + 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( {'tags': ['green', 'red']}) @@ -849,10 +893,6 @@ class TestSetSubnet(TestSubnet, _test_tag.TestSetTagMixin): 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) - # TestSetTagMixin - self._tag_resource_name = 'subnet' - self._tag_test_resource = self._subnet - self._tag_update_resource_mock = self.network.update_subnet def test_set_this(self): arglist = [ @@ -1001,6 +1041,34 @@ class TestSetSubnet(TestSubnet, _test_tag.TestSetTagMixin): _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 @@ -1083,7 +1151,7 @@ class TestShowSubnet(TestSubnet): self.assertEqual(self.data, data) -class TestUnsetSubnet(TestSubnet, _test_tag.TestUnsetTagMixin): +class TestUnsetSubnet(TestSubnet): def setUp(self): super(TestUnsetSubnet, self).setUp() @@ -1106,10 +1174,6 @@ class TestUnsetSubnet(TestSubnet, _test_tag.TestUnsetTagMixin): self.network.set_tags = mock.Mock(return_value=None) # Get the command object to test self.cmd = subnet_v2.UnsetSubnet(self.app, self.namespace) - # TestUnsetTagMixin - self._tag_resource_name = 'subnet' - self._tag_test_resource = self._testsubnet - self._tag_update_resource_mock = self.network.update_subnet def test_unset_subnet_params(self): arglist = [ @@ -1219,3 +1283,31 @@ class TestUnsetSubnet(TestSubnet, _test_tag.TestUnsetTagMixin): 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 af49385608..139fddf887 100644 --- a/openstackclient/tests/unit/network/v2/test_subnet_pool.py +++ b/openstackclient/tests/unit/network/v2/test_subnet_pool.py @@ -20,7 +20,6 @@ from osc_lib import utils from openstackclient.network.v2 import subnet_pool from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes_v3 -from openstackclient.tests.unit.network.v2 import _test_tag from openstackclient.tests.unit.network.v2 import fakes as network_fakes from openstackclient.tests.unit import utils as tests_utils @@ -38,7 +37,7 @@ class TestSubnetPool(network_fakes.TestNetworkV2): self.domains_mock = self.app.client_manager.identity.domains -class TestCreateSubnetPool(TestSubnetPool, _test_tag.TestCreateTagMixin): +class TestCreateSubnetPool(TestSubnetPool): project = identity_fakes_v3.FakeProject.create_one_project() domain = identity_fakes_v3.FakeDomain.create_one_domain() @@ -96,22 +95,6 @@ class TestCreateSubnetPool(TestSubnetPool, _test_tag.TestCreateTagMixin): self.projects_mock.get.return_value = self.project self.domains_mock.get.return_value = self.domain - # TestUnsetTagMixin - self._tag_test_resource = self._subnet_pool - self._tag_create_resource_mock = self.network.create_subnet_pool - self._tag_create_required_arglist = [ - '--pool-prefix', '10.0.10.0/24', - self._subnet_pool.name, - ] - self._tag_create_required_verifylist = [ - ('prefixes', ['10.0.10.0/24']), - ('name', self._subnet_pool.name), - ] - self._tag_create_required_attrs = { - 'prefixes': ['10.0.10.0/24'], - 'name': self._subnet_pool.name, - } - def test_create_no_options(self): arglist = [] verifylist = [] @@ -313,6 +296,46 @@ class TestCreateSubnetPool(TestSubnetPool, _test_tag.TestCreateTagMixin): 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): @@ -396,7 +419,7 @@ class TestDeleteSubnetPool(TestSubnetPool): ) -class TestListSubnetPool(TestSubnetPool, _test_tag.TestListTagMixin): +class TestListSubnetPool(TestSubnetPool): # The subnet pools going to be listed up. _subnet_pools = network_fakes.FakeSubnetPool.create_subnet_pools(count=3) @@ -442,9 +465,6 @@ class TestListSubnetPool(TestSubnetPool, _test_tag.TestListTagMixin): self.network.subnet_pools = mock.Mock(return_value=self._subnet_pools) - # TestUnsetTagMixin - self._tag_list_resource_mock = self.network.subnet_pools - def test_subnet_pool_list_no_option(self): arglist = [] verifylist = [ @@ -611,8 +631,33 @@ class TestListSubnetPool(TestSubnetPool, _test_tag.TestListTagMixin): 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) -class TestSetSubnetPool(TestSubnetPool, _test_tag.TestSetTagMixin): + 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( @@ -637,11 +682,6 @@ class TestSetSubnetPool(TestSubnetPool, _test_tag.TestSetTagMixin): # Get the command object to test self.cmd = subnet_pool.SetSubnetPool(self.app, self.namespace) - # TestUnsetTagMixin - self._tag_resource_name = 'subnet_pool' - self._tag_test_resource = self._subnet_pool - self._tag_update_resource_mock = self.network.update_subnet_pool - def test_set_this(self): arglist = [ '--name', 'noob', @@ -867,6 +907,34 @@ class TestSetSubnetPool(TestSubnetPool, _test_tag.TestSetTagMixin): ) 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): @@ -943,7 +1011,7 @@ class TestShowSubnetPool(TestSubnetPool): self.assertEqual(self.data, data) -class TestUnsetSubnetPool(TestSubnetPool, _test_tag.TestUnsetTagMixin): +class TestUnsetSubnetPool(TestSubnetPool): def setUp(self): super(TestUnsetSubnetPool, self).setUp() @@ -958,11 +1026,6 @@ class TestUnsetSubnetPool(TestSubnetPool, _test_tag.TestUnsetTagMixin): # Get the command object to test self.cmd = subnet_pool.UnsetSubnetPool(self.app, self.namespace) - # TestUnsetTagMixin - self._tag_resource_name = 'subnet_pool' - self._tag_test_resource = self._subnetpool - self._tag_update_resource_mock = self.network.update_subnet_pool - def test_unset_subnet_pool(self): arglist = [ '--pool-prefix', '10.0.10.0/24', @@ -993,3 +1056,31 @@ class TestUnsetSubnetPool(TestSubnetPool, _test_tag.TestUnsetTagMixin): 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)