Add test for reconfiguration of nova CPU allocation ratio

Change-Id: I294f7b0372c5edd5b6659236f7077c16dc76c08f
Implements: blueprint test-openstack-config-change
This commit is contained in:
Ksenia Demina 2015-12-10 15:54:24 +03:00
parent 44622a8494
commit 4a5fe75465
3 changed files with 127 additions and 3 deletions

View File

@ -0,0 +1,4 @@
---
nova_config:
DEFAULT/cpu_allocation_ratio:
value: "1.0"

View File

@ -149,13 +149,13 @@ class Common(object):
try:
_verify_instance_state()
except AssertionError:
LOGGER.debug('Instance is not active, '
'lets provide it the last chance and sleep 60 sec')
LOGGER.debug('Instance is not {0}, lets provide it the last '
'chance and sleep 60 sec'.format(expected_state))
time.sleep(60)
_verify_instance_state()
def delete_instance(self, server):
LOGGER.debug('Try to create instance')
LOGGER.debug('Try to delete instance')
self.nova.servers.delete(server)
def create_flavor(self, name, ram, vcpus, disk, flavorid="auto"):

View File

@ -18,6 +18,8 @@ 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 import settings
from fuelweb_test.tests.base_test_case import SetupEnvironment
from fuelweb_test.tests.base_test_case import TestBasic
from fuelweb_test.tests.test_neutron import NeutronVlanHa
@ -44,6 +46,8 @@ def get_structured_config_dict(config):
helper(key, '/etc/neutron/neutron.conf')
if key == 'neutron_plugin_ml2':
helper(key, '/etc/neutron/plugins/ml2/ml2_conf.ini')
if key == 'nova_config':
helper(key, '/etc/nova/nova.conf')
return structured_conf
@ -130,3 +134,119 @@ class ServicesReconfiguration(TestBasic):
raise Exception("New configuration was not applied")
self.env.make_snapshot("reconfigure_ml2_vlan_range", is_make=True)
@test(depends_on=[SetupEnvironment.prepare_slaves_5],
groups=["services_reconfiguration", "reconfigure_overcommit_ratio"])
@log_snapshot_after_test
def reconfigure_overcommit_ratio(self):
"""Tests for reconfiguration nova CPU overcommit ratio.
Scenario:
1. Create cluster
2. Add 1 node with compute role
3. Add 3 nodes with controller role
4. Deploy the cluster
5. Verify network
6. Run OSTF
7. Verify configuration file on each controller
8. Apply new CPU overcommit ratio for each controller
9. Verify deployment task is finished
10. Verify nova-scheduler services uptime
11. Boot instances with flavor that occupy all CPU
12. Boot extra instance and catch the error
Snapshot: reconfigure_overcommit_ratio
"""
self.env.revert_snapshot("ready_with_5_slaves")
self.show_step(1)
cluster_id = self.fuel_web.create_cluster(
name=self.__class__.__name__,
mode=settings.DEPLOYMENT_MODE,
settings={
"net_provider": 'neutron',
"net_segment_type": settings.NEUTRON_SEGMENT_TYPE,
}
)
self.show_step(2)
self.show_step(3)
self.fuel_web.update_nodes(
cluster_id,
{
'slave-01': ['compute'],
'slave-02': ['controller'],
'slave-03': ['controller'],
'slave-04': ['controller']
})
self.show_step(4)
self.fuel_web.deploy_cluster_wait(cluster_id, check_services=False)
self.show_step(5)
self.fuel_web.verify_network(cluster_id)
self.show_step(6)
self.fuel_web.run_ostf(cluster_id=cluster_id)
self.show_step(7)
cluster_id = self.fuel_web.get_last_created_cluster()
config = utils.get_config_template('nova_cpu')
structured_config = get_structured_config_dict(config)
self.fuel_web.client.upload_configuration(config, cluster_id)
service_name = "nova-scheduler"
controllers = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
cluster_id, ['controller'])
controllers = [x['ip'] for x in controllers]
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, service_name)
task = self.fuel_web.client.apply_configuration(cluster_id)
self.show_step(8)
self.fuel_web.assert_task_success(task, timeout=300, interval=5)
self.show_step(9)
self.show_step(10)
for controller in controllers:
with self.env.d_env.get_ssh_to_remote(controller) as remote:
uptime = utils.get_process_uptime(remote, service_name)
asserts.assert_true(uptime <= uptimes[controller],
"Service {0} was not restarted "
"on {1}".format(controller, service_name))
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(11)
os_conn = os_actions.OpenStackActions(
self.fuel_web.get_public_vip(cluster_id))
net_name = self.fuel_web.get_cluster_predefined_networks_name(
cluster_id)['private_net']
server = os_conn.create_instance(neutron_network=True,
label=net_name,
server_name="Test_reconfig",
vcpus=2)
os_conn.verify_instance_status(server, 'ACTIVE')
self.show_step(12)
excessive_server = os_conn.create_instance(neutron_network=True,
label=net_name,
server_name="excessive_VM",
flavor_name="overcommit")
os_conn.verify_instance_status(excessive_server, 'ERROR')
os_conn.delete_instance(excessive_server)
self.env.make_snapshot("reconfigure_overcommit_ratio",
is_make=True)