Add simple tests for all ceilometer services and packages
[openstack-build/ceilometer-build.git] / tests / runtests.sh
1 #!/bin/bash -x
2
3 RES=0
4
5 package=$1
6
7 prepare_script() {
8    echo '#!/usr/bin/env python
9 import pika
10 connection = pika.BlockingConnection(pika.ConnectionParameters(host="127.0.0.1"))
11 channel = connection.channel()
12 channel.queue_declare(queue="notifications.info")
13 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"}'"'"'
14 channel.basic_publish(exchange="nova", routing_key="notifications.info",
15                       properties=pika.BasicProperties(priority=0, delivery_mode=2, headers="", content_encoding="utf-8", content_type="application/json"),
16                       body=test)
17 print " [x] Message was sent!"
18 connection.close()' > $(pwd)/send.py
19 }
20
21 prepare_config() {
22    mkdir -p /var/log/ceilometer
23    echo -e "[DEFAULT]
24 api_paste_config = /etc/ceilometer/api_paste.ini
25 policy_file = /etc/ceilometer/policy.json
26 debug = True
27 verbose = True
28 log_file = /var/log/ceilometer/$package.log
29 rpc_backend = ceilometer.openstack.common.rpc.impl_kombu
30
31 [database]
32 connection=sqlite:////tmp/ceilometer" > /etc/ceilometer/ceilometer.conf
33
34    ceilometer-dbsync --config-file /etc/ceilometer/ceilometer.conf
35    if [ $? != "0" ]; then
36       RES=1
37       exit $RES
38    fi
39    # Clean log file
40    rm -f /var/log/ceilometer/$package.log
41 }
42
43 prepare_vm() {
44    if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then
45       apt-get install rabbitmq-server screen python-pip sqlite3 -y
46    else
47       yum install screen rabbitmq-server python-pip sqlite -y
48    fi
49    service rabbitmq-server restart
50    sleep 5
51 }
52
53 send_fake_notification() {
54    pip install pika==0.9.8
55    prepare_script
56    python $(pwd)/send.py
57 }
58
59 check_fake_notification() {
60    sqlite3 /tmp/ceilometer 'select * from meter;'
61    local check=$(sqlite3 /tmp/ceilometer 'select * from meter;' | grep instance)
62    if [ -z "$check" ]; then
63       echo -e "Meter 'instance' is lost"
64       RES=1
65       echo $RES
66    fi
67 }
68
69 check_pollsters() {
70    local test1=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $1")
71    local test2=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $2")
72    local test3=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $3")
73    if [ -z "$test1" -o -z "$test2" -o -z "$test3" ]; then
74       echo -e "Some pollsters aren't work"
75       RES=1
76       echo $RES
77    fi
78 }
79
80 check_running() {
81    if [ $(ps aux | grep $1 | wc -l) -lt "2" ]; then
82       echo "Process $1 is not running"
83       RES=1
84       echo $RES
85    fi
86 }
87
88 case $package in
89    ceilometer-api|openstack-ceilometer-api)
90       prepare_config
91       prepare_vm
92
93       screen -dmS ceilometer-api
94       sleep 2
95       screen -S ceilometer-api -p 0 -X stuff 'ceilometer-api --config-file /etc/ceilometer/ceilometer.conf
96 '
97       sleep 10
98       check_running ceilometer-api
99
100       repsonce=$(curl "http://localhost:8777" | grep "Authentication required")
101       if [ -z "$repsonce" ]; then
102          echo -e "Ceilometer api doesn't work. No one process is listening on 8777 port"
103          RES=1
104       fi
105
106       killall -15 ceilometer-api
107
108       cat /var/log/ceilometer/$package.log
109    ;;
110    ceilometer-collector|openstack-ceilometer-collector|ceilometer-agent-notification|openstack-ceilometer-notification)
111       prepare_config
112       prepare_vm
113
114       if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then
115          apt-get install ceilometer-collector ceilometer-agent-notification -y
116       else
117          yum install openstack-ceilometer-collector openstack-ceilometer-notification -y
118       fi
119
120       screen -dmS ceilometer-collector
121       screen -dmS ceilometer-agent-notification
122       sleep 2
123       screen -S ceilometer-collector -p 0 -X stuff 'ceilometer-collector --config-file /etc/ceilometer/ceilometer.conf --log-file /var/log/ceilometer/ceilometer-collector.log
124 '
125       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
126 '
127       sleep 10
128       check_running ceilometer-collector
129       check_running ceilometer-agent-notification
130       send_fake_notification
131       sleep 2
132       check_fake_notification
133
134       killall -15 ceilometer-collector ceilometer-agent-notification
135
136       cat /var/log/ceilometer/ceilometer-collector.log
137       cat /var/log/ceilometer/ceilometer-anotification.log
138    ;;
139    ceilometer-alarm-notifier|ceilometer-alarm-evaluator|openstack-ceilometer-alarm)
140       if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then
141          # Testing alarm-notifier and alarm-evaluator together
142          apt-get install ceilometer-alarm-evaluator ceilometer-alarm-notifier -y --force-yes
143       fi
144
145       echo "Testing 'ceilometer-alarm-notifier'"
146       prepare_config
147       prepare_vm
148
149       screen -dmS ceilometer-alarm-notifier
150       sleep 2
151       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
152 '
153       sleep 10
154       check_running ceilometer-alarm-notifier
155
156       if [ -z "$(cat /var/log/ceilometer/ceilometer-alarm-notifier.log | grep 'Connected to AMQP server on')" ]; then
157          echo -e "Start alarm-notifier process is failed"
158          RES=1
159       fi
160
161       killall -15 ceilometer-alarm-notifier
162
163       cat /var/log/ceilometer/ceilometer-alarm-notifier.log
164
165       echo "Testing 'ceilometer-alarm-evaluator'"
166       screen -dmS ceilometer-alarm-evaluator
167       sleep 2
168       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
169 '
170       sleep 10
171       check_running ceilometer-alarm-evaluator
172
173       if [ -z "$(cat /var/log/ceilometer/ceilometer-alarm-evaluator.log | grep 'alarm evaluation cycle')" ]; then
174          echo -e "Start alarm-evalutor process is failed"
175          RES=1
176       fi
177
178       killall -15 ceilometer-alarm-evaluator
179
180       cat /var/log/ceilometer/ceilometer-alarm-evaluator.log
181    ;;
182    ceilometer-agent-compute|openstack-ceilometer-compute)
183       prepare_vm
184       prepare_config
185
186       screen -dmS ceilometer-agent-compute
187       sleep 2
188       screen -S ceilometer-agent-compute -p 0 -X stuff 'ceilometer-agent-compute --config-file /etc/ceilometer/ceilometer.conf
189 '
190       sleep 10
191       check_running ceilometer-agent-compute
192       check_pollsters "cpu" "memory" "disk"
193
194       killall -15 ceilometer-agent-compute
195
196       cat /var/log/ceilometer/$package.log
197    ;;
198    ceilometer-agent-central|openstack-ceilometer-central)
199       prepare_vm
200       prepare_config
201
202       screen -dmS ceilometer-agent-central
203       sleep 2
204       screen -S ceilometer-agent-central -p 0 -X stuff 'ceilometer-agent-central --config-file /etc/ceilometer/ceilometer.conf
205 '
206       sleep 10
207       check_running ceilometer-agent-central
208       check_pollsters "network" "switch" "hardware"
209
210       killall -15 ceilometer-agent-central
211
212       cat /var/log/ceilometer/$package.log
213    ;;
214    ceilometer-common|openstack-ceilometer-common)
215       if [ -z "$(cut -d: -f1 /etc/passwd | grep 'ceilometer')" ]; then
216          echo -e "User 'ceilometer' doesn't exist"
217          RES=1
218       fi
219       config_files="ceilometer.conf policy.json pipeline.yaml api_paste.ini event_definitions.yaml"
220       for i in $config_files; do
221          if [ ! -f "/etc/ceilometer/$i" ]; then
222             RES=1
223             echo "File /etc/ceilometer/$i doesn't exist"
224          fi
225       done
226    ;;
227    python-ceilometer)
228       python -c 'import ceilometer'
229       if [ $? -ne '0' ]; then
230          echo -e "Couldn't import module 'ceilometer'"
231          RES=1
232       fi
233       if [ -z "$(which ceilometer)" ]; then
234          RES=1
235          echo -e "Can't find command 'ceilometer'"
236       fi
237    ;;
238    *)
239       echo "test not defined, skipping..."
240    ;;
241 esac
242
243 exit $RES