aboutsummaryrefslogtreecommitdiffstats
path: root/docker
diff options
context:
space:
mode:
authorjose.lausuch <jose.lausuch@ericsson.com>2015-09-30 15:29:04 +0200
committerjose.lausuch <jose.lausuch@ericsson.com>2015-10-07 10:07:22 +0200
commit71d85bca9549348b0c2f486bac58923f299e5a88 (patch)
tree51ba663c21cf3facfe98625839993379c7b0f08d /docker
parentec6b78ebea4aee67f299d31af99b9e0e2ea4e9a5 (diff)
Dockerfile for Functest
Includes also: - script to trigger Functest automatically within the container - common requirements file to install python modules - added new parameters in the config_functest.yaml - other small adjustements JIRA: FUNCTEST-29 Change-Id: I230631e43e5f7e14938b35903ecec1b17db0f88a Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
Diffstat (limited to 'docker')
-rw-r--r--docker/Dockerfile50
-rw-r--r--docker/requirements.pip9
-rw-r--r--docker/start.sh142
3 files changed, 201 insertions, 0 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 00000000..49d9edfe
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,50 @@
+########################################
+# Docker container for FUNCTEST
+########################################
+# Purpose: run all the tests against the POD
+# from a pre-installed docker image
+#
+# Maintained by Jose Lausuch
+# Build:
+# $ docker build -t opnfv/functest:tag .
+#
+# Execution:
+# $ docker run -t -i -e "INSTALLER_TYPE=fuel/foreman" \
+# -e "INSTALLER_IP=10.20.0.2/172.30.10.73" opnfv/functest
+#
+
+
+FROM ubuntu:14.04
+MAINTAINER Jose Lausuch <jose.lausuch@ericsson.com>
+LABEL version="0.1" description="OPNFV Functest Docker container"
+
+ENV repos_dir /home/opnfv/repos
+
+# Packaged dependencies
+RUN apt-get update && apt-get install -y \
+ssh \
+sshpass \
+git \
+gcc \
+wget \
+python-dev \
+python-pip \
+postgresql \
+libxslt-dev \
+libssl-dev \
+libgmp3-dev \
+libxml2-dev \
+libffi-dev \
+crudini \
+--no-install-recommends
+
+
+RUN mkdir -p ${repos_dir}
+
+RUN git config --global http.sslVerify false
+RUN git clone https://gerrit.opnfv.org/gerrit/functest ${repos_dir}/functest
+RUN git clone https://gerrit.opnfv.org/gerrit/releng ${repos_dir}/releng
+RUN git clone https://github.com/openstack/rally.git ${repos_dir}/rally
+
+RUN pip install -r ${repos_dir}/functest/docker/requirements.pip
+RUN chmod 744 ${repos_dir}/functest/docker/start.sh \ No newline at end of file
diff --git a/docker/requirements.pip b/docker/requirements.pip
new file mode 100644
index 00000000..22c8199d
--- /dev/null
+++ b/docker/requirements.pip
@@ -0,0 +1,9 @@
+pyyaml==3.10
+gitpython==1.0.1
+python-neutronclient==2.6.0
+python-novaclient==2.28.1
+python-glanceclient==1.1.0
+python-keystoneclient==1.6.0
+cloudify==3.2.1
+virtualenv==1.11.4
+pexpect==4.0 \ No newline at end of file
diff --git a/docker/start.sh b/docker/start.sh
new file mode 100644
index 00000000..bd2308ca
--- /dev/null
+++ b/docker/start.sh
@@ -0,0 +1,142 @@
+#!/bin/bash
+
+#
+# Author: Jose Lausuch (jose.lausuch@ericsson.com)
+#
+# Installs the Functest framework within the Docker container
+# and run the tests automatically
+#
+
+
+config_file=$(find / -name config_functest.yaml)
+
+REPOS_DIR=$(cat $config_file | grep -w dir_repos | awk 'END {print $NF}')
+FUNCTEST_REPO_DIR=$(cat $config_file | grep -w dir_repo_functest | awk 'END {print $NF}')
+RALLY_REPO_DIR=$(cat $config_file | grep -w dir_repo_rally | awk 'END {print $NF}')
+RELENG_REPO_DIR=$(cat $config_file | grep -w dir_repo_releng | awk 'END {print $NF}')
+
+FUNCTEST_DIR=$(cat $config_file | grep -w dir_functest | awk 'END {print $NF}')
+FUNCTEST_RESULTS_DIR=$(cat $config_file | grep -w dir_results | awk 'END {print $NF}')
+FUNCTEST_CONF_DIR=$(cat $config_file | grep -w dir_functest_conf | awk 'END {print $NF}')
+FUNCTEST_DATA_DIR=$(cat $config_file | grep -w dir_functest_data | awk 'END {print $NF}')
+RALLY_VENV=$(cat $config_file | grep -w dir_rally_inst | awk 'END {print $NF}')
+RALLY_COMMIT=$(cat $config_file | grep -w rally_stable_commit | awk 'END {print $NF}')
+
+
+echo "REPOS_DIR=${REPOS_DIR}"
+echo "FUNCTEST_REPO_DIR=${FUNCTEST_REPO_DIR}"
+echo "RALLY_REPO_DIR=${RALLY_REPO_DIR}"
+echo "RELENG_REPO_DIR=${RELENG_REPO_DIR}"
+echo "FUNCTEST_DIR=${FUNCTEST_DIR}"
+echo "FUNCTEST_RESULTS_DIR=${FUNCTEST_RESULTS_DIR}"
+echo "FUNCTEST_CONF_DIR=${FUNCTEST_CONF_DIR}"
+echo "FUNCTEST_DATA_DIR=${FUNCTEST_DATA_DIR}"
+echo "RALLY_VENV=${RALLY_VENV}"
+echo "RALLY_COMMIT=${RALLY_COMMIT}"
+
+
+info () {
+ logger -s -t "start.info" "$*"
+}
+
+
+error () {
+ logger -s -t "start.error" "$*"
+ exit 1
+}
+
+# Check if environment variables are set
+if [ -z ${INSTALLER_TYPE} ]; then
+ error "Environment variable 'INSTALLER_TYPE' is not defined."
+elif [ "${INSTALLER_TYPE}" != "fuel" ] && [ "${INSTALLER_TYPE}" != "foreman" ]; then
+ error "Invalid environment variable INSTALLER_TYPE=${INSTALLER_TYPE}"
+fi
+
+if [ -z ${INSTALLER_IP} ]; then
+ error "Environment variable 'INSTALLER_IP' is not defined."
+fi
+
+
+# Update repos
+cd ${FUNCTEST_REPO_DIR}
+git pull
+cd ${RELENG_REPO_DIR}
+git pull
+cd ${RALLY_REPO_DIR}
+git reset --hard ${RALLY_COMMIT}
+
+
+# Create directories
+mkdir -p ${FUNCTEST_CONF_DIR}
+mkdir -p ${FUNCTEST_DATA_DIR}
+mkdir -p ${FUNCTEST_RESULTS_DIR}/ODL
+
+# Detect type of installer
+# NOTE: this is tricky, since the IPs will have to be the same ALWAYS
+
+
+# Create Openstack credentials file
+${REPOS_DIR}/releng/utils/fetch_os_creds.sh -d ${FUNCTEST_CONF_DIR}/openstack.creds \
+ -i ${INSTALLER_TYPE} -a ${INSTALLER_IP}
+retval=$?
+if [ $retval != 0 ]; then
+ echo "Cannot retrieve credentials file from installation. Check logs."
+ exit $retval
+fi
+
+
+# Source credentials
+source ${FUNCTEST_CONF_DIR}/openstack.creds
+
+
+# Prepare Functest Environment
+echo "Functest: prepare Functest environment"
+python ${FUNCTEST_REPO_DIR}/testcases/config_functest.py --debug ${FUNCTEST_REPO_DIR}/ start
+retval=$?
+if [ $retval != 0 ]; then
+ echo "Error when configuring Functest environment"
+ exit $retval
+fi
+
+# vPing
+echo "Functest: run vPing"
+python ${FUNCTEST_REPO_DIR}/testcases/vPing/CI/libraries/vPing.py --debug ${FUNCTEST_REPO_DIR}/ -r
+
+# ODL
+echo "Functest: run ODL suite"
+
+if [ $INSTALLER_TYPE == "fuel" ]; then
+ odl_ip=$(keystone catalog --service network | grep publicURL | cut -f3 -d"/" | cut -f1 -d":")
+ neutron_ip=$(keystone catalog --service identity | grep publicURL | cut -f3 -d"/" | cut -f1 -d":")
+ usr_name=$(env | grep OS | grep OS_USERNAME | cut -f2 -d'=')
+ pass=$(env | grep OS | grep OS_PASSWORD | cut -f2 -d'=')
+ odl_port=8181
+ ODL_PORT=$odl_port ODL_IP=$odl_ip NEUTRON_IP=$neutron_ip USR_NAME=$usr_name PASS=$pass \
+ ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/start_tests.sh
+elif [ $INSTALLER_TYPE == "foreman" ]; then
+ #odl_port=8081
+ ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/start_tests.sh
+else
+ echo "INSTALLER_TYPE not valid."
+ exit 1
+fi
+
+# rally
+echo "Functest: run Functest Rally Bench suites"
+python ${FUNCTEST_REPO_DIR}/testcases/VIM/OpenStack/CI/libraries/run_rally.py --debug ${FUNCTEST_REPO_DIR}/ all
+
+# tempest
+echo "Functest: run Tempest suite"
+rally verify start smoke
+rally verify list
+
+# collect results
+echo "Functest: copy results and clean Functest environment"
+
+# save ODL results
+cp -Rf ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/logs ${FUNCTEST_RESULTS_DIR}/ODL
+
+# save tempest.conf for further troubleshooting
+cp $RALLY_VENV/tempest/for-deployment-*/tempest.conf ${FUNCTEST_CONF_DIR}
+
+