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