summaryrefslogtreecommitdiffstats
path: root/tests/ci/yardstick-verify
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ci/yardstick-verify')
-rwxr-xr-xtests/ci/yardstick-verify369
1 files changed, 369 insertions, 0 deletions
diff --git a/tests/ci/yardstick-verify b/tests/ci/yardstick-verify
new file mode 100755
index 000000000..c83193574
--- /dev/null
+++ b/tests/ci/yardstick-verify
@@ -0,0 +1,369 @@
+#!/bin/bash
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+#
+# Set up the environment and run yardstick test suites.
+#
+# Example invocation: yardstick-verify -r 10.4.4.4 suite1.yaml suite2.yaml
+#
+# Openstack credentials must be set and the script must be run from its
+# original location in the yardstick repo.
+#
+# This script is intended to be used by the CI pipeline but it may also
+# be invoked manually.
+#
+
+SCRIPT=$0
+SCRIPT_ARGS=$@
+
+usage()
+{
+ cat << EOF
+usage: $0 options [TEST_SUITE ...]
+
+If no test suites are given ping.yaml is run.
+
+OPTIONS:
+ -h Show this message
+ -r Http target (example: -r 213.77.62.197/results)
+ -i Influxdb target (example: -i 127.0.0.1:8086)
+
+ Default target is dump to file ($DISPATCHER_FILE_NAME)
+
+EOF
+}
+
+DISPATCHER_TYPE=file
+DISPATCHER_FILE_NAME="/tmp/yardstick.out"
+DISPATCHER_HTTP_TARGET=
+DISPATCHER_INFLUXDB_TARGET=
+
+while getopts "r:i:h" OPTION; do
+ case $OPTION in
+ h)
+ usage
+ exit 0
+ ;;
+ r)
+ DISPATCHER_TYPE=http
+ DISPATCHER_HTTP_TARGET=http://${OPTARG}
+ DISPATCHER_FILE_NAME=
+ ;;
+ i)
+ DISPATCHER_TYPE=influxdb
+ DISPATCHER_INFLUXDB_TARGET=http://${OPTARG}
+ DISPATCHER_FILE_NAME=
+ ;;
+ *)
+ echo "${OPTION} is not a valid argument"
+ exit 1
+ ;;
+ esac
+done
+
+shift $[OPTIND - 1]
+TEST_SUITES=$@
+
+cleanup()
+{
+ echo
+ echo "========== Cleanup =========="
+
+ if ! glance image-list; then
+ return
+ fi
+
+ for image in $(glance image-list | grep -e cirros-0.3.3 -e yardstick-trusty-server | awk '{print $2}'); do
+ echo "Deleting image $image..."
+ glance image-delete $image || true
+ done
+
+ nova flavor-delete yardstick-flavor &> /dev/null || true
+}
+
+exitcode=""
+
+error_exit()
+{
+ local rc=$?
+
+ if [ -z "$exitcode" ]; then
+ # In case of recursive traps (!?)
+ exitcode=$rc
+ fi
+
+ cleanup
+
+ echo "Exiting with RC=$exitcode"
+
+ exit $exitcode
+}
+
+set -o errexit
+set -o pipefail
+
+install_yardstick()
+{
+ echo
+ echo "========== Installing yardstick =========="
+
+ # uninstall previous version
+ pip uninstall -y yardstick || true
+
+ # Install yardstick
+ pip install .
+}
+
+build_yardstick_image()
+{
+ echo
+ echo "========== Build yardstick cloud image =========="
+
+ local cmd="sudo $(which yardstick-img-modify) $(pwd)/tools/ubuntu-server-cloudimg-modify.sh"
+
+ # Build the image. Retry once if the build fails.
+ $cmd || $cmd
+
+ if [ ! -f $QCOW_IMAGE ]; then
+ echo "Failed building QCOW image"
+ exit 1
+ fi
+}
+
+create_nova_flavor()
+{
+ if ! nova flavor-list | grep -q yardstick-flavor; then
+ echo
+ echo "========== Create nova flavor =========="
+ # Create the nova flavor used by some sample test cases
+ nova flavor-create yardstick-flavor 100 512 3 1
+ # DPDK-enabled OVS requires guest memory to be backed by large pages
+ if [[ "$DEPLOY_SCENARIO" == *"-ovs-"* ]]; then
+ nova flavor-key yardstick-flavor set hw:mem_page_size=large
+ fi
+ fi
+}
+
+load_cirros_image()
+{
+ echo
+ echo "========== Loading cirros cloud image =========="
+
+ local image_file=/home/opnfv/images/cirros-0.3.3-x86_64-disk.img
+
+ output=$(glance image-create \
+ --name cirros-0.3.3 \
+ --disk-format qcow2 \
+ --container-format bare \
+ --file $image_file)
+ echo "$output"
+
+ CIRROS_IMAGE_ID=$(echo "$output" | grep " id " | awk '{print $(NF-1)}')
+ if [ -z "$CIRROS_IMAGE_ID" ]; then
+ echo 'Failed uploading cirros image to cloud'.
+ exit 1
+ fi
+
+ echo "Cirros image id: $CIRROS_IMAGE_ID"
+}
+
+load_yardstick_image()
+{
+ echo
+ echo "========== Loading yardstick cloud image =========="
+
+ output=$(glance --os-image-api-version 1 image-create \
+ --name yardstick-trusty-server \
+ --is-public true --disk-format qcow2 \
+ --container-format bare \
+ --file $QCOW_IMAGE)
+ echo "$output"
+
+ GLANCE_IMAGE_ID=$(echo "$output" | grep " id " | awk '{print $(NF-1)}')
+
+ if [ -z "$GLANCE_IMAGE_ID" ]; then
+ echo 'Failed uploading image to cloud'.
+ exit 1
+ fi
+
+ sudo rm -f $QCOW_IMAGE
+
+ echo "Glance image id: $GLANCE_IMAGE_ID"
+}
+
+run_test()
+{
+ echo
+ echo "========== Running yardstick test suites =========="
+
+ mkdir -p /etc/yardstick
+
+ cat << EOF >> /etc/yardstick/yardstick.conf
+[DEFAULT]
+debug = True
+dispatcher = ${DISPATCHER_TYPE}
+
+[dispatcher_file]
+file_name = ${DISPATCHER_FILE_NAME}
+
+[dispatcher_http]
+timeout = 5
+target = ${DISPATCHER_HTTP_TARGET}
+
+[dispatcher_influxdb]
+timeout = 5
+target = ${DISPATCHER_INFLUXDB_TARGET}
+db_name = yardstick
+username = opnfv
+password = 0pnfv2015
+EOF
+
+ local failed=0
+
+ if [ ${#SUITE_FILES[@]} -gt 0 ]; then
+
+ for suite in ${SUITE_FILES[*]}; do
+
+ echo "---------------------------"
+ echo "Running test suite: $suite"
+ echo "---------------------------"
+
+ if ! yardstick task start --suite $suite; then
+ echo "test suite $suite FAILED";
+
+ # Mark the test suite failed but continue
+ # running the remaining test suites.
+ (( failed++ ))
+ fi
+ if [ ${DISPATCHER_TYPE} = file ]; then
+ echo "---------------------------"
+ echo "Dump test suite $suite result"
+ echo "---------------------------"
+ if [ -f ${DISPATCHER_FILE_NAME} ]; then
+ cat ${DISPATCHER_FILE_NAME}
+ else
+ echo "Test result file ${DISPATCHER_FILE_NAME} is not exist"
+ fi
+ fi
+
+ done
+
+ if [ $failed -gt 0 ]; then
+
+ echo "---------------------------"
+ echo "$failed out of ${SUITE_FILES[*]} test suites FAILED"
+ echo "---------------------------"
+ exit 1
+ fi
+
+ else
+
+ echo "---------------------------"
+ echo "Running samples/ping.yaml "
+ echo "---------------------------"
+
+ if ! yardstick task start samples/ping.yaml; then
+ echo "Yardstick test FAILED"
+ exit 1
+ fi
+
+ if [ ${DISPATCHER_TYPE} = file ]; then
+ echo "---------------------------"
+ echo "Dump samples/ping.yaml test result"
+ echo "---------------------------"
+ if [ -f ${DISPATCHER_FILE_NAME} ]; then
+ cat ${DISPATCHER_FILE_NAME}
+ else
+ echo "Test result file ${DISPATCHER_FILE_NAME} is not exist"
+ fi
+ fi
+
+ fi
+
+}
+
+main()
+{
+ GITROOT=$(cd $(dirname $0) && git rev-parse --show-toplevel)
+
+ cd $GITROOT
+
+ export YARDSTICK_VERSION=$(git rev-parse HEAD)
+
+ SUITE_FILES=()
+
+ # find the test suite files
+ for suite in $TEST_SUITES; do
+ if [ -f $suite ]; then
+ SUITE_FILES+=($suite)
+ else
+ tsdir=$GITROOT/tests/opnfv/test_suites
+ if [ ! -f $tsdir/$suite ]; then
+ echo "Test suite \"$suite\" does not exist"
+ exit 1
+ fi
+ SUITE_FILES+=($tsdir/$suite)
+ fi
+ done
+
+ echo
+ echo "========== Running Yardstick CI with following parameters =========="
+ echo "Script options: ${SCRIPT} $SCRIPT_ARGS"
+ echo "Dispatcher: ${DISPATCHER_TYPE} ${DISPATCHER_FILE_NAME}"
+ echo "YARDSTICK_VERSION: ${YARDSTICK_VERSION}"
+ echo "Number of test suites: ${#SUITE_FILES[@]}"
+ for suite in ${SUITE_FILES[*]}; do
+ echo " $suite"
+ done
+ echo
+
+ # check if some necessary variables is set
+ if [ -z "$OS_AUTH_URL" ]; then
+ echo "OS_AUTH_URL is unset or empty"
+ exit 1
+ fi
+
+ echo "OS_AUTH_URL is $OS_AUTH_URL"
+ echo
+
+ # check OpenStack services
+ echo "Checking OpenStack services:"
+ for cmd in "glance image-list" "nova list" "heat stack-list"; do
+ echo " checking ${cmd/%\ */} ..."
+ if ! $cmd >/dev/null; then
+ echo "error: command \"$cmd\" failed"
+ exit 1
+ fi
+ done
+
+ echo
+ echo "Checking for External network:"
+ for net in $(neutron net-list --router:external True -c name -f value); do
+ echo " external network: $net"
+ done
+
+ # install yardstick
+ install_yardstick
+
+ cleanup
+
+ trap "error_exit" EXIT SIGTERM
+
+ QCOW_IMAGE="/tmp/workspace/yardstick/yardstick-trusty-server.img"
+
+ build_yardstick_image
+ load_yardstick_image
+ load_cirros_image
+ create_nova_flavor
+
+ run_test
+}
+
+main