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