summaryrefslogtreecommitdiff
path: root/openstackclient/tests/unit/network
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/tests/unit/network')
-rw-r--r--openstackclient/tests/unit/network/v2/fakes.py5
-rw-r--r--openstackclient/tests/unit/network/v2/test_network.py169
-rw-r--r--openstackclient/tests/unit/network/v2/test_port.py201
-rw-r--r--openstackclient/tests/unit/network/v2/test_router.py146
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet.py164
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet_pool.py153
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)