Add functional tests for Redis plugin

Change-Id: I4fa49a2fb8f56c2cf8ffb20c443bf75cab3849f0
This commit is contained in:
Artem 2016-07-22 17:00:39 +03:00 committed by Artem Minasyan
parent 3e7a94ed50
commit f42bcd77f2
3 changed files with 84 additions and 23 deletions

View File

@ -12,7 +12,12 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import time
import ceilometerclient.v2.client
from proboscis import asserts
from six.moves import configparser
from stacklight_tests import base_test
from stacklight_tests.ceilometer_redis import plugin_settings
@ -93,3 +98,32 @@ class CeilometerRedisPluginApi(base_test.PluginApi):
def check_uninstall_failure(self):
return self.helpers.check_plugin_cannot_be_uninstalled(
self.settings.name, self.settings.version)
def disable_coordination(self):
ceilometer_conf = '/etc/ceilometer/ceilometer.conf'
controllers = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
self.helpers.cluster_id, ['controller'])
for controller in controllers:
with self.fuel_web.get_ssh_for_nailgun_node(controller) as remote:
with remote.open(ceilometer_conf) as f:
parser = configparser.RawConfigParser()
parser.readfp(f)
parser.remove_option('coordination', 'backend_url')
with remote.open(ceilometer_conf, 'w') as f:
parser.write(f)
with self.fuel_web.get_ssh_for_nailgun_node(controllers[0]) as remote:
self.remote_ops.manage_pacemaker_service(
remote, 'p_ceilometer-agent-central', operation='restart')
def check_sample_count(self, expected_count):
image = self.helpers.create_image()
time.sleep(2 * self.settings.polling_interval)
f = datetime.datetime.now() - datetime.timedelta(seconds=600)
query = [{'field': 'timestamp', 'op': 'ge', 'value': f.isoformat()},
{'field': 'resource_id', 'op': 'eq', 'value': image.id}]
actual_count = self.ceilometer.statistics.list(
q=query, meter_name='image')[0].count
msg = ("Expected {0} image sample for one "
"polling period , got : {1} .").format(expected_count,
actual_count)
asserts.assert_true(expected_count == actual_count, msg)

View File

@ -12,10 +12,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import tempfile
import time
from proboscis import asserts
from proboscis import test
@ -35,7 +31,7 @@ class TestFunctionalCeilometerRedisPlugin(api.CeilometerRedisPluginApi):
"""Verify that all measurements are collected
after stopping one of central agents.
"""
self.env.revert_snapshot("deploy_ceilometer_redis")
controller = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
self.helpers.cluster_id, ['controller'])[0]
with self.fuel_web.get_ssh_for_nailgun_node(controller) as remote:
@ -55,7 +51,7 @@ class TestFunctionalCeilometerRedisPlugin(api.CeilometerRedisPluginApi):
"""Check 'Joined partitioning group agent-central'
in the aodh-evaluator logs.
"""
self.env.revert_snapshot("deploy_ceilometer_redis")
controllers = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
self.helpers.cluster_id, ['controller'])
for controller in controllers:
@ -76,7 +72,7 @@ class TestFunctionalCeilometerRedisPlugin(api.CeilometerRedisPluginApi):
"""Check 'Joined partitioning group alarm_evaluator'
in the ceilometer-polling logs.
"""
self.env.revert_snapshot("deploy_ceilometer_redis")
controllers = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
self.helpers.cluster_id, ['controller'])
for controller in controllers:
@ -95,20 +91,39 @@ class TestFunctionalCeilometerRedisPlugin(api.CeilometerRedisPluginApi):
def check_samples_ceilometer_redis(self):
"""Check that for one polling interval only one 'image' sample exists.
"""
self.env.revert_snapshot("deploy_ceilometer_redis")
self.check_sample_count(expected_count=1)
with tempfile.TemporaryFile() as fp:
fp.write('Test')
fp.seek(0)
image = self.helpers.os_conn.create_image(name='Redis',
container_format='bare',
disk_format='qcow2',
data=fp)
time.sleep(2 * self.settings.polling_interval)
f = datetime.datetime.now() - datetime.timedelta(seconds=600)
query = [{'field': 'timestamp', 'op': 'ge', 'value': f.isoformat()},
{'field': 'resource_id', 'op': 'eq', 'value': image.id}]
sample_count = self.ceilometer.statistics.list(
q=query, meter_name='image')[0].count
msg = ("Expected 1 image sample for one "
"polling period , got : {0} .").format(sample_count)
asserts.assert_true(sample_count == 1, msg)
@test(depends_on_groups=["deploy_ceilometer_redis"],
groups=["check_samples_with_one_agent_ceilometer_redis",
"ceilometer_redis",
"functional"])
@log_snapshot_after_test
def check_samples_with_one_agent_ceilometer_redis(self):
"""Check samples after ban two of three ceilometer-agent-central.
"""
self.env.revert_snapshot("deploy_ceilometer_redis")
controllers = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
self.helpers.cluster_id, ['controller'])
for controller in controllers[:2]:
with self.fuel_web.get_ssh_for_nailgun_node(controller) as remote:
remote.execute('pcs resource ban p_ceilometer-agent-central '
'$(hostname) --wait=100')
result = remote.execute(' ps aux | grep -v grep | grep'
' -c ceilometer-polling')['stdout'][0]
msg = "Agent central wasn't stopped"
asserts.assert_true(int(result) == 0, msg)
self.check_sample_count(expected_count=1)
@test(depends_on_groups=["deploy_ceilometer_redis"],
groups=["check_central_disabled_coordination_ceilometer_redis",
"ceilometer_redis",
"functional"])
@log_snapshot_after_test
def check_central_disabled_coordination_ceilometer_redis(self):
"""Check that after disable coordination we have 3
image sample for the one polling period.
"""
self.env.revert_snapshot("deploy_ceilometer_redis")
self.disable_coordination()
self.check_sample_count(expected_count=3)

View File

@ -14,6 +14,7 @@
import os
import re
import tempfile
import time
import urllib2
@ -652,3 +653,14 @@ class PluginHelper(object):
nac_subdict[option]['value'] = value
self.nailgun_client.update_cluster_attributes(
self.cluster_id, attributes)
def create_image(self):
with tempfile.TemporaryFile() as fp:
fp.write('Test')
fp.seek(0)
image = self.os_conn.create_image(name='Redis',
container_format='bare',
disk_format='qcow2',
data=fp)
return image