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="--debug --os-username ceilometer --os-password ceilometer --os-tenant-name ceilometer --os-auth-url http://127.0.0.1:35357"
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 export DEBIAN_FRONTEND=noninteractive
22 command_to_install="apt-get install -y --force-yes"
23 keystone_package="keystone"
24 keystone_service="keystone"
26 mongodb_service="mongodb"
28 ceilometer-agent-central
29 ceilometer-agent-compute
31 ceilometer-agent-notification
34 ceilometer-alarm-notifier
35 ceilometer-alarm-evaluator
38 ceilometer_services=("${ceilometer_packages[@]}")
42 ceilometer-agent-notification
45 ceilometer-alarm-notifier
46 ceilometer-alarm-evaluator
50 ceilometer-send-sample
55 event_definitions.yaml
61 setenforce 0 && service firewalld stop
63 packages_list="python-pip curl"
64 command_to_install="yum install -y"
65 keystone_package="openstack-keystone"
66 keystone_service="openstack-keystone"
68 mongodb_service="mongod"
70 python-ceilometerclient
71 openstack-ceilometer-central
72 openstack-ceilometer-compute
73 openstack-ceilometer-collector
74 openstack-ceilometer-notification
75 openstack-ceilometer-polling
76 openstack-ceilometer-api
77 openstack-ceilometer-alarm
80 openstack-ceilometer-central
81 openstack-ceilometer-compute
82 openstack-ceilometer-collector
83 openstack-ceilometer-notification
84 openstack-ceilometer-polling
85 openstack-ceilometer-api
86 openstack-ceilometer-alarm-notifier
87 openstack-ceilometer-alarm-evaluator
90 ceilometer-agent-notification
91 ceilometer-alarm-evaluator
92 ceilometer-alarm-notifier
98 ceilometer-send-sample
103 event_definitions.yaml
119 ${command_to_install} $@
123 install_packages ${packages_list}
126 install_and_setup_keystone() {
127 install_packages ${keystone_package}
128 service ${keystone_service} stop
130 cat > /etc/keystone/keystone.conf << EOF
133 log_file=${keystone_log_file}
134 rabbit_password = guest
135 rabbit_hosts = 127.0.0.1
136 notification_driver = messaging
137 notification_topics = notifications
139 connection=mysql://keystone:keystone@127.0.0.1/keystone
141 provider=keystone.token.providers.uuid.Provider
143 [ -d "/var/log/keystone/" ] || mkdir /var/log/keystone/
144 touch ${keystone_log_file}
145 chown -R keystone:keystone /var/log/keystone/
146 chown -R keystone:keystone /etc/keystone
147 keystone-manage db_sync
148 service ${keystone_service} restart
150 if [ -z "$(curl -s http://127.0.0.1:5000/ | grep '^{"versions":')" ]; then
151 exit_on_error 1 "Failed to get to keystone API.\nTests failed because of keystone problem"
155 install_and_setup_mysql() {
156 if [[ "$os" == "ubuntu" ]]; then
157 echo "mysql-server mysql-server/root_password select ${mysql_pass}" | debconf-set-selections
158 echo "mysql-server mysql-server/root_password_again select ${mysql_pass}" | debconf-set-selections
159 ${command_to_install} mysql-server mysql-client python-mysqldb
162 ${command_to_install} mysql-client mysql-server mysql-libs MySQL-python
163 MYSQL_PASSWORD=$(cat /root/.mysql_secret | head -1 | awk -F': ' '{print $2}')
165 mycnf=$(find /etc/ -name my.cnf)
167 service mysql restart
169 if [ ! -z "${MYSQL_PASSWORD}" ]; then
170 mysqladmin -u root -p${MYSQL_PASSWORD} password ${mysql_pass}
172 if [ -z "$(service ${mysql_service} status | grep "running" )" ]; then
173 exit_on_error 1 "Mysql service has failed to start"
176 mysql -uroot -p${mysql_pass} -Bse "drop database if exists keystone"
177 mysql -uroot -p${mysql_pass} -Bse "create database keystone"
178 mysql -uroot -p${mysql_pass} -Bse "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone'"
179 mysql -uroot -p${mysql_pass} -Bse "drop database if exists ceilometer"
180 mysql -uroot -p${mysql_pass} -Bse "create database ceilometer"
181 mysql -uroot -p${mysql_pass} -Bse "GRANT ALL PRIVILEGES ON ceilometer.* TO 'ceilometer'@'localhost' IDENTIFIED BY 'ceilometer'"
182 mysql -uroot -p${mysql_pass} -Bse "flush privileges"
185 install_and_setup_rabbit() {
186 install_packages rabbitmq-server
187 echo "127.0.0.1 $(hostname)" >> /etc/hosts
188 if [[ "$os" == "ubuntu" ]]; then
189 update-rc.d rabbitmq-server defaults
191 systemctl enable rabbitmq-server
193 service rabbitmq-server restart
197 ceilometer_configuration() {
198 cat > /etc/ceilometer/ceilometer.conf << EOF
200 api_paste_config = /etc/ceilometer/api_paste.ini
201 policy_file = /etc/ceilometer/policy.json
204 log_dir = ${ceilometer_log_dir}
205 auth_strategy = keystone
206 rabbit_password = guest
207 rabbit_hosts = 127.0.0.1
210 auth_host = 127.0.0.1
213 admin_tenant_name = ceilometer
214 admin_user = ceilometer
215 admin_password = ceilometer
216 auth_url=http://127.0.0.1:35357
219 connection=mysql://ceilometer:ceilometer@127.0.0.1/ceilometer
224 [ -e /etc/default/ceilometer-polling ] && rm -f /etc/default/ceilometer-polling
225 echo "DAEMON_ARGS=\"--polling-namespaces=central\"" > /etc/default/ceilometer-polling
227 [ -d "${ceilometer_log_dir}" ] || mkdir ${ceilometer_log_dir}
228 chown -R ceilometer:ceilometer ${ceilometer_log_dir}
229 chown -R ceilometer:ceilometer /etc/ceilometer
231 ceilometer-dbsync --config-file /etc/ceilometer/ceilometer.conf
232 if [ "$?" -ne '0' ]; then
233 cat ${ceilometer_log_dir}/ceilometer-dbsync.log
234 exit_on_error 1 "DB sync command has failures"
237 keystone ${auth_string} user-create --name ceilometer --pass ceilometer
238 keystone ${auth_string} tenant-create --name ceilometer
239 keystone ${auth_string} role-create --name=admin
240 keystone ${auth_string} user-role-add --user ceilometer --role admin --tenant ceilometer
241 ceilometer_service=$(keystone ${auth_string} service-create --name=ceilometer\
242 --type=metering --description="ceilometer" | grep id | awk -F '|' '{print $3}' | tr -d ' ')
243 keystone ${auth_string} endpoint-create --region RegionOne --service-id=${ceilometer_service}\
244 --publicurl=http://127.0.0.1:8777/ --internalurl=http://127.0.0.1:8777/ --adminurl=http://127.0.0.1:8777/
247 send_fake_instance_notification() {
248 if [ $os == "centos" ]; then
249 curl -LO https://bootstrap.pypa.io/get-pip.py
253 pip install pika==0.9.8
254 echo '#!/usr/bin/env python
256 connection = pika.BlockingConnection(pika.ConnectionParameters(host="127.0.0.1"))
257 channel = connection.channel()
258 channel.queue_declare(queue="notifications.info")
259 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"}'"'"'
260 channel.basic_publish(exchange="nova", routing_key="notifications.info",
261 properties=pika.BasicProperties(priority=0, delivery_mode=2, headers="", content_encoding="utf-8", content_type="application/json"),
263 print " [x] Message was sent!"
264 connection.close()' > $(pwd)/send.py
265 python $(pwd)/send.py
271 if [ "${1}" -ne '0' ]; then
279 for i in ${ceilometer_packages[@]}; do
280 if [ "${i}" == "${package_to_test}" ]; then
286 echo "Test for package ${package_to_test} will be run with ceilometer-common package"
290 case ${package_to_test} in
291 ceilometer-common|openstack-ceilometer-common)
293 install_packages "${ceilometer_packages[@]}"
294 install_and_setup_rabbit
295 install_and_setup_mysql
296 install_and_setup_keystone
297 ceilometer_configuration
299 for binary in ${ceilometer_binaries[@]}; do
300 if [ ! -f "/usr/bin/${binary}" ]; then
301 exit_on_error 1 "Ceilometer binary ${binary} is missed"
305 for config in ${config_files[@]}; do
306 if [ ! -f "/etc/ceilometer/${config}" ]; then
307 exit_on_error 1 "Ceilometer configuration file ${config} is missed"
311 for service in ${ceilometer_services[@]}; do
312 service ${service} restart
314 if [ -z "$(service ${service} status | grep "running")" ]; then
315 cat /var/log/ceilometer/${service}.log
316 exit_on_error 1 "Service ${service} has failed to start"
320 repsonce=$(curl "http://127.0.0.1:8777" | grep "Authentication required")
321 if [ -z "$repsonce" ]; then
322 exit_on_error 1 "Ceilometer api doesn't work.\n No one process is listening on 8777 port"
326 for Command in ${list_commands[@]}; do
327 ceilometer ${ceilometer_auth_string} ${Command} || true
328 cat $keystone_log_file
329 if [ "$?" -ne '0' ]; then
330 exit_on_error 1 "Command ${Command} has failed"
334 send_fake_instance_notification
336 # Keystone notifications
337 if [ -z "$(ceilometer ${ceilometer_auth_string} meter-list | grep fake)" ]; then
338 exit_on_error 1 "Keystone notifications don't work"
341 # Instance notification
342 resource_id=$(ceilometer ${ceilometer_auth_string} resource-list | grep fake)
343 if [ -z "${resource_id}" ]; then
344 exit_on_error 1 "Notification is not received"
348 #if [ -z "$(ceilometer ${ceilometer_auth_string} event-list | grep fake)" ]; then
349 # exit_on_error 1 "Events wasn't created"
353 ceilometer -dv ${ceilometer_auth_string} alarm-threshold-create --name cpu_high --description 'instance running hot' \
354 --meter-name cpu_util --threshold 70.0 --comparison-operator gt --statistic avg \
355 --period 600 --evaluation-periods 3 --alarm-action 'log://' --query resource_id="${resource_id}"
357 if [ "$?" -ne '0' -a -z "$(ceilometer ${ceilometer_auth_string} alarm-list | grep cpu_high)" ]; then
358 exit_on_error 1 "Alarm creation has failed"
362 ceilometer -dv ${ceilometer_auth_string} sample-create -m fake_sample --meter-type gauge --meter-unit '%' --sample-volume 100 -r "fake"
364 if [ "$?" -ne '0' -a -z "$(ceilometer ${ceilometer_auth_string} sample-list | grep fake_sample)" ]; then
365 exit_on_error 1 "Sample creation has failed"
368 ceilometer-agent-ipmi|openstack-ceilometer-ipmi)
369 # Ceilometer-agent-ipmi is not included in common testing
370 # because it is not used in Fuel now
371 #if [ ! -f "/usr/bin/ceilometer-agent-ipmi" ]; then
372 # exit_on_error 1 "Ceilometer ipmi binary is missed"
376 python -c 'import ceilometer'
377 if [ $? -ne '0' ]; then
378 exit_on_error 1 "Couldn't import module 'ceilometer'"
383 echo "Test not defined. Please create test for package ${package_to_test}"