Allow network configuration for mtu tests
In NFV baremetal deployments, networks settings may be constrained.
This patch allows to configure on create:
subnet cidr, for provider networks not managed by neutron
network type, VLAN/VXLAN/GRE/FLAT
mtu, network mtu for OVS+DPDK bridge/bond mtu settings.
It accommodate network environment in class NetworkWritableMtuTest.
It also allows to test ovs [through ovs+dpdk] jumbo and mtu.
Change-Id: Ia519d3bb7eb32b1f986983c9b74ee3621881172f
diff --git a/neutron_tempest_plugin/config.py b/neutron_tempest_plugin/config.py
index 65282cf..fc07e81 100644
--- a/neutron_tempest_plugin/config.py
+++ b/neutron_tempest_plugin/config.py
@@ -11,7 +11,6 @@
# under the License.
from oslo_config import cfg
-
from tempest import config
@@ -47,6 +46,17 @@
help='The agent mode for L3 agents in the deployment. '
'Configure this only when the single value is used by '
'all agents in the deployment.'),
+ cfg.StrOpt('test_mtu_networks',
+ default='[{"provider:network_type":"vxlan",'
+ '"mtu":1200, "cidr":"10.100.0.0/16"}'
+ ','
+ '{"provider:network_type":"vxlan",'
+ '"mtu":1300, "cidr":"10.200.0.0/16"}]',
+ help='Configuration for test networks. The format is JSON. '
+ '"provider:network_type":<TYPE> - string '
+ '"mtu":<MTU> - integer '
+ '"cidr"<SUBNET/MASK> - string '
+ '"provider:segmentation_id":<VLAN_ID> - integer')
]
# TODO(amuller): Redo configuration options registration as part of the planned
diff --git a/neutron_tempest_plugin/scenario/test_mtu.py b/neutron_tempest_plugin/scenario/test_mtu.py
index b38d770..0e3afe9 100644
--- a/neutron_tempest_plugin/scenario/test_mtu.py
+++ b/neutron_tempest_plugin/scenario/test_mtu.py
@@ -14,6 +14,7 @@
# under the License.
from neutron_lib.api.definitions import provider_net
+from oslo_serialization import jsonutils
from tempest.common import utils
from tempest.common import waiters
from tempest.lib.common.utils import data_utils
@@ -59,6 +60,9 @@
fip = self.create_and_associate_floatingip(port['id'])
return server, fip
+ def _get_network_params(self):
+ return jsonutils.loads(CONF.neutron_plugin_options.test_mtu_networks)
+
class NetworkMtuTest(NetworkMtuBaseTest):
credentials = ['primary', 'admin']
@@ -97,13 +101,13 @@
self.assertNotEqual(self.networks[0]['mtu'], self.networks[1]['mtu'])
self.networks.sort(key=lambda net: net['mtu'])
server1, fip1 = self.create_pingable_vm(self.networks[0],
- self.keypair, self.secgroup)
+ self.keypair, self.secgroup)
server_ssh_client1 = ssh.Client(
self.floating_ips[0]['floating_ip_address'],
CONF.validation.image_ssh_user,
pkey=self.keypair['private_key'])
server2, fip2 = self.create_pingable_vm(self.networks[1],
- self.keypair, self.secgroup)
+ self.keypair, self.secgroup)
server_ssh_client2 = ssh.Client(
self.floating_ips[0]['floating_ip_address'],
CONF.validation.image_ssh_user,
@@ -150,7 +154,7 @@
def skip_checks(cls):
super(NetworkWritableMtuTest, cls).skip_checks()
if ("vxlan" not in
- config.CONF.neutron_plugin_options.available_type_drivers):
+ config.CONF.neutron_plugin_options.available_type_drivers):
raise cls.skipException("VXLAN type_driver is not enabled")
@classmethod
@@ -160,24 +164,24 @@
def _create_setup(self):
self.admin_client = self.os_admin.network_client
- net_kwargs = {'tenant_id': self.client.tenant_id,
- 'provider:network_type': 'vxlan'}
- for _ in range(2):
- net_kwargs['name'] = data_utils.rand_name('net')
- network = self.admin_client.create_network(**net_kwargs)[
+ for test_net in self._get_network_params():
+ test_net['tenant_id'] = self.client.tenant_id
+ test_net['name'] = data_utils.rand_name('net')
+ cidr = None if 'cidr' not in test_net else test_net.pop('cidr')
+ network = self.admin_client.create_network(**test_net)[
'network']
self.networks.append(network)
self.addCleanup(self.admin_client.delete_network, network['id'])
- subnet = self.create_subnet(network)
+ subnet = self.create_subnet(network, cidr=cidr)
self.create_router_interface(self.router['id'], subnet['id'])
self.addCleanup(self.client.remove_router_interface_with_subnet_id,
self.router['id'], subnet['id'])
- # Update network mtu.
+ # update network mtu
net_mtu = self.admin_client.show_network(
self.networks[0]['id'])['network']['mtu']
self.admin_client.update_network(self.networks[0]['id'],
- mtu=(net_mtu - 1))
+ mtu=(net_mtu - 1))
self.networks[0]['mtu'] = (
self.admin_client.show_network(
self.networks[0]['id'])['network']['mtu'])
@@ -186,13 +190,13 @@
self.assertNotEqual(self.networks[0]['mtu'], self.networks[1]['mtu'])
self.networks.sort(key=lambda net: net['mtu'])
server1, fip1 = self.create_pingable_vm(self.networks[0],
- self.keypair, self.secgroup)
+ self.keypair, self.secgroup)
server_ssh_client1 = ssh.Client(
self.floating_ips[0]['floating_ip_address'],
CONF.validation.image_ssh_user,
pkey=self.keypair['private_key'])
server2, fip2 = self.create_pingable_vm(self.networks[1],
- self.keypair, self.secgroup)
+ self.keypair, self.secgroup)
server_ssh_client2 = ssh.Client(
self.floating_ips[0]['floating_ip_address'],
CONF.validation.image_ssh_user,