Fixed firewalld-related code in test script
[openstack-build/ceilometer-build.git] / tests / runtests.sh
index f731f1c091f3b460d10bddaa14416a98f5dbd542..163281e1223f5c76c3e6e3f8b76d7679f80d082c 100755 (executable)
@@ -8,7 +8,7 @@ RES=0
 mysql_pass="admin"
 token=$(openssl rand -hex 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/"
-ceilometer_auth_string="--os-username ceilometer --os-password ceilometer --os-tenant-name ceilometer --os-auth-url http://127.0.0.1:35357/v2.0"
+ceilometer_auth_string="--debug --os-username ceilometer --os-password ceilometer --os-tenant-name ceilometer --os-auth-url http://127.0.0.1:35357"
 ceilometer_service=
 
 keystone_log_file="/var/log/keystone/keystone.log"
@@ -18,15 +18,15 @@ mongodb_log="/var/log/mongodb/mongodb.log"
 if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then
    os="ubuntu"
    packages_list="python-pip curl"
+   export DEBIAN_FRONTEND=noninteractive
    command_to_install="apt-get install -y --force-yes"
    keystone_package="keystone"
    keystone_service="keystone"
    mysql_service="mysql"
    mongodb_service="mongodb"
-   ceilometer_packages_and_services=(
+   ceilometer_packages=(
       ceilometer-agent-central
       ceilometer-agent-compute
-      ceilometer-agent-ipmi
       ceilometer-collector
       ceilometer-agent-notification
       ceilometer-polling
@@ -34,17 +34,41 @@ if [[ `cat /etc/*-release | head -n 1 | awk '{print $1}'` =~ Ubuntu ]]; then
       ceilometer-alarm-notifier
       ceilometer-alarm-evaluator
    )
+
+   ceilometer_services=("${ceilometer_packages[@]}")
+
+   ceilometer_binaries=(
+     ceilometer-collector
+     ceilometer-agent-notification
+     ceilometer-polling
+     ceilometer-api
+     ceilometer-alarm-notifier
+     ceilometer-alarm-evaluator
+     ceilometer-dbsync
+     ceilometer-expirer
+     ceilometer-rootwrap
+     ceilometer-send-sample
+   )
+   config_files=(
+     api_paste.ini
+     ceilometer.conf
+     event_definitions.yaml
+     event_pipeline.yaml
+     pipeline.yaml
+     policy.json
+   )
 else
-   echo "Disable tests for Centos"
-   exit 0
+   setenforce 0 || :
+   service firewalld stop || :
    os="centos"
    packages_list="python-pip curl"
    command_to_install="yum install -y"
    keystone_package="openstack-keystone"
    keystone_service="openstack-keystone"
-   mysql_service="mysqld"
+   mysql_service="mysql"
    mongodb_service="mongod"
-   ceilometer_packages_and_services=(
+   ceilometer_packages=(
+      python-ceilometerclient
       openstack-ceilometer-central
       openstack-ceilometer-compute
       openstack-ceilometer-collector
@@ -53,30 +77,37 @@ else
       openstack-ceilometer-api
       openstack-ceilometer-alarm
    )
+   ceilometer_services=(
+      openstack-ceilometer-central
+      openstack-ceilometer-compute
+      openstack-ceilometer-collector
+      openstack-ceilometer-notification
+      openstack-ceilometer-polling
+      openstack-ceilometer-api
+      openstack-ceilometer-alarm-notifier
+      openstack-ceilometer-alarm-evaluator
+   )
+   ceilometer_binaries=(
+     ceilometer-agent-notification
+     ceilometer-alarm-evaluator
+     ceilometer-alarm-notifier
+     ceilometer-api
+     ceilometer-collector
+     ceilometer-dbsync
+     ceilometer-expirer
+     ceilometer-polling
+     ceilometer-send-sample
+   )
+   config_files=(
+     api_paste.ini
+     ceilometer.conf
+     event_definitions.yaml
+     event_pipeline.yaml
+     pipeline.yaml
+     policy.json
+   )
 fi
 
-ceilometer_binaries=(
-   ceilometer-collector
-   ceilometer-agent-notification
-   ceilometer-polling
-   ceilometer-api
-   ceilometer-alarm-notifier
-   ceilometer-alarm-evaluator
-   ceilometer-dbsync
-   ceilometer-expirer
-   ceilometer-rootwrap
-   ceilometer-send-sample
-)
-
-config_files=(
-   api_paste.ini
-   ceilometer.conf
-   event_definitions.yaml
-   pipeline.yaml
-   policy.json
-   rootwrap.conf
-)
-
 list_commands=(
    alarm-list
    event-list
@@ -106,7 +137,7 @@ rabbit_hosts = 127.0.0.1
 notification_driver = messaging
 notification_topics = notifications
 [database]
-connection=mysql://keystone:keystone@localhost/keystone
+connection=mysql://keystone:keystone@127.0.0.1/keystone
 [token]
 provider=keystone.token.providers.uuid.Provider
 EOF
@@ -114,50 +145,52 @@ EOF
    touch ${keystone_log_file}
    chown -R keystone:keystone /var/log/keystone/
    chown -R keystone:keystone /etc/keystone
-
    keystone-manage db_sync
    service ${keystone_service} restart
    sleep 5
-
-   if [ -z "$(curl -s http://localhost:5000/ | grep '^{"versions":')" ]; then
-      cat ${keystone_log_file}
+   if [ -z "$(curl -s http://127.0.0.1:5000/ | grep '^{"versions":')" ]; then
       exit_on_error 1 "Failed to get to keystone API.\nTests failed because of keystone problem"
    fi
 }
 
 install_and_setup_mysql() {
-   echo "mysql-server mysql-server/root_password select ${mysql_pass}" | debconf-set-selections
-   echo "mysql-server mysql-server/root_password_again select ${mysql_pass}" | debconf-set-selections
-   ${command_to_install} mysql-server-5.6 mysql-client-core-5.6 python-mysqldb
-   if [ -f "/etc/mysql/conf.d/wsrep.cnf" ]; then
-     rm -f /etc/mysql/conf.d/wsrep.cnf
+   if [[ "$os" == "ubuntu" ]]; then
+     echo "mysql-server mysql-server/root_password select ${mysql_pass}" | debconf-set-selections
+     echo "mysql-server mysql-server/root_password_again select ${mysql_pass}" | debconf-set-selections
+     ${command_to_install} mysql-server mysql-client python-mysqldb
+     MYSQL_PASSWORD=''
+   else
+     ${command_to_install} mysql-client mysql-server mysql-libs MySQL-python
+     MYSQL_PASSWORD=$(cat /root/.mysql_secret | head -1 | awk -F': ' '{print $2}')
    fi
-
-   service ${mysql_service} restart
-   sleep 5
-
-   if [ -z "$(service ${mysql_service} status | grep "start/running" )" ]; then
-      exit_on_error 1 "Mysql service has failed to start"
+   service mysql restart
+   sleep 10
+   if [ ! -z "${MYSQL_PASSWORD}" ]; then
+       mysqladmin -u root -p${MYSQL_PASSWORD} password ${mysql_pass}
+   fi
+   if [ -z "$(service ${mysql_service} status | grep "running" )" ]; then
+     exit_on_error 1 "Mysql service has failed to start"
    fi
 
    mysql -uroot -p${mysql_pass} -Bse "drop database if exists keystone"
    mysql -uroot -p${mysql_pass} -Bse "create database keystone"
    mysql -uroot -p${mysql_pass} -Bse "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone'"
+   mysql -uroot -p${mysql_pass} -Bse "drop database if exists ceilometer"
+   mysql -uroot -p${mysql_pass} -Bse "create database ceilometer"
+   mysql -uroot -p${mysql_pass} -Bse "GRANT ALL PRIVILEGES ON ceilometer.* TO 'ceilometer'@'localhost' IDENTIFIED BY 'ceilometer'"
    mysql -uroot -p${mysql_pass} -Bse "flush privileges"
 }
 
 install_and_setup_rabbit() {
    install_packages rabbitmq-server
-   echo "127.0.10.1 $(hostname)" >> /etc/hosts
+   echo "127.0.0.1 $(hostname)" >> /etc/hosts
+   if [[ "$os" == "ubuntu" ]]; then
+       update-rc.d rabbitmq-server defaults
+   else
+       systemctl enable rabbitmq-server
+   fi
    service rabbitmq-server restart
    sleep 5
-
-   if [ ! -z "$(service rabbitmq-server status | grep "Error: unable to connect to node")" ]; then
-      cat /var/log/rabbitmq/startup_log
-      cat /var/log/rabbitmq/startup_err
-
-      exit_on_error 1 "DB sync command has failures"
-   fi
 }
 
 ceilometer_configuration() {
@@ -168,7 +201,6 @@ policy_file = /etc/ceilometer/policy.json
 debug = True
 verbose = True
 log_dir = ${ceilometer_log_dir}
-rpc_backend = rabbit
 auth_strategy = keystone
 rabbit_password = guest
 rabbit_hosts = 127.0.0.1
@@ -180,10 +212,10 @@ auth_protocol = http
 admin_tenant_name = ceilometer
 admin_user = ceilometer
 admin_password = ceilometer
-auth_url=http://127.0.0.1:35357/v2.0
+auth_url=http://127.0.0.1:35357
 
 [database]
-connection=mongodb://127.0.0.1/ceilometer
+connection=mysql://ceilometer:ceilometer@127.0.0.1/ceilometer
 
 [notification]
 store_events = True
@@ -211,54 +243,20 @@ EOF
  --publicurl=http://127.0.0.1:8777/ --internalurl=http://127.0.0.1:8777/ --adminurl=http://127.0.0.1:8777/
 }
 
-install_and_setup_mongo() {
-   install_packages "mongodb mongodb-clients"
-   cat > /etc/mongodb.conf << EOF
-logappend=true
-bind_ip = 127.0.0.1
-port = 27017
-dbpath=/var/lib/mongo
-pidfilepath = /var/run/mongodb/mongodb.pid
-journal = true
-logpath = ${mongodb_log}
-setParameter = logLevel=1
-EOF
-   [ -d "/var/log/mongo" ] || mkdir /var/log/mongo
-   [ -d "/var/lib/mongo" ] || mkdir /var/lib/mongo
-   [ -d "/var/run/mongodb" ] || mkdir /var/run/mongodb
-   chown -R mongodb:mongodb /var/log/mongo /var/lib/mongo /var/run/mongodb /etc/mongodb.conf
-
-   service ${mongodb_service} restart
-   sleep 5
-
-   if [ -z "$(service ${mongodb_service} status | grep "start/running")" ]; then
-      cat ${mongodb_log}
-      exit_on_error 1 "Mongo service has failed to start"
-   fi
-
-   try=0
-   while [ ${try} -le '5' ]; do
-      mongo --host 127.0.0.1 --eval "db.getSiblingDB('admin')"
-      if [ "$?" -ne '0' ]; then
-         try=$((try + 1))
-         sleep 5
-      else
-         break
-      fi
-   done
-   if [ "${try}" -ge '5' ]; then
-      exit_on_error 1 "Mongo shell is not available. Mongo work is broken"
+send_fake_instance_notification() {
+   if [ $os == "centos" ]; then
+     curl -LO https://bootstrap.pypa.io/get-pip.py
+     python get-pip.py
    fi
-}
 
-send_fake_instance_notification() {
    pip install pika==0.9.8
    echo '#!/usr/bin/env python
 import pika
+import uuid
 connection = pika.BlockingConnection(pika.ConnectionParameters(host="127.0.0.1"))
 channel = connection.channel()
 channel.queue_declare(queue="notifications.info")
-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"}'"'"'
+test='"'"'{"event_type": "compute.instance.create", "payload": {"instance_id": "fake", "memory_mb": 512, "disk_gb": 20, "root_gb": 20, "ephemeral_gb": 0, "vcpus": 1, "instance_type_id": 1, "state": "fake"}, "publisher_id": "fake", "priority":"INFO", "message_id": "%s"}'"'"' % uuid.uuid4()
 channel.basic_publish(exchange="nova", routing_key="notifications.info",
                       properties=pika.BasicProperties(priority=0, delivery_mode=2, headers="", content_encoding="utf-8", content_type="application/json"),
                       body=test)
@@ -278,7 +276,7 @@ exit_on_error() {
 }
 
 found=false
-for i in ${ceilometer_packages_and_services[@]}; do
+for i in ${ceilometer_packages[@]}; do
    if [ "${i}" == "${package_to_test}" ]; then
       found=true
    fi
@@ -292,11 +290,10 @@ fi
 case ${package_to_test} in
    ceilometer-common|openstack-ceilometer-common)
       prepare_vm
-      install_packages "${ceilometer_packages_and_services[@]}"
+      install_packages "${ceilometer_packages[@]}"
       install_and_setup_rabbit
       install_and_setup_mysql
       install_and_setup_keystone
-      install_and_setup_mongo
       ceilometer_configuration
 
       for binary in ${ceilometer_binaries[@]}; do
@@ -311,41 +308,39 @@ case ${package_to_test} in
          fi
       done
 
-      for service in ${ceilometer_packages_and_services[@]}; do
+      for service in ${ceilometer_services[@]}; do
          service ${service} restart
          sleep 5
-         if [ -z "$(service ${service} status | grep "start/running")" ]; then
+         if [ -z "$(service ${service} status | grep "running")" ]; then
             cat /var/log/ceilometer/${service}.log
             exit_on_error 1 "Service ${service} has failed to start"
          fi
       done
 
-      repsonce=$(curl "http://localhost:8777" | grep "Authentication required")
+      repsonce=$(curl "http://127.0.0.1:8777" | grep "Authentication required")
       if [ -z "$repsonce" ]; then
          exit_on_error 1 "Ceilometer api doesn't work.\n No one process is listening on 8777 port"
       fi
 
+
       for Command in ${list_commands[@]}; do
-         ceilometer ${ceilometer_auth_string} ${Command}
+         ceilometer ${ceilometer_auth_string} ${Command} || true
+         cat $keystone_log_file
          if [ "$?" -ne '0' ]; then
              exit_on_error 1 "Command ${Command} has failed"
          fi
       done
 
-
-      # Ceilometer functionality has changed.
-      # Remove after test rework.
-      exit 0
+      send_fake_instance_notification
 
       # Keystone notifications
-      if [ -z "$(ceilometer ${ceilometer_auth_string} meter-list | grep identity)" ]; then
+      if [ -z "$(ceilometer ${ceilometer_auth_string} meter-list | grep fake)" ]; then
          exit_on_error 1 "Keystone notifications don't work"
       fi
 
       # Instance notification
-      send_fake_instance_notification
       resource_id=$(ceilometer ${ceilometer_auth_string} resource-list | grep fake)
-      if [ -z ${resource_id} ]; then
+      if [ -z "${resource_id}" ]; then
          exit_on_error 1 "Notification is not received"
       fi
 
@@ -373,24 +368,15 @@ case ${package_to_test} in
    ceilometer-agent-ipmi|openstack-ceilometer-ipmi)
       # Ceilometer-agent-ipmi is not included in common testing
       # because it is not used in Fuel now
-
-      # Binary does not exist anymore. ceilometer-polling is
-      # responsible for service start.
-      # Remove after test rework.
-      exit 0
-
-      if [ ! -f "/usr/bin/ceilometer-agent-ipmi" ]; then
-         exit_on_error 1 "Ceilometer ipmi binary is missed"
-      fi
+      #if [ ! -f "/usr/bin/ceilometer-agent-ipmi" ]; then
+      #   exit_on_error 1 "Ceilometer ipmi binary is missed"
+      #fi
    ;;
    python-ceilometer)
       python -c 'import ceilometer'
       if [ $? -ne '0' ]; then
          exit_on_error 1 "Couldn't import module 'ceilometer'"
       fi
-      if [ -z "$(which ceilometer)" ]; then
-         exit_on_error 1 "Can't find command 'ceilometer'"
-      fi
    ;;
    *)
       if ! ${found}; then