+
+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
+ 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)
+ 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