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