Add test for reconfiguration of ml2 vlan range

Change-Id: I5cdb9154b77aaaabec4250b535b41e41a429c610
Implements: blueprint test-openstack-config-change
This commit is contained in:
Sergey Novikov 2015-12-08 15:37:49 +03:00
parent 7d88795bd4
commit 64bc3f5f3b
5 changed files with 152 additions and 3 deletions

View File

@ -172,6 +172,11 @@ Test Ironic
.. automodule:: fuelweb_test.tests.test_ironic_base
:members:
Test Services reconfiguration
-----------------------------
.. automodule:: fuelweb_test.tests.test_services_reconfiguration
:members:
Gating tests
============

View File

@ -0,0 +1,10 @@
---
neutron_plugin_ml2:
ml2_type_vlan/network_vlan_ranges:
value: "physnet2:1000:1001,physnet1"
neutron_config:
quotas/default_quota:
ensure: "absent"
DEFAULT/debug:
value: "True"

View File

@ -505,7 +505,8 @@ class OpenStackActions(common.Common):
.format(self.get_srv_instance_name(srv)))['stdout'])
return res.split('\'')[1]
def create_network(self, tenant_id, network_name):
body = {'network': {'tenant_id': tenant_id,
'name': network_name}}
def create_network(self, network_name, **kwargs):
body = {'network': {'name': network_name}}
if kwargs:
body['network'].update(kwargs)
return self.neutron.create_network(body)

View File

@ -140,6 +140,7 @@ def import_tests():
from system_test.tests.plugins.plugin_example import test_plugin_example_v3 # noqa
from gates_tests.tests import test_review_in_fuel_agent # noqa
from tests.tests_strength import test_load # noqa
from tests import test_services_reconfiguration # noqa
def run_tests():

View File

@ -0,0 +1,132 @@
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from proboscis import asserts
from proboscis import test
from fuelweb_test.helpers.decorators import log_snapshot_after_test
from fuelweb_test.helpers import os_actions
from fuelweb_test.helpers import utils
from fuelweb_test.tests.base_test_case import TestBasic
from fuelweb_test.tests.test_neutron import NeutronVlanHa
def get_structured_config_dict(config):
structured_conf = {}
def helper(key1, key2):
structured_conf[key2] = []
for param, value in config[key1].items():
d = {}
param = param.split('/')
d['section'] = param[0]
d['option'] = param[1]
k, v = value.items()[0]
if k == 'ensure' and v == 'absent':
d['value'] = None
if k == 'value':
d['value'] = v
structured_conf[key2].append(d)
for key in config.keys():
if key == 'neutron_config':
helper(key, '/etc/neutron/neutron.conf')
if key == 'neutron_plugin_ml2':
helper(key, '/etc/neutron/plugins/ml2/ml2_conf.ini')
return structured_conf
@test(groups=["services_reconfiguration"])
class ServicesReconfiguration(TestBasic):
"""ServicesReconfiguration."""
@test(depends_on=[NeutronVlanHa.deploy_neutron_vlan_ha],
groups=["services_reconfiguration", "reconfigure_ml2_vlan_range"])
@log_snapshot_after_test
def reconfigure_ml2_vlan_range(self):
"""Reconfigure neutron ml2 VLAN range
Scenario:
1. Revert snapshot "deploy_neutron_vlan_ha"
2. Upload a new openstack configuration
3. Get uptime of process "neutron-server" on each controller
4. Apply a new VLAN range(minimal range) to all nodes
5. Wait for configuration applying
6. Verify ml2 plugin settings
7. Create new private network
8. Try to create one more, verify that it is impossible
Snapshot reconfigure_ml2_vlan_range
"""
self.show_step(1)
self.env.revert_snapshot("deploy_neutron_vlan_ha")
cluster_id = self.fuel_web.get_last_created_cluster()
controllers = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
cluster_id, ['controller'])
controllers = [x['ip'] for x in controllers]
self.show_step(2)
config = utils.get_config_template('neutron')
structured_config = get_structured_config_dict(config)
self.fuel_web.client.upload_configuration(config, cluster_id)
self.show_step(3)
uptimes = dict(zip(controllers, range(len(controllers))))
for controller in controllers:
with self.env.d_env.get_ssh_to_remote(controller) as remote:
uptimes[controller] = \
utils.get_process_uptime(remote, 'neutron-server')
self.show_step(4)
task = self.fuel_web.client.apply_configuration(cluster_id)
self.show_step(5)
self.fuel_web.assert_task_success(task, timeout=300, interval=5)
self.show_step(6)
for controller in controllers:
with self.env.d_env.get_ssh_to_remote(controller) as remote:
uptime = utils.get_process_uptime(remote, 'neutron-server')
asserts.assert_true(uptime <= uptimes[controller],
'Service "neutron-servers" was not '
'restarted on {0}'.format(controller))
for configpath, params in structured_config.items():
result = remote.open(configpath)
conf_for_check = utils.get_ini_config(result)
for param in params:
utils.check_config(conf_for_check,
configpath,
param['section'],
param['option'],
param['value'])
self.show_step(7)
os_conn = os_actions.OpenStackActions(
self.fuel_web.get_public_vip(cluster_id))
tenant = os_conn.get_tenant('admin')
os_conn.create_network('net1', tenant_id=tenant.id)
self.show_step(8)
try:
os_conn.create_network('net2', tenant_id=tenant.id)
except Exception as e:
if 'No tenant network is available' not in e.message:
raise e
pass
else:
raise Exception("New configuration was not applied")
self.env.make_snapshot("reconfigure_ml2_vlan_range", is_make=True)