Update to 2015.1.0b1 release
[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
51    for (( i = 1; i <= 5; i++ ))
52    {
53       if echo "$(service rabbitmq-server status)" | grep -q "Error: unable to connect to node";
54          then
55             service rabbitmq-server start
56             if [ "$i" -eq 5 ]
57                then
58                   echo "rabbitmq-server is dead"
59                   exit 1
60             fi
61          else
62             echo "$(service rabbitmq-server status)"
63             break
64       fi
65    }
66
67    sleep 5
68 }
69
70 send_fake_notification() {
71    pip install pika==0.9.8
72    prepare_script
73    python $(pwd)/send.py
74 }
75
76 check_fake_notification() {
77    sqlite3 /tmp/ceilometer 'select * from meter;'
78    local check=$(sqlite3 /tmp/ceilometer 'select * from meter;' | grep instance)
79    if [ -z "$check" ]; then
80       echo -e "Meter 'instance' is lost"
81       RES=1
82       echo $RES
83    fi
84 }
85
86 check_pollsters() {
87    local test1=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $1")
88    local test2=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $2")
89    local test3=$(cat /var/log/ceilometer/$package.log | grep "Polling pollster $3")
90    if [ -z "$test1" -o -z "$test2" -o -z "$test3" ]; then
91       echo -e "Some pollsters aren't work"
92       RES=1
93       echo $RES
94    fi
95 }
96
97 check_running() {
98    if [ $(ps aux | grep $1 | wc -l) -lt "2" ]; then
99       echo "Process $1 is not running"
100       RES=1
101       echo $RES
102    fi
103 }
104
105 case $package in
106    ceilometer-api|openstack-ceilometer-api)
107       echo "Skip due to resolving oslo.middleware problem: ImportError: No module named middleware"
108       exit 0
109       prepare_config
110       prepare_vm
111
112       screen -dmS ceilometer-api
113       sleep 2
114       screen -S ceilometer-api -p 0 -X stuff 'ceilometer-api --config-file /etc/ceilometer/ceilometer.conf
115 '
116       sleep 10
117       check_running ceilometer-api
118
119       repsonce=$(curl "http://localhost:8777" | grep "Authentication required")
120       if [ -z "$repsonce" ]; then
121          echo -e "Ceilometer api doesn't work. No one process is listening on 8777 port"
122          RES=1
123       fi
124
125       killall -15 ceilometer-api
126
127       cat /var/log/ceilometer/$package.log
128    ;;
129    ceilometer-collector|openstack-ceilometer-collector|ceilometer-agent-notification|openstack-ceilometer-notification)
130       prepare_config
131       prepare_vm
132
133       if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then
134          apt-get install ceilometer-collector ceilometer-agent-notification -y
135       else
136          yum install openstack-ceilometer-collector openstack-ceilometer-notification -y
137       fi
138
139       screen -dmS ceilometer-collector
140       screen -dmS ceilometer-agent-notification
141       sleep 2
142       screen -S ceilometer-collector -p 0 -X stuff 'ceilometer-collector --config-file /etc/ceilometer/ceilometer.conf --log-file /var/log/ceilometer/ceilometer-collector.log
143 '
144       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
145 '
146       sleep 10
147       check_running ceilometer-collector
148       check_running ceilometer-agent-notification
149       send_fake_notification
150       sleep 2
151       check_fake_notification
152
153       killall -15 ceilometer-collector ceilometer-agent-notification
154
155       cat /var/log/ceilometer/ceilometer-collector.log
156       cat /var/log/ceilometer/ceilometer-anotification.log
157    ;;
158    ceilometer-alarm-notifier|ceilometer-alarm-evaluator|openstack-ceilometer-alarm)
159       if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then
160          # Testing alarm-notifier and alarm-evaluator together
161          apt-get install ceilometer-alarm-evaluator ceilometer-alarm-notifier -y --force-yes
162       fi
163
164       echo "Testing 'ceilometer-alarm-notifier'"
165       prepare_config
166       prepare_vm
167
168       screen -dmS ceilometer-alarm-notifier
169       sleep 2
170       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
171 '
172       sleep 10
173       check_running ceilometer-alarm-notifier
174
175       if [ -z "$(cat /var/log/ceilometer/ceilometer-alarm-notifier.log | grep 'Connected to AMQP server on')" ]; then
176          echo -e "Start alarm-notifier process is failed"
177          RES=1
178       fi
179
180       killall -15 ceilometer-alarm-notifier
181
182       cat /var/log/ceilometer/ceilometer-alarm-notifier.log
183
184       echo "Testing 'ceilometer-alarm-evaluator'"
185       screen -dmS ceilometer-alarm-evaluator
186       sleep 2
187       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
188 '
189       sleep 10
190       check_running ceilometer-alarm-evaluator
191
192       if [ -z "$(cat /var/log/ceilometer/ceilometer-alarm-evaluator.log | grep 'alarm evaluation cycle')" ]; then
193          echo -e "Start alarm-evalutor process is failed"
194          RES=1
195       fi
196
197       killall -15 ceilometer-alarm-evaluator
198
199       cat /var/log/ceilometer/ceilometer-alarm-evaluator.log
200    ;;
201    ceilometer-agent-compute|openstack-ceilometer-compute)
202       prepare_vm
203       prepare_config
204
205       screen -dmS ceilometer-agent-compute
206       sleep 2
207       screen -S ceilometer-agent-compute -p 0 -X stuff 'ceilometer-agent-compute --config-file /etc/ceilometer/ceilometer.conf
208 '
209       sleep 10
210       check_running ceilometer-agent-compute
211       check_pollsters "cpu" "memory" "disk"
212
213       killall -15 ceilometer-agent-compute
214
215       cat /var/log/ceilometer/$package.log
216    ;;
217    ceilometer-agent-central|openstack-ceilometer-central)
218       prepare_vm
219       prepare_config
220
221       screen -dmS ceilometer-agent-central
222       sleep 2
223       screen -S ceilometer-agent-central -p 0 -X stuff 'ceilometer-agent-central --config-file /etc/ceilometer/ceilometer.conf
224 '
225       sleep 10
226       check_running ceilometer-agent-central
227       check_pollsters "network" "switch" "hardware"
228
229       killall -15 ceilometer-agent-central
230
231       cat /var/log/ceilometer/$package.log
232    ;;
233    ceilometer-common|openstack-ceilometer-common)
234       if [ -z "$(cut -d: -f1 /etc/passwd | grep 'ceilometer')" ]; then
235          echo -e "User 'ceilometer' doesn't exist"
236          RES=1
237       fi
238       config_files="ceilometer.conf policy.json pipeline.yaml api_paste.ini event_definitions.yaml"
239       for i in $config_files; do
240          if [ ! -f "/etc/ceilometer/$i" ]; then
241             RES=1
242             echo "File /etc/ceilometer/$i doesn't exist"
243          fi
244       done
245    ;;
246    python-ceilometer)
247       python -c 'import ceilometer'
248       if [ $? -ne '0' ]; then
249          echo -e "Couldn't import module 'ceilometer'"
250          RES=1
251       fi
252       if [ -z "$(which ceilometer)" ]; then
253          RES=1
254          echo -e "Can't find command 'ceilometer'"
255       fi
256    ;;
257    *)
258       echo "test not defined, skipping..."
259    ;;
260 esac
261
262 exit $RES