summaryrefslogtreecommitdiffstats
path: root/tests/lib
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib')
-rw-r--r--tests/lib/inspector30
-rw-r--r--tests/lib/inspectors/congress69
-rw-r--r--tests/lib/inspectors/sample16
-rw-r--r--tests/lib/installer34
-rw-r--r--tests/lib/installers/apex24
-rw-r--r--tests/lib/installers/fuel107
-rw-r--r--tests/lib/installers/local21
7 files changed, 301 insertions, 0 deletions
diff --git a/tests/lib/inspector b/tests/lib/inspector
new file mode 100644
index 00000000..2fb7c409
--- /dev/null
+++ b/tests/lib/inspector
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+INSPECTOR_TYPE=${INSPECTOR_TYPE:-sample}
+
+function is_inspector_supported {
+ local inspector="$1"
+ [[ -f $TOP_DIR/lib/inspectors/$inspector ]]
+}
+
+function is_inspector {
+ local inspector="$1"
+ [[ $inspector == $INSPECTOR_TYPE ]]
+}
+
+function start_inspector {
+ if ! is_inspector_supported $INSPECTOR_TYPE; then
+ die $LINENO"INSPECTOR_TYPE=$INSPECTOR_TYPE is not supported."
+ fi
+
+ source $TOP_DIR/lib/inspectors/$INSPECTOR_TYPE
+ start_inspector_$INSPECTOR_TYPE
+}
+
+function stop_inspector {
+ stop_inspector_$INSPECTOR_TYPE
+}
+
+function cleanup_inspector {
+ cleanup_inspector_$INSPECTOR_TYPE
+}
diff --git a/tests/lib/inspectors/congress b/tests/lib/inspectors/congress
new file mode 100644
index 00000000..04825252
--- /dev/null
+++ b/tests/lib/inspectors/congress
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+function _congress_add_rule {
+ name=$1
+ policy=$2
+ rule=$3
+
+ if ! openstack congress policy rule list $policy | grep -q -e "// Name: $name$" ; then
+ openstack congress policy rule create --name $name $policy "$rule"
+ fi
+}
+
+function _congress_del_rule {
+ name=$1
+ policy=$2
+
+ if openstack congress policy rule list $policy | grep -q -e "^// Name: $name$" ; then
+ openstack congress policy rule delete $policy $name
+ fi
+}
+
+function _congress_add_rules {
+ _congress_add_rule host_down classification \
+ 'host_down(host) :-
+ doctor:events(hostname=host, type="compute.host.down", status="down")'
+
+ _congress_add_rule active_instance_in_host classification \
+ 'active_instance_in_host(vmid, host) :-
+ nova:servers(id=vmid, host_name=host, status="ACTIVE")'
+
+ _congress_add_rule host_force_down classification \
+ 'execute[nova:services.force_down(host, "nova-compute", "True")] :-
+ host_down(host)'
+
+ _congress_add_rule error_vm_states classification \
+ 'execute[nova:servers.reset_state(vmid, "error")] :-
+ host_down(host),
+ active_instance_in_host(vmid, host)'
+}
+
+function start_inspector_congress {
+ nova_api_min_version="2.11"
+ nova_api_version=$(openstack congress datasource list | \
+ grep nova | grep -Po "(?<='api_version': ')[^']*")
+ [[ -z $nova_api_version ]] && nova_api_version="2.0"
+ if [[ "$nova_api_version" < "$nova_api_min_version" ]]; then
+ echo "ERROR: Congress Nova datasource API version < $nova_api_min_version ($nova_api_version)"
+ exit 1
+ fi
+ openstack congress driver list | grep -q " doctor "
+ openstack congress datasource list | grep -q " doctor " || {
+ openstack congress datasource create doctor doctor
+ }
+ _congress_add_rules
+
+}
+
+function stop_inspector_congress {
+ _congress_del_rule host_force_down classification
+ _congress_del_rule error_vm_states classification
+ _congress_del_rule active_instance_in_host classification
+ _congress_del_rule host_down classification
+
+}
+
+function cleanup_inspector_congress {
+ # Noop
+ return
+}
diff --git a/tests/lib/inspectors/sample b/tests/lib/inspectors/sample
new file mode 100644
index 00000000..cd21a008
--- /dev/null
+++ b/tests/lib/inspectors/sample
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+function start_inspector_sample {
+ pgrep -f "python inspector.py" && return 0
+ python inspector.py "$INSPECTOR_PORT" > inspector.log 2>&1 &
+}
+
+function stop_inspector_sample {
+ pgrep -f "python inspector.py" || return 0
+ kill $(pgrep -f "python inspector.py")
+}
+
+function cleanup_inspector_sample {
+ # Noop
+ return
+}
diff --git a/tests/lib/installer b/tests/lib/installer
new file mode 100644
index 00000000..cdde6eff
--- /dev/null
+++ b/tests/lib/installer
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+INSTALLER_TYPE=${INSTALLER_TYPE:-local}
+INSTALLER_IP=${INSTALLER_IP:-none}
+ssh_opts_cpu="$ssh_opts"
+
+function is_installer_supported {
+ local installer="$1"
+ [[ -f $TOP_DIR/lib/installers/$installer ]]
+}
+
+function is_installer {
+ local installer="$1"
+ [[ $installer == $INSTALLER_TYPE ]]
+}
+
+function setup_installer {
+ if ! is_installer_supported $INSTALLER_TYPE; then
+ die $LINENO"INSTALLER_TYPE=$INSTALLER_TYPE is not supported."
+ fi
+
+ source $TOP_DIR/lib/installers/$INSTALLER_TYPE
+
+ if ! is_set INSTALLER_IP; then
+ get_installer_ip
+ fi
+
+ installer_get_ssh_keys
+ installer_apply_patches
+}
+
+function cleanup_installer {
+ cleanup_installer_$INSTALLER_TYPE
+}
diff --git a/tests/lib/installers/apex b/tests/lib/installers/apex
new file mode 100644
index 00000000..54b3dce2
--- /dev/null
+++ b/tests/lib/installers/apex
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+function get_installer_ip {
+ local instack_mac=$(sudo virsh domiflist instack | awk '/default/{print $5}')
+ INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk '{print $1}')
+ die_if_not_set $LINENO $INSTALLER_IP "No installer IP"
+}
+
+function installer_get_ssh_keys {
+ sudo scp $ssh_opts root@"$INSTALLER_IP":/home/stack/.ssh/id_rsa instack_key
+ sudo chown $(whoami):$(whoami) instack_key
+ chmod 400 instack_key
+ ssh_opts_cpu+=" -i instack_key"
+}
+
+function installer_apply_patches {
+ # Noop
+ return
+}
+
+function cleanup_installer_apex {
+ # Noop
+ return
+}
diff --git a/tests/lib/installers/fuel b/tests/lib/installers/fuel
new file mode 100644
index 00000000..34a86922
--- /dev/null
+++ b/tests/lib/installers/fuel
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+function get_installer_ip {
+ local instack_mac=$(sudo virsh domiflist fuel-opnfv | awk '/pxebr/{print $5}')
+ INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk '{print $1}')
+ die_if_not_set $LINENO $INSTALLER_IP "No installer IP"
+}
+
+function installer_get_ssh_keys {
+ sshpass -p r00tme scp $ssh_opts root@${INSTALLER_IP}:.ssh/id_rsa instack_key
+ sudo chown $(whoami):$(whoami) instack_key
+ chmod 400 instack_key
+ ssh_opts_cpu+=" -i instack_key"
+}
+
+function installer_apply_patches {
+ cat > set_conf.sh << 'END_TXT'
+#!/bin/bash
+if [ -e /etc/ceilometer/event_pipeline.yaml ]; then
+ if ! grep -q '^ *- notifier://?topic=alarm.all$' /etc/ceilometer/event_pipeline.yaml; then
+ sed -i 's|- notifier://|- notifier://?topic=alarm.all|' /etc/ceilometer/event_pipeline.yaml
+ echo "modify the ceilometer config"
+ service ceilometer-agent-notification restart
+ fi
+else
+ echo "ceilometer event_pipeline.yaml file does not exist"
+ exit 1
+fi
+if [ -e /etc/nova/nova.conf ]; then
+ if ! grep -q '^notification_driver=messaging$' /etc/nova/nova.conf; then
+ sed -i -r 's/notification_driver=/notification_driver=messaging/g' /etc/nova/nova.conf
+ echo "modify nova config"
+ service nova-api restart
+ fi
+else
+ echo "nova.conf file does not exist"
+ exit 1
+fi
+exit 0
+END_TXT
+
+ chmod +x set_conf.sh
+ CONTROLLER_IP=$(sshpass -p r00tme ssh 2>/dev/null $ssh_opts root@${INSTALLER_IP} \
+ "fuel node | grep controller | cut -d '|' -f 5|xargs")
+ for node in $CONTROLLER_IP;do
+ scp $ssh_opts_cpu set_conf.sh "root@$node:"
+ ssh $ssh_opts_cpu "root@$node" './set_conf.sh > set_conf.log 2>&1 &'
+ sleep 1
+ scp $ssh_opts_cpu "root@$node:set_conf.log" set_conf_$node.log
+ done
+
+ if grep -q "modify the ceilometer config" set_conf_*.log ; then
+ NEED_TO_RESTORE_CEILOMETER=true
+ fi
+ if grep -q "modify nova config" set_conf_*.log ; then
+ NEED_TO_RESTORE_NOVA=true
+ fi
+
+ echo "waiting service restart..."
+ sleep 60
+
+}
+
+function cleanup_installer_fuel {
+ if ! ($NEED_TO_RESTORE_CEILOMETER || $NEED_TO_RESTORE_NOVA) ; then
+ echo "Don't need to restore config"
+ exit 0
+ fi
+
+ echo "restore the configuration..."
+ cat > restore_conf.sh << 'END_TXT'
+#!/bin/bash
+if @NEED_TO_RESTORE_CEILOMETER@ ; then
+ if [ -e /etc/ceilometer/event_pipeline.yaml ]; then
+ if grep -q '^ *- notifier://?topic=alarm.all$' /etc/ceilometer/event_pipeline.yaml; then
+ sed -i 's|- notifier://?topic=alarm.all|- notifier://|' /etc/ceilometer/event_pipeline.yaml
+ service ceilometer-agent-notification restart
+ fi
+ else
+ echo "ceilometer event_pipeline.yaml file does not exist"
+ exit 1
+ fi
+fi
+if @NEED_TO_RESTORE_NOVA@ ; then
+ if [ -e /etc/nova/nova.conf ]; then
+ if grep -q '^notification_driver=messaging$' /etc/nova/nova.conf; then
+ sed -i -r 's/notification_driver=messaging/notification_driver=/g' /etc/nova/nova.conf
+ service nova-api restart
+ fi
+ else
+ echo "nova.conf file does not exist"
+ exit 1
+ fi
+fi
+exit 0
+END_TXT
+ sed -i -e "s/@NEED_TO_RESTORE_CEILOMETER@/$NEED_TO_RESTORE_CEILOMETER/" restore_conf.sh
+ sed -i -e "s/@NEED_TO_RESTORE_NOVA@/$NEED_TO_RESTORE_NOVA/" restore_conf.sh
+ chmod +x restore_conf.sh
+ for node in $CONTROLLER_IP;do
+ scp $ssh_opts_cpu restore_conf.sh "root@$node:"
+ ssh $ssh_opts_cpu "root@$node" './restore_conf.sh > restore_conf.log 2>&1 &'
+ done
+
+ echo "waiting service restart..."
+ sleep 60
+}
diff --git a/tests/lib/installers/local b/tests/lib/installers/local
new file mode 100644
index 00000000..e7aed14f
--- /dev/null
+++ b/tests/lib/installers/local
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+function get_installer_ip {
+ # Noop
+ return
+}
+
+function installer_get_ssh_keys {
+ echo "INSTALLER_TYPE set to 'local'. Assuming SSH keys already exchanged with $COMPUTE_HOST"
+ return
+}
+
+function installer_apply_patches {
+ # Noop
+ return
+}
+
+function cleanup_installer_local {
+ # Noop
+ return
+}