4669bcc628
Now that we no longer support py27, we can use the standard library unittest.mock module instead of the third party mock lib. Change-Id: I12e1a2a4a22116cabd09a3b808f871d98e4bd1f2 Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
688 lines
30 KiB
Python
688 lines
30 KiB
Python
# Copyright 2012 OpenStack Foundation.
|
|
# All Rights Reserved
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
|
|
import sys
|
|
from unittest import mock
|
|
|
|
|
|
from neutronclient.common import exceptions
|
|
from neutronclient.neutron import v2_0 as neutronV20
|
|
from neutronclient.neutron.v2_0 import subnet
|
|
from neutronclient.tests.unit import test_cli20
|
|
|
|
|
|
class CLITestV20SubnetJSON(test_cli20.CLITestV20Base):
|
|
|
|
non_admin_status_resources = ['subnet']
|
|
|
|
def setUp(self):
|
|
super(CLITestV20SubnetJSON, self).setUp(plurals={'tags': 'tag'})
|
|
|
|
def test_create_subnet(self):
|
|
# Create subnet: --gateway gateway netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = '10.10.10.0/24'
|
|
gateway = 'gatewayvalue'
|
|
args = ['--gateway', gateway, netid, cidr, '--description', 'cave']
|
|
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
|
position_values = [4, netid, cidr, gateway]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
description='cave')
|
|
|
|
def test_create_subnet_network_cidr_seperated(self):
|
|
# For positional value, network_id and cidr can be separated.
|
|
# Create subnet: --gateway gateway netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = '10.10.10.0/24'
|
|
gateway = 'gatewayvalue'
|
|
args = [netid, '--gateway', gateway, cidr]
|
|
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
|
position_values = [4, netid, cidr, gateway]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values)
|
|
|
|
def test_create_subnet_with_no_gateway(self):
|
|
# Create subnet: --no-gateway netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'cidrvalue'
|
|
args = ['--no-gateway', netid, cidr]
|
|
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
|
position_values = [4, netid, cidr, None]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values)
|
|
|
|
def test_create_subnet_with_segment(self):
|
|
# Create subnet: --segment segment netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = '10.10.10.0/24'
|
|
segment = 'segment'
|
|
args = ['--segment', segment, netid, cidr,
|
|
'--description', 'cave']
|
|
position_names = ['ip_version', 'network_id', 'cidr', 'segment_id']
|
|
position_values = [4, netid, cidr, segment]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
description='cave')
|
|
|
|
def test_create_subnet_with_bad_gateway_option(self):
|
|
# Create sbunet: --no-gateway netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'cidrvalue'
|
|
gateway = 'gatewayvalue'
|
|
args = ['--gateway', gateway, '--no-gateway', netid, cidr]
|
|
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
|
position_values = [4, netid, cidr, None]
|
|
self.assertRaises(
|
|
SystemExit, self._test_create_resource,
|
|
resource, cmd, name, myid, args, position_names, position_values)
|
|
|
|
def _test_create_resource_and_catch_command_error(self, should_fail,
|
|
*args):
|
|
if should_fail:
|
|
params = {'no_api_call': True,
|
|
'expected_exception': exceptions.CommandError}
|
|
else:
|
|
params = {}
|
|
self._test_create_resource(*args, **params)
|
|
|
|
def test_create_subnet_with_enable_and_disable_dhcp(self):
|
|
# Create subnet: --enable-dhcp and --disable-dhcp.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'cidrvalue'
|
|
position_names = ['ip_version', 'network_id', 'cidr', 'enable_dhcp']
|
|
# enable_dhcp value is appended later inside the loop
|
|
position_values = [4, netid, cidr]
|
|
for enable_dhcp_arg, should_fail in (
|
|
('--enable-dhcp=False', False),
|
|
('--enable-dhcp=True', True),
|
|
('--enable-dhcp', True)
|
|
):
|
|
tested_args = [enable_dhcp_arg, '--disable-dhcp']
|
|
args = tested_args + [netid, cidr]
|
|
pos_values = position_values + [should_fail]
|
|
self._test_create_resource_and_catch_command_error(
|
|
should_fail,
|
|
resource, cmd, name, myid, args, position_names, pos_values)
|
|
|
|
def test_create_subnet_with_multiple_enable_dhcp(self):
|
|
# Create subnet with multiple --enable-dhcp arguments passed.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'cidrvalue'
|
|
position_names = ['ip_version', 'network_id', 'cidr', 'enable_dhcp']
|
|
# enable_dhcp value is appended later inside the loop
|
|
position_values = [4, netid, cidr]
|
|
|
|
_ = 'UNUSED_MARKER'
|
|
for tested_args, should_fail, pos_value in (
|
|
(['--enable-dhcp', '--enable-dhcp=True'], False, True),
|
|
(['--enable-dhcp', '--enable-dhcp=False'], True, _),
|
|
(['--enable-dhcp=False', '--enable-dhcp'], True, _),
|
|
(['--enable-dhcp=True', '--enable-dhcp=False'], True, _),
|
|
(['--enable-dhcp=False', '--enable-dhcp=True'], True, _)
|
|
):
|
|
args = tested_args + [netid, cidr]
|
|
pos_values = position_values + [pos_value]
|
|
self._test_create_resource_and_catch_command_error(
|
|
should_fail,
|
|
resource, cmd, name, myid, args, position_names, pos_values)
|
|
|
|
def test_create_subnet_tenant(self):
|
|
# Create subnet: --tenant_id tenantid netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid', netid, cidr]
|
|
position_names = ['ip_version', 'network_id', 'cidr']
|
|
position_values = [4, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_tags(self):
|
|
# Create subnet: netid cidr --tags a b.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = [netid, cidr, '--tags', 'a', 'b']
|
|
position_names = ['ip_version', 'network_id', 'cidr']
|
|
position_values = [4, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tags=['a', 'b'])
|
|
|
|
def test_create_subnet_allocation_pool(self):
|
|
# Create subnet: --tenant_id tenantid <pool> netid cidr.
|
|
# The <pool> is --allocation_pool start=1.1.1.10,end=1.1.1.20
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--allocation_pool', 'start=1.1.1.10,end=1.1.1.20',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
|
'cidr']
|
|
pool = [{'start': '1.1.1.10', 'end': '1.1.1.20'}]
|
|
position_values = [4, pool, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_allocation_pools(self):
|
|
# Create subnet: --tenant-id tenantid <pools> netid cidr.
|
|
# The <pools> are --allocation_pool start=1.1.1.10,end=1.1.1.20 and
|
|
# --allocation_pool start=1.1.1.30,end=1.1.1.40
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--allocation_pool', 'start=1.1.1.10,end=1.1.1.20',
|
|
'--allocation_pool', 'start=1.1.1.30,end=1.1.1.40',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
|
'cidr']
|
|
pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
|
|
{'start': '1.1.1.30', 'end': '1.1.1.40'}]
|
|
position_values = [4, pools, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_host_route(self):
|
|
# Create subnet: --tenant_id tenantid <host_route> netid cidr.
|
|
# The <host_route> is
|
|
# --host-route destination=172.16.1.0/24,nexthop=1.1.1.20
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--host-route', 'destination=172.16.1.0/24,nexthop=1.1.1.20',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'host_routes', 'network_id',
|
|
'cidr']
|
|
route = [{'destination': '172.16.1.0/24', 'nexthop': '1.1.1.20'}]
|
|
position_values = [4, route, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_host_routes(self):
|
|
# Create subnet: --tenant-id tenantid <host_routes> netid cidr.
|
|
# The <host_routes> are
|
|
# --host-route destination=172.16.1.0/24,nexthop=1.1.1.20 and
|
|
# --host-route destination=172.17.7.0/24,nexthop=1.1.1.40
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--host-route', 'destination=172.16.1.0/24,nexthop=1.1.1.20',
|
|
'--host-route', 'destination=172.17.7.0/24,nexthop=1.1.1.40',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'host_routes', 'network_id',
|
|
'cidr']
|
|
routes = [{'destination': '172.16.1.0/24', 'nexthop': '1.1.1.20'},
|
|
{'destination': '172.17.7.0/24', 'nexthop': '1.1.1.40'}]
|
|
position_values = [4, routes, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_dns_nameservers(self):
|
|
# Create subnet: --tenant-id tenantid <dns-nameservers> netid cidr.
|
|
# The <dns-nameservers> are
|
|
# --dns-nameserver 1.1.1.20 and --dns-nameserver 1.1.1.40
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--dns-nameserver', '1.1.1.20',
|
|
'--dns-nameserver', '1.1.1.40',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'dns_nameservers', 'network_id',
|
|
'cidr']
|
|
nameservers = ['1.1.1.20', '1.1.1.40']
|
|
position_values = [4, nameservers, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_with_use_default_subnetpool(self):
|
|
# Create subnet: --tenant-id tenantid --use-default-subnetpool \
|
|
# netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--use-default-subnetpool',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'use_default_subnetpool', 'network_id',
|
|
'cidr']
|
|
position_values = [4, True, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_with_disable_dhcp(self):
|
|
# Create subnet: --tenant-id tenantid --disable-dhcp netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--disable-dhcp',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'enable_dhcp', 'network_id',
|
|
'cidr']
|
|
position_values = [4, False, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_merge_single_plurar(self):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--allocation-pool', 'start=1.1.1.10,end=1.1.1.20',
|
|
netid, cidr,
|
|
'--allocation-pools', 'list=true', 'type=dict',
|
|
'start=1.1.1.30,end=1.1.1.40']
|
|
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
|
'cidr']
|
|
pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
|
|
{'start': '1.1.1.30', 'end': '1.1.1.40'}]
|
|
position_values = [4, pools, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_merge_plurar(self):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
netid, cidr,
|
|
'--allocation-pools', 'list=true', 'type=dict',
|
|
'start=1.1.1.30,end=1.1.1.40']
|
|
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
|
'cidr']
|
|
pools = [{'start': '1.1.1.30', 'end': '1.1.1.40'}]
|
|
position_values = [4, pools, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_merge_single_single(self):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--allocation-pool', 'start=1.1.1.10,end=1.1.1.20',
|
|
netid, cidr,
|
|
'--allocation-pool',
|
|
'start=1.1.1.30,end=1.1.1.40']
|
|
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
|
'cidr']
|
|
pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
|
|
{'start': '1.1.1.30', 'end': '1.1.1.40'}]
|
|
position_values = [4, pools, netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_max_v4_cidr(self):
|
|
# Create subnet: --gateway gateway netid cidr.
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = '192.168.0.1/32'
|
|
gateway = 'gatewayvalue'
|
|
args = ['--gateway', gateway, netid, cidr]
|
|
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
|
position_values = [4, netid, cidr, gateway]
|
|
with mock.patch.object(cmd.log, 'warning') as mock_warning:
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values)
|
|
mock_warning.assert_called_once_with(mock.ANY,
|
|
{'ip': 4, 'cidr': '/32'})
|
|
|
|
def test_create_subnet_with_ipv6_ra_mode(self):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--ip-version', '6',
|
|
'--ipv6-ra-mode', 'dhcpv6-stateful',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'ipv6_ra_mode',
|
|
'network_id', 'cidr']
|
|
position_values = [6, 'dhcpv6-stateful', netid, cidr]
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_with_ipv6_address_mode(self):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--ip-version', '6',
|
|
'--ipv6-address-mode', 'dhcpv6-stateful',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'ipv6_address_mode',
|
|
'network_id', 'cidr']
|
|
position_values = [6, 'dhcpv6-stateful', netid, cidr]
|
|
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_with_ipv6_modes(self):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--ip-version', '6',
|
|
'--ipv6-address-mode', 'slaac',
|
|
'--ipv6-ra-mode', 'slaac',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'ipv6_address_mode',
|
|
'ipv6_ra_mode', 'network_id', 'cidr']
|
|
position_values = [6, 'slaac', 'slaac', netid, cidr]
|
|
|
|
self._test_create_resource(resource, cmd, name, myid, args,
|
|
position_names, position_values,
|
|
tenant_id='tenantid')
|
|
|
|
def test_create_subnet_with_ipv6_ra_mode_ipv4(self):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--ip-version', '4',
|
|
'--ipv6-ra-mode', 'slaac',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'ipv6_ra_mode',
|
|
'network_id', 'cidr']
|
|
position_values = [4, None, netid, cidr]
|
|
self._test_create_resource(
|
|
resource, cmd, name, myid, args, position_names,
|
|
position_values, tenant_id='tenantid',
|
|
no_api_call=True, expected_exception=exceptions.CommandError)
|
|
|
|
def test_create_subnet_with_ipv6_address_mode_ipv4(self):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'prefixvalue'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--ip-version', '4',
|
|
'--ipv6-address-mode', 'slaac',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'ipv6_address_mode',
|
|
'network_id', 'cidr']
|
|
position_values = [4, None, netid, cidr]
|
|
self._test_create_resource(
|
|
resource, cmd, name, myid, args, position_names,
|
|
position_values, tenant_id='tenantid',
|
|
no_api_call=True, expected_exception=exceptions.CommandError)
|
|
|
|
@mock.patch.object(neutronV20, 'find_resource_by_name_or_id')
|
|
def test_create_subnet_with_subnetpool_ipv6_and_ip_ver_ignored(
|
|
self, mock_find_resource):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--ip-version', '4',
|
|
'--subnetpool', 'subnetpool_id',
|
|
netid]
|
|
position_names = ['ip_version', 'network_id', 'subnetpool_id']
|
|
position_values = [6, netid, 'subnetpool_id']
|
|
mock_find_resource.return_value = {
|
|
'id': 'subnetpool_id', 'ip_version': 6}
|
|
self._test_create_resource(
|
|
resource, cmd, name, myid, args, position_names,
|
|
position_values, tenant_id='tenantid')
|
|
mock_find_resource.assert_called_once_with(
|
|
self.client, 'subnetpool', 'subnetpool_id')
|
|
|
|
@mock.patch.object(neutronV20, 'find_resource_by_name_or_id')
|
|
def test_create_subnet_with_subnetpool_ipv4_with_cidr_wildcard(
|
|
self, mock_find_resource):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
cidr = 'cidrwildcard'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--ip-version', '4',
|
|
'--ipv6-address-mode', 'slaac',
|
|
'--subnetpool', 'subnetpool_id',
|
|
netid, cidr]
|
|
position_names = ['ip_version', 'ipv6_address_mode',
|
|
'network_id', 'subnetpool_id', 'cidr']
|
|
position_values = [4, None, netid, 'subnetpool_id', cidr]
|
|
mock_find_resource.return_value = {'id': 'subnetpool_id',
|
|
'ip_version': 4}
|
|
self._test_create_resource(
|
|
resource, cmd, name, myid, args, position_names,
|
|
position_values, tenant_id='tenantid',
|
|
no_api_call=True, expected_exception=exceptions.CommandError)
|
|
mock_find_resource.assert_called_once_with(
|
|
self.client, 'subnetpool', 'subnetpool_id')
|
|
|
|
@mock.patch.object(neutronV20, 'find_resource_by_name_or_id')
|
|
def test_create_subnet_with_subnetpool_ipv4_with_prefixlen(
|
|
self, mock_find_resource):
|
|
resource = 'subnet'
|
|
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
name = 'myname'
|
|
myid = 'myid'
|
|
netid = 'netid'
|
|
args = ['--tenant_id', 'tenantid',
|
|
'--ip-version', '4',
|
|
'--ipv6-address-mode', 'slaac',
|
|
'--subnetpool', 'subnetpool_id',
|
|
'--prefixlen', '31',
|
|
netid]
|
|
position_names = ['ip_version', 'ipv6_address_mode',
|
|
'network_id', 'subnetpool_id']
|
|
position_values = [4, None, netid, 'subnetpool_id']
|
|
mock_find_resource.return_value = {'id': 'subnetpool_id',
|
|
'ip_version': 4}
|
|
self._test_create_resource(
|
|
resource, cmd, name, myid, args, position_names,
|
|
position_values, tenant_id='tenantid',
|
|
no_api_call=True, expected_exception=exceptions.CommandError)
|
|
mock_find_resource.assert_called_once_with(
|
|
self.client, 'subnetpool', 'subnetpool_id')
|
|
|
|
def test_list_subnets_detail(self):
|
|
# List subnets: -D.
|
|
resources = "subnets"
|
|
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_list_resources(resources, cmd, True)
|
|
|
|
def test_list_subnets_tags(self):
|
|
# List subnets: -- --tags a b.
|
|
resources = "subnets"
|
|
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_list_resources(resources, cmd, tags=['a', 'b'])
|
|
|
|
def test_list_subnets_detail_tags(self):
|
|
# List subnets: -D -- --tags a b.
|
|
resources = "subnets"
|
|
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_list_resources(resources, cmd, detail=True, tags=['a', 'b'])
|
|
|
|
def test_list_subnets_fields(self):
|
|
# List subnets: --fields a --fields b -- --fields c d.
|
|
resources = "subnets"
|
|
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_list_resources(resources, cmd,
|
|
fields_1=['a', 'b'], fields_2=['c', 'd'])
|
|
|
|
def test_list_subnets_pagination(self):
|
|
resources = "subnets"
|
|
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_list_resources_with_pagination(resources, cmd)
|
|
|
|
def test_list_subnets_sort(self):
|
|
# List subnets: --sort-key name --sort-key id --sort-key asc
|
|
# --sort-key desc
|
|
resources = "subnets"
|
|
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_list_resources(resources, cmd,
|
|
sort_key=["name", "id"],
|
|
sort_dir=["asc", "desc"])
|
|
|
|
def test_list_subnets_limit(self):
|
|
# List subnets: -P.
|
|
resources = "subnets"
|
|
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_list_resources(resources, cmd, page_size=1000)
|
|
|
|
def test_update_subnet(self):
|
|
# Update subnet: myid --name myname --tags a b.
|
|
resource = 'subnet'
|
|
cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_update_resource(resource, cmd, 'myid',
|
|
['myid', '--name', 'myname',
|
|
'--description', 'cavern',
|
|
'--tags', 'a', 'b'],
|
|
{'name': 'myname', 'tags': ['a', 'b'],
|
|
'description': 'cavern'})
|
|
|
|
def test_update_subnet_allocation_pools(self):
|
|
# Update subnet: myid --name myname --tags a b.
|
|
resource = 'subnet'
|
|
cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self._test_update_resource(resource, cmd, 'myid',
|
|
['myid', '--allocation-pool',
|
|
'start=1.2.0.2,end=1.2.0.127'],
|
|
{'allocation_pools': [{'start': '1.2.0.2',
|
|
'end': '1.2.0.127'}]}
|
|
)
|
|
|
|
def test_update_subnet_enable_disable_dhcp(self):
|
|
# Update sbunet: --enable-dhcp and --disable-dhcp.
|
|
resource = 'subnet'
|
|
cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
self.assertRaises(exceptions.CommandError,
|
|
self._test_update_resource,
|
|
resource, cmd, 'myid',
|
|
['myid', '--name', 'myname', '--enable-dhcp',
|
|
'--disable-dhcp'], {'name': 'myname', })
|
|
|
|
def test_show_subnet(self):
|
|
# Show subnet: --fields id --fields name myid.
|
|
resource = 'subnet'
|
|
cmd = subnet.ShowSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
|
self._test_show_resource(resource, cmd, self.test_id,
|
|
args, ['id', 'name'])
|
|
|
|
def test_delete_subnet(self):
|
|
# Delete subnet: subnetid.
|
|
resource = 'subnet'
|
|
cmd = subnet.DeleteSubnet(test_cli20.MyApp(sys.stdout), None)
|
|
myid = 'myid'
|
|
args = [myid]
|
|
self._test_delete_resource(resource, cmd, myid, args)
|