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
31 ceilometer-agent-notification
34 ceilometer-alarm-notifier
35 ceilometer-alarm-evaluator
38 echo "Disable tests for Centos"
41 packages_list="python-pip curl"
42 command_to_install="yum install -y"
43 keystone_package="openstack-keystone"
44 keystone_service="openstack-keystone"
45 mysql_service="mysqld"
46 mongodb_service="mongod"
47 ceilometer_packages_and_services=(
48 openstack-ceilometer-central
49 openstack-ceilometer-compute
50 openstack-ceilometer-collector
51 openstack-ceilometer-notification
52 openstack-ceilometer-polling
53 openstack-ceilometer-api
54 openstack-ceilometer-alarm
60 ceilometer-agent-notification
63 ceilometer-alarm-notifier
64 ceilometer-alarm-evaluator
68 ceilometer-send-sample
74 event_definitions.yaml
89 ${command_to_install} $@
93 install_packages ${packages_list}
96 install_and_setup_keystone() {
97 install_packages ${keystone_package}
98 service ${keystone_service} stop
100 cat > /etc/keystone/keystone.conf << EOF
103 log_file=${keystone_log_file}
104 rabbit_password = guest
105 rabbit_hosts = 127.0.0.1
106 notification_driver = messaging
107 notification_topics = notifications
109 connection=mysql://keystone:keystone@localhost/keystone
111 provider=keystone.token.providers.uuid.Provider
113 [ -d "/var/log/keystone/" ] || mkdir /var/log/keystone/
114 touch ${keystone_log_file}
115 chown -R keystone:keystone /var/log/keystone/
116 chown -R keystone:keystone /etc/keystone
118 keystone-manage db_sync
119 service ${keystone_service} restart
122 if [ -z "$(curl -s http://localhost:5000/ | grep '^{"versions":')" ]; then
123 cat ${keystone_log_file}
124 exit_on_error 1 "Failed to get to keystone API.\nTests failed because of keystone problem"
128 install_and_setup_mysql() {
129 echo "mysql-server mysql-server/root_password select ${mysql_pass}" | debconf-set-selections
130 echo "mysql-server mysql-server/root_password_again select ${mysql_pass}" | debconf-set-selections
131 ${command_to_install} mysql-server-5.6 mysql-client-core-5.6 python-mysqldb
132 if [ -f "/etc/mysql/conf.d/wsrep.cnf" ]; then
133 rm -f /etc/mysql/conf.d/wsrep.cnf
136 service ${mysql_service} restart
139 if [ -z "$(service ${mysql_service} status | grep "start/running" )" ]; then
140 exit_on_error 1 "Mysql service has failed to start"
143 mysql -uroot -p${mysql_pass} -Bse "drop database if exists keystone"
144 mysql -uroot -p${mysql_pass} -Bse "create database keystone"
145 mysql -uroot -p${mysql_pass} -Bse "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone'"
146 mysql -uroot -p${mysql_pass} -Bse "flush privileges"
149 install_and_setup_rabbit() {
150 install_packages rabbitmq-server
151 echo "127.0.10.1 $(hostname)" >> /etc/hosts
152 service rabbitmq-server restart
155 if [ ! -z "$(service rabbitmq-server status | grep "Error: unable to connect to node")" ]; then
156 cat /var/log/rabbitmq/startup_log
157 cat /var/log/rabbitmq/startup_err
159 exit_on_error 1 "DB sync command has failures"
163 ceilometer_configuration() {
164 cat > /etc/ceilometer/ceilometer.conf << EOF
166 api_paste_config = /etc/ceilometer/api_paste.ini
167 policy_file = /etc/ceilometer/policy.json
170 log_dir = ${ceilometer_log_dir}
172 auth_strategy = keystone
173 rabbit_password = guest
174 rabbit_hosts = 127.0.0.1
177 auth_host = 127.0.0.1
180 admin_tenant_name = ceilometer
181 admin_user = ceilometer
182 admin_password = ceilometer
183 auth_url=http://127.0.0.1:35357/v2.0
186 connection=mongodb://127.0.0.1/ceilometer
191 [ -e /etc/default/ceilometer-polling ] && rm -f /etc/default/ceilometer-polling
192 echo "DAEMON_ARGS=\"--polling-namespaces=central\"" > /etc/default/ceilometer-polling
194 [ -d "${ceilometer_log_dir}" ] || mkdir ${ceilometer_log_dir}
195 chown -R ceilometer:ceilometer ${ceilometer_log_dir}
196 chown -R ceilometer:ceilometer /etc/ceilometer
198 ceilometer-dbsync --config-file /etc/ceilometer/ceilometer.conf
199 if [ "$?" -ne '0' ]; then
200 cat ${ceilometer_log_dir}/ceilometer-dbsync.log
201 exit_on_error 1 "DB sync command has failures"
204 keystone ${auth_string} user-create --name ceilometer --pass ceilometer
205 keystone ${auth_string} tenant-create --name ceilometer
206 keystone ${auth_string} role-create --name=admin
207 keystone ${auth_string} user-role-add --user ceilometer --role admin --tenant ceilometer
208 ceilometer_service=$(keystone ${auth_string} service-create --name=ceilometer\
209 --type=metering --description="ceilometer" | grep id | awk -F '|' '{print $3}' | tr -d ' ')
210 keystone ${auth_string} endpoint-create --region RegionOne --service-id=${ceilometer_service}\
211 --publicurl=http://127.0.0.1:8777/ --internalurl=http://127.0.0.1:8777/ --adminurl=http://127.0.0.1:8777/
214 install_and_setup_mongo() {
215 install_packages "mongodb mongodb-clients"
216 cat > /etc/mongodb.conf << EOF
220 dbpath=/var/lib/mongo
221 pidfilepath = /var/run/mongodb/mongodb.pid
223 logpath = ${mongodb_log}
224 setParameter = logLevel=1
226 [ -d "/var/log/mongo" ] || mkdir /var/log/mongo
227 [ -d "/var/lib/mongo" ] || mkdir /var/lib/mongo
228 [ -d "/var/run/mongodb" ] || mkdir /var/run/mongodb
229 chown -R mongodb:mongodb /var/log/mongo /var/lib/mongo /var/run/mongodb /etc/mongodb.conf
231 service ${mongodb_service} restart
234 if [ -z "$(service ${mongodb_service} status | grep "start/running")" ]; then
236 exit_on_error 1 "Mongo service has failed to start"
240 while [ ${try} -le '5' ]; do
241 mongo --host 127.0.0.1 --eval "db.getSiblingDB('admin')"
242 if [ "$?" -ne '0' ]; then
249 if [ "${try}" -ge '5' ]; then
250 exit_on_error 1 "Mongo shell is not available. Mongo work is broken"
254 send_fake_instance_notification() {
255 pip install pika==0.9.8
256 echo '#!/usr/bin/env python
258 connection = pika.BlockingConnection(pika.ConnectionParameters(host="127.0.0.1"))
259 channel = connection.channel()
260 channel.queue_declare(queue="notifications.info")
261 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"}'"'"'
262 channel.basic_publish(exchange="nova", routing_key="notifications.info",
263 properties=pika.BasicProperties(priority=0, delivery_mode=2, headers="", content_encoding="utf-8", content_type="application/json"),
265 print " [x] Message was sent!"
266 connection.close()' > $(pwd)/send.py
267 python $(pwd)/send.py
273 if [ "${1}" -ne '0' ]; then
281 for i in ${ceilometer_packages_and_services[@]}; do
282 if [ "${i}" == "${package_to_test}" ]; then
288 echo "Test for package ${package_to_test} will be run with ceilometer-common package"
292 case ${package_to_test} in
293 ceilometer-common|openstack-ceilometer-common)
295 install_packages "${ceilometer_packages_and_services[@]}"
296 install_and_setup_rabbit
297 install_and_setup_mysql
298 install_and_setup_keystone
299 install_and_setup_mongo
300 ceilometer_configuration
302 for binary in ${ceilometer_binaries[@]}; do
303 if [ ! -f "/usr/bin/${binary}" ]; then
304 exit_on_error 1 "Ceilometer binary ${binary} is missed"
308 for config in ${config_files[@]}; do
309 if [ ! -f "/etc/ceilometer/${config}" ]; then
310 exit_on_error 1 "Ceilometer configuration file ${config} is missed"
314 for service in ${ceilometer_packages_and_services[@]}; do
315 service ${service} restart
317 if [ -z "$(service ${service} status | grep "start/running")" ]; then
318 cat /var/log/ceilometer/${service}.log
319 exit_on_error 1 "Service ${service} has failed to start"
323 repsonce=$(curl "http://localhost:8777" | grep "Authentication required")
324 if [ -z "$repsonce" ]; then
325 exit_on_error 1 "Ceilometer api doesn't work.\n No one process is listening on 8777 port"
328 for Command in ${list_commands[@]}; do
329 ceilometer ${ceilometer_auth_string} ${Command}
330 if [ "$?" -ne '0' ]; then
331 exit_on_error 1 "Command ${Command} has failed"
336 # Ceilometer functionality has changed.
337 # Remove after test rework.
340 # Keystone notifications
341 if [ -z "$(ceilometer ${ceilometer_auth_string} meter-list | grep identity)" ]; then
342 exit_on_error 1 "Keystone notifications don't work"
345 # Instance notification
346 send_fake_instance_notification
347 resource_id=$(ceilometer ${ceilometer_auth_string} resource-list | grep fake)
348 if [ -z ${resource_id} ]; then
349 exit_on_error 1 "Notification is not received"
353 if [ -z "$(ceilometer ${ceilometer_auth_string} event-list | grep fake)" ]; then
354 exit_on_error 1 "Events wasn't created"
358 ceilometer -dv ${ceilometer_auth_string} alarm-threshold-create --name cpu_high --description 'instance running hot' \
359 --meter-name cpu_util --threshold 70.0 --comparison-operator gt --statistic avg \
360 --period 600 --evaluation-periods 3 --alarm-action 'log://' --query resource_id="${resource_id}"
362 if [ "$?" -ne '0' -a -z "$(ceilometer ${ceilometer_auth_string} alarm-list | grep cpu_high)" ]; then
363 exit_on_error 1 "Alarm creation has failed"
367 ceilometer -dv ${ceilometer_auth_string} sample-create -m fake_sample --meter-type gauge --meter-unit '%' --sample-volume 100 -r "fake"
369 if [ "$?" -ne '0' -a -z "$(ceilometer ${ceilometer_auth_string} sample-list | grep fake_sample)" ]; then
370 exit_on_error 1 "Sample creation has failed"
373 ceilometer-agent-ipmi|openstack-ceilometer-ipmi)
374 # Ceilometer-agent-ipmi is not included in common testing
375 # because it is not used in Fuel now
377 # Binary does not exist anymore. ceilometer-polling is
378 # responsible for service start.
379 # Remove after test rework.
382 if [ ! -f "/usr/bin/ceilometer-agent-ipmi" ]; then
383 exit_on_error 1 "Ceilometer ipmi binary is missed"
387 python -c 'import ceilometer'
388 if [ $? -ne '0' ]; then
389 exit_on_error 1 "Couldn't import module 'ceilometer'"
391 if [ -z "$(which ceilometer)" ]; then
392 exit_on_error 1 "Can't find command 'ceilometer'"
397 echo "Test not defined. Please create test for package ${package_to_test}"