9 token=$(openssl rand -hex 10)
10 auth_string="--os-auth-url http://127.0.0.1:35357 --os-token ${token} --os-endpoint http://127.0.0.1:35357/v2.0/"
11 ceilometer_auth_string="--os-username ceilometer --os-password ceilometer --os-tenant-name ceilometer --os-auth-url http://127.0.0.1:35357/v2.0"
14 keystone_log_file="/var/log/keystone/keystone.log"
15 ceilometer_log_dir="/var/log/ceilometer"
16 mongodb_log="/var/log/mongodb/mongodb.log"
18 if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then
20 packages_list="python-pip curl"
21 command_to_install="apt-get install -y --force-yes"
22 keystone_package="keystone"
23 keystone_service="keystone"
25 mongodb_service="mongodb"
26 ceilometer_packages_and_services=(
27 ceilometer-agent-central
28 ceilometer-agent-compute
30 ceilometer-agent-notification
33 ceilometer-alarm-notifier
34 ceilometer-alarm-evaluator
37 echo "Disable tests for Centos"
40 packages_list="python-pip curl"
41 command_to_install="yum install -y"
42 keystone_package="openstack-keystone"
43 keystone_service="openstack-keystone"
44 mysql_service="mysqld"
45 mongodb_service="mongod"
46 ceilometer_packages_and_services=(
47 openstack-ceilometer-central
48 openstack-ceilometer-compute
49 openstack-ceilometer-collector
50 openstack-ceilometer-notification
51 openstack-ceilometer-polling
52 openstack-ceilometer-api
53 openstack-ceilometer-alarm
58 ceilometer-agent-central
59 ceilometer-agent-compute
61 ceilometer-agent-notification
64 ceilometer-alarm-notifier
65 ceilometer-alarm-evaluator
69 ceilometer-send-sample
75 deprecated_pipeline.yaml
76 event_definitions.yaml
93 ${command_to_install} $@
97 install_packages ${packages_list}
100 install_and_setup_keystone() {
101 install_packages ${keystone_package}
102 service ${keystone_service} stop
104 cat > /etc/keystone/keystone.conf << EOF
107 log_file=${keystone_log_file}
108 rabbit_password = guest
109 rabbit_hosts = 127.0.0.1
110 notification_driver = messaging
111 notification_topics = notifications
113 connection=mysql://keystone:keystone@localhost/keystone
115 provider=keystone.token.providers.uuid.Provider
117 [ -d "/var/log/keystone/" ] || mkdir /var/log/keystone/
118 touch ${keystone_log_file}
119 chown -R keystone:keystone /var/log/keystone/
120 chown -R keystone:keystone /etc/keystone
122 keystone-manage db_sync
123 service ${keystone_service} restart
126 if [ -z "$(curl -s http://localhost:5000/ | grep '^{"versions":')" ]; then
127 cat ${keystone_log_file}
128 exit_on_error 1 "Failed to get to keystone API.\nTests failed because of keystone problem"
132 install_and_setup_mysql() {
133 echo "mysql-server mysql-server/root_password select ${mysql_pass}" | debconf-set-selections
134 echo "mysql-server mysql-server/root_password_again select ${mysql_pass}" | debconf-set-selections
135 ${command_to_install} mysql-server-5.6 mysql-client-core-5.6 python-mysqldb
136 if [ -f "/etc/mysql/conf.d/wsrep.cnf" ]; then
137 rm -f /etc/mysql/conf.d/wsrep.cnf
140 service ${mysql_service} restart
143 if [ -z "$(service ${mysql_service} status | grep "start/running" )" ]; then
144 exit_on_error 1 "Mysql service has failed to start"
147 mysql -uroot -p${mysql_pass} -Bse "drop database if exists keystone"
148 mysql -uroot -p${mysql_pass} -Bse "create database keystone"
149 mysql -uroot -p${mysql_pass} -Bse "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone'"
150 mysql -uroot -p${mysql_pass} -Bse "flush privileges"
153 install_and_setup_rabbit() {
154 install_packages rabbitmq-server
155 echo "127.0.10.1 $(hostname)" >> /etc/hosts
156 service rabbitmq-server restart
159 if [ ! -z "$(service rabbitmq-server status | grep "Error: unable to connect to node")" ]; then
160 cat /var/log/rabbitmq/startup_log
161 cat /var/log/rabbitmq/startup_err
163 exit_on_error 1 "DB sync command has failures"
167 ceilometer_configuration() {
168 cat > /etc/ceilometer/ceilometer.conf << EOF
170 api_paste_config = /etc/ceilometer/api_paste.ini
171 policy_file = /etc/ceilometer/policy.json
174 log_dir = ${ceilometer_log_dir}
175 rpc_backend = ceilometer.openstack.common.rpc.impl_kombu
176 auth_strategy = keystone
177 rabbit_password = guest
178 rabbit_hosts = 127.0.0.1
181 auth_host = 127.0.0.1
184 admin_tenant_name = ceilometer
185 admin_user = ceilometer
186 admin_password = ceilometer
187 auth_url=http://127.0.0.1:35357/v2.0
190 connection=mongodb://127.0.0.1/ceilometer
195 [ -e /etc/default/ceilometer-polling ] && rm -f /etc/default/ceilometer-polling
196 echo "DAEMON_ARGS=\"--polling-namespaces=central\"" > /etc/default/ceilometer-polling
198 [ -d "${ceilometer_log_dir}" ] || mkdir ${ceilometer_log_dir}
199 chown -R ceilometer:ceilometer ${ceilometer_log_dir}
200 chown -R ceilometer:ceilometer /etc/ceilometer
202 ceilometer-dbsync --config-file /etc/ceilometer/ceilometer.conf
203 if [ "$?" -ne '0' ]; then
204 cat ${ceilometer_log_dir}/ceilometer-dbsync.log
205 exit_on_error 1 "DB sync command has failures"
208 keystone ${auth_string} user-create --name ceilometer --pass ceilometer
209 keystone ${auth_string} tenant-create --name ceilometer
210 keystone ${auth_string} role-create --name=admin
211 keystone ${auth_string} user-role-add --user ceilometer --role admin --tenant ceilometer
212 ceilometer_service=$(keystone ${auth_string} service-create --name=ceilometer\
213 --type=metering --description="ceilometer" | grep id | awk -F '|' '{print $3}' | tr -d ' ')
214 keystone ${auth_string} endpoint-create --region RegionOne --service-id=${ceilometer_service}\
215 --publicurl=http://127.0.0.1:8777/ --internalurl=http://127.0.0.1:8777/ --adminurl=http://127.0.0.1:8777/
218 install_and_setup_mongo() {
219 install_packages "mongodb mongodb-clients"
220 cat > /etc/mongodb.conf << EOF
224 dbpath=/var/lib/mongo
225 pidfilepath = /var/run/mongodb/mongodb.pid
227 logpath = ${mongodb_log}
228 setParameter = logLevel=1
230 [ -d "/var/log/mongo" ] || mkdir /var/log/mongo
231 [ -d "/var/lib/mongo" ] || mkdir /var/lib/mongo
232 [ -d "/var/run/mongodb" ] || mkdir /var/run/mongodb
233 chown -R mongodb:mongodb /var/log/mongo /var/lib/mongo /var/run/mongodb /etc/mongodb.conf
235 service ${mongodb_service} restart
238 if [ -z "$(service ${mongodb_service} status | grep "start/running")" ]; then
240 exit_on_error 1 "Mongo service has failed to start"
244 while [ ${try} -le '5' ]; do
245 mongo --host 127.0.0.1 --eval "db.getSiblingDB('admin')"
246 if [ "$?" -ne '0' ]; then
253 if [ "${try}" -ge '5' ]; then
254 exit_on_error 1 "Mongo shell is not available. Mongo work is broken"
258 send_fake_instance_notification() {
259 pip install pika==0.9.8
260 echo '#!/usr/bin/env python
262 connection = pika.BlockingConnection(pika.ConnectionParameters(host="127.0.0.1"))
263 channel = connection.channel()
264 channel.queue_declare(queue="notifications.info")
265 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"}'"'"'
266 channel.basic_publish(exchange="nova", routing_key="notifications.info",
267 properties=pika.BasicProperties(priority=0, delivery_mode=2, headers="", content_encoding="utf-8", content_type="application/json"),
269 print " [x] Message was sent!"
270 connection.close()' > $(pwd)/send.py
271 python $(pwd)/send.py
277 if [ "${1}" -ne '0' ]; then
285 for i in ${ceilometer_packages_and_services[@]}; do
286 if [ "${i}" == "${package_to_test}" ]; then
292 echo "Test for package ${package_to_test} will be run with ceilometer-common package"
296 case ${package_to_test} in
297 ceilometer-common|openstack-ceilometer-common)
299 install_packages "${ceilometer_packages_and_services[@]}"
300 install_and_setup_rabbit
301 install_and_setup_mysql
302 install_and_setup_keystone
303 install_and_setup_mongo
304 ceilometer_configuration
306 for binary in ${ceilometer_binaries[@]}; do
307 if [ ! -f "/usr/bin/${binary}" ]; then
308 exit_on_error 1 "Ceilometer binary ${binary} is missed"
312 for config in ${config_files[@]}; do
313 if [ ! -f "/etc/ceilometer/${config}" ]; then
314 exit_on_error 1 "Ceilometer configuration file ${config} is missed"
318 for service in ${ceilometer_packages_and_services[@]}; do
319 service ${service} restart
321 if [ -z "$(service ${service} status | grep "start/running")" ]; then
322 cat /var/log/ceilometer/${service}.log
323 exit_on_error 1 "Service ${service} has failed to start"
327 repsonce=$(curl "http://localhost:8777" | grep "Authentication required")
328 if [ -z "$repsonce" ]; then
329 exit_on_error 1 "Ceilometer api doesn't work.\n No one process is listening on 8777 port"
332 for Command in ${list_commands[@]}; do
333 ceilometer ${ceilometer_auth_string} ${Command}
334 if [ "$?" -ne '0' ]; then
335 exit_on_error 1 "Command ${Command} has failed"
339 # Keystone notifications
340 if [ -z "$(ceilometer ${ceilometer_auth_string} meter-list | grep identity)" ]; then
341 exit_on_error 1 "Keystone notifications don't work"
344 # Instance notification
345 send_fake_instance_notification
346 resource_id=$(ceilometer ${ceilometer_auth_string} resource-list | grep fake)
347 if [ -z ${resource_id} ]; then
348 exit_on_error 1 "Notification is not received"
352 if [ -z "$(ceilometer ${ceilometer_auth_string} event-list | grep fake)" ]; then
353 exit_on_error 1 "Events wasn't created"
357 ceilometer -dv ${ceilometer_auth_string} alarm-threshold-create --name cpu_high --description 'instance running hot' \
358 --meter-name cpu_util --threshold 70.0 --comparison-operator gt --statistic avg \
359 --period 600 --evaluation-periods 3 --alarm-action 'log://' --query resource_id="${resource_id}"
361 if [ "$?" -ne '0' -a -z "$(ceilometer ${ceilometer_auth_string} alarm-list | grep cpu_high)" ]; then
362 exit_on_error 1 "Alarm creation has failed"
366 ceilometer -dv ${ceilometer_auth_string} sample-create -m fake_sample --meter-type gauge --meter-unit '%' --sample-volume 100 -r "fake"
368 if [ "$?" -ne '0' -a -z "$(ceilometer ${ceilometer_auth_string} sample-list | grep fake_sample)" ]; then
369 exit_on_error 1 "Sample creation has failed"
372 ceilometer-agent-ipmi|openstack-ceilometer-ipmi)
373 # Ceilometer-agent-ipmi is not included in common testing
374 # because it is not used in Fuel now
375 if [ ! -f "/usr/bin/ceilometer-agent-ipmi" ]; then
376 exit_on_error 1 "Ceilometer ipmi binary is missed"
380 python -c 'import ceilometer'
381 if [ $? -ne '0' ]; then
382 exit_on_error 1 "Couldn't import module 'ceilometer'"
384 if [ -z "$(which ceilometer)" ]; then
385 exit_on_error 1 "Can't find command 'ceilometer'"
390 echo "Test not defined. Please create test for package ${package_to_test}"