#!/bin/bash -x RES=0 package=$1 prepare_script() { echo '#!/usr/bin/env python import pika connection = pika.BlockingConnection(pika.ConnectionParameters(host="127.0.0.1")) channel = connection.channel() channel.queue_declare(queue="notifications.info") test=r'"'"'{"event_type": "compute.instance.update", "_unique_id": "fake", "payload": {"ephemeral_gb": 0, "instance_id": "fake", "user_id": "fake", "root_gb": 0, "tenant_id": "fake", "memory_mb": 64, "vcpus": 1}, "priority": "INFO"}'"'"' channel.basic_publish(exchange="nova", routing_key="notifications.info", properties=pika.BasicProperties(priority=0, delivery_mode=2, headers="", content_encoding="utf-8", content_type="application/json"), body=test) print " [x] Message was sent!" connection.close()' > $(pwd)/send.py } prepare_config() { mkdir -p /var/log/ceilometer echo -e "[DEFAULT] api_paste_config = /etc/ceilometer/api_paste.ini policy_file = /etc/ceilometer/policy.json debug = True verbose = True log_file = /var/log/ceilometer/$package.log rpc_backend = ceilometer.openstack.common.rpc.impl_kombu [database] connection=sqlite:////tmp/ceilometer" > /etc/ceilometer/ceilometer.conf ceilometer-dbsync --config-file /etc/ceilometer/ceilometer.conf if [ $? != "0" ]; then RES=1 exit $RES fi # Clean log file rm -f /var/log/ceilometer/$package.log } prepare_vm() { if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then apt-get install rabbitmq-server screen python-pip sqlite3 -y else yum install screen rabbitmq-server python-pip sqlite -y fi service rabbitmq-server restart for (( i = 1; i <= 5; i++ )) { if echo "$(service rabbitmq-server status)" | grep -q "Error: unable to connect to node"; then service rabbitmq-server start if [ "$i" -eq 5 ] then echo "rabbitmq-server is dead" exit 1 fi else echo "$(service rabbitmq-server status)" break fi } sleep 5 } send_fake_notification() { pip install pika==0.9.8 prepare_script python $(pwd)/send.py } check_fake_notification() { sqlite3 /tmp/ceilometer 'select * from meter;' local check=$(sqlite3 /tmp/ceilometer 'select * from meter;' | grep instance) if [ -z "$check" ]; then echo -e "Meter 'instance' is lost" RES=1 echo $RES fi } check_pollsters() { local test1=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $1") local test2=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $2") local test3=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $3") if [ -z "$test1" -o -z "$test2" -o -z "$test3" ]; then echo -e "Some pollsters aren't work" RES=1 echo $RES fi } check_running() { if [ $(ps aux | grep $1 | wc -l) -lt "2" ]; then echo "Process $1 is not running" RES=1 echo $RES fi } case $package in ceilometer-api|openstack-ceilometer-api) echo "Skip due to resolving oslo.middleware problem: ImportError: No module named middleware" exit 0 prepare_config prepare_vm screen -dmS ceilometer-api sleep 2 screen -S ceilometer-api -p 0 -X stuff 'ceilometer-api --config-file /etc/ceilometer/ceilometer.conf ' sleep 10 check_running ceilometer-api repsonce=$(curl "http://localhost:8777" | grep "Authentication required") if [ -z "$repsonce" ]; then echo -e "Ceilometer api doesn't work. No one process is listening on 8777 port" RES=1 fi killall -15 ceilometer-api cat /var/log/ceilometer/$package.log ;; ceilometer-collector|openstack-ceilometer-collector|ceilometer-agent-notification|openstack-ceilometer-notification) prepare_config prepare_vm if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then apt-get install ceilometer-collector ceilometer-agent-notification -y else yum install openstack-ceilometer-collector openstack-ceilometer-notification -y fi screen -dmS ceilometer-collector screen -dmS ceilometer-agent-notification sleep 2 screen -S ceilometer-collector -p 0 -X stuff 'ceilometer-collector --config-file /etc/ceilometer/ceilometer.conf --log-file /var/log/ceilometer/ceilometer-collector.log ' screen -S ceilometer-agent-notification -p 0 -X stuff 'ceilometer-agent-notification --config-file /etc/ceilometer/ceilometer.conf --log-file /var/log/ceilometer/ceilometer-anotification.log ' sleep 10 check_running ceilometer-collector check_running ceilometer-agent-notification send_fake_notification sleep 2 check_fake_notification killall -15 ceilometer-collector ceilometer-agent-notification cat /var/log/ceilometer/ceilometer-collector.log cat /var/log/ceilometer/ceilometer-anotification.log ;; ceilometer-alarm-notifier|ceilometer-alarm-evaluator|openstack-ceilometer-alarm) if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then # Testing alarm-notifier and alarm-evaluator together apt-get install ceilometer-alarm-evaluator ceilometer-alarm-notifier -y --force-yes fi echo "Testing 'ceilometer-alarm-notifier'" prepare_config prepare_vm screen -dmS ceilometer-alarm-notifier sleep 2 screen -S ceilometer-alarm-notifier -p 0 -X stuff 'ceilometer-alarm-notifier --config-file /etc/ceilometer/ceilometer.conf --log-file /var/log/ceilometer/ceilometer-alarm-notifier.log ' sleep 10 check_running ceilometer-alarm-notifier if [ -z "$(cat /var/log/ceilometer/ceilometer-alarm-notifier.log | grep 'Connected to AMQP server on')" ]; then echo -e "Start alarm-notifier process is failed" RES=1 fi killall -15 ceilometer-alarm-notifier cat /var/log/ceilometer/ceilometer-alarm-notifier.log echo "Testing 'ceilometer-alarm-evaluator'" screen -dmS ceilometer-alarm-evaluator sleep 2 screen -S ceilometer-alarm-evaluator -p 0 -X stuff 'ceilometer-alarm-evaluator --config-file /etc/ceilometer/ceilometer.conf --log-file /var/log/ceilometer/ceilometer-alarm-evaluator.log ' sleep 10 check_running ceilometer-alarm-evaluator if [ -z "$(cat /var/log/ceilometer/ceilometer-alarm-evaluator.log | grep 'alarm evaluation cycle')" ]; then echo -e "Start alarm-evalutor process is failed" RES=1 fi killall -15 ceilometer-alarm-evaluator cat /var/log/ceilometer/ceilometer-alarm-evaluator.log ;; ceilometer-agent-compute|openstack-ceilometer-compute) prepare_vm prepare_config screen -dmS ceilometer-agent-compute sleep 2 screen -S ceilometer-agent-compute -p 0 -X stuff 'ceilometer-agent-compute --config-file /etc/ceilometer/ceilometer.conf ' sleep 10 check_running ceilometer-agent-compute check_pollsters "cpu" "memory" "disk" killall -15 ceilometer-agent-compute cat /var/log/ceilometer/$package.log ;; ceilometer-agent-central|openstack-ceilometer-central) prepare_vm prepare_config screen -dmS ceilometer-agent-central sleep 2 screen -S ceilometer-agent-central -p 0 -X stuff 'ceilometer-agent-central --config-file /etc/ceilometer/ceilometer.conf ' sleep 10 check_running ceilometer-agent-central check_pollsters "network" "switch" "hardware" killall -15 ceilometer-agent-central cat /var/log/ceilometer/$package.log ;; ceilometer-common|openstack-ceilometer-common) if [ -z "$(cut -d: -f1 /etc/passwd | grep 'ceilometer')" ]; then echo -e "User 'ceilometer' doesn't exist" RES=1 fi config_files="ceilometer.conf policy.json pipeline.yaml api_paste.ini event_definitions.yaml" for i in $config_files; do if [ ! -f "/etc/ceilometer/$i" ]; then RES=1 echo "File /etc/ceilometer/$i doesn't exist" fi done ;; python-ceilometer) python -c 'import ceilometer' if [ $? -ne '0' ]; then echo -e "Couldn't import module 'ceilometer'" RES=1 fi if [ -z "$(which ceilometer)" ]; then RES=1 echo -e "Can't find command 'ceilometer'" fi ;; *) echo "test not defined, skipping..." ;; esac exit $RES