Merge "Add functional tests for Redis plugin"
This commit is contained in:
		@@ -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
 | 
			
		||||
@@ -90,3 +95,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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
import tempfile
 | 
			
		||||
import time
 | 
			
		||||
import urllib2
 | 
			
		||||
 | 
			
		||||
@@ -660,3 +661,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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user