Add local support for config preparation before testing
[bottlenecks.git] / run_tests.sh
1 #!/bin/bash
2 ##############################################################################
3 # Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.
4 #
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
10
11 usage="Script to run the tests in Bottlenecks.
12
13 usage:
14     bash $(basename "$0") [-h|--help] [-s <test suite>] [-c <test case>] [--report] [--cleanup]
15
16 where:
17     -h|--help         show the help text
18     -s|--teststory    run specific test story
19       <test story>        one of the following:
20                               (rubbos, vstf, posca_factor_test)
21                       user can also define their own test story and pass as var to this file,
22                       please refer to testsuites/posca/testsuite_story/ for details
23     -c|--testcase     run specific test case
24       <test case>         one of the following:
25                               (posca_factor_system_bandwidth, posca_factor_ping)
26     --cleanup         cleanup test dockers runing when test is done (false by default)
27     --report          push results to DB (false by default)
28
29 examples:
30     $(basename "$0") -s posca_factor_test"
31
32 # Define global variables
33 Bottlenecks_key_dir="/home/opnfv/bottlenecks/utils/infra_setup"
34 POSCA_SUITE="/home/opnfv/bottlenecks/testsuites/posca"
35 POSCA_TESTCASE="/home/opnfv/bottlenecks/testsuites/posca/testcase_cfg"
36 POSCA_TESTSTORY="/home/opnfv/bottlenecks/testsuites/posca/testsuite_story"
37 BASEDIR=`dirname $0`
38
39 REPORT="False"
40 cleanup=false
41
42 # Define alias for log printing
43 info () {
44     logger -s -t "BOTTLENECKS INFO" "$*"
45 }
46
47 error () {
48     logger -s -t "BOTTLENECKS ERROR" "$*"
49     exit 1
50 }
51
52 # Define check_test function for test case/story list check
53 function check_test(){
54
55     TEST_LEVEL="$1"
56     TEST_NAME="$2"
57
58     if [[ "${TEST_LEVEL}" == "testcase" ]]; then
59         TEST_CONFIG="${POSCA_TESTCASE}"
60     else
61         if [[ "${TEST_LEVEL}" == "teststory" ]]; then
62             TEST_CONFIG="${POSCA_TESTSTORY}"
63         else
64             info "Invalid name for test level: testcase or teststory"
65         fi
66     fi
67
68     # Find all the test case yaml files first
69     find $TEST_CONFIG -name "*yaml" > /tmp/all_tests.yaml
70     all_tests_insuite=`cat /tmp/all_tests.yaml | awk -F '/' '{print $NF}' | awk -F '.' '{print $1}'`
71     all_tests=(${all_tests_insuite})
72
73     if [ "${TEST_NAME}" != "" ]; then
74        TEST_EXEC=(${TEST_NAME// /})
75        for i in "${TEST_EXEC[@]}"; do
76            if [[ " ${all_tests[*]} " != *" $i "* ]]; then
77                error "Unknown $TEST_LEVEL: $i. Available $TEST_LEVEL are: ${all_tests[@]}"
78            fi
79        done
80        info "Tests to execute: ${TEST_NAME}."
81     else
82        error "Lack of $TEST_LEVEL name"
83     fi
84 }
85
86 # Define run test function
87 function run_test(){
88
89     test_exec=$1
90
91     case $test_exec in
92         "rubbos")
93             info "After OPNFV Colorado release, Rubbos testsuite is not updating anymore.
94                   This entrance for running Rubbos within Bottlenecks is no longer supported.
95                   This testsuite is also not in the release plan with Bottlenecks since then.
96                   If you want to run Rubbos, please refer to earlier releases."
97         ;;
98         "vstf")
99             info "After OPNFV Colorado release, VSTF testsuite is not updating anymore.
100                   This entrance for running VSTF within Bottlenecks is no longer supported.
101                   This testsuite is also not in the release plan with Bottlenecks since then.
102                   If you want to run VSTF, please refer to earlier releases."
103         ;;
104         *)
105             info "Running posca $test_level: $test_exec"
106             python ${POSCA_SUITE}/../run_testsuite.py $test_level $test_exec $REPORT
107         ;;
108     esac
109 }
110
111 # Process input variables
112 while [[ $# > 0 ]]
113     do
114     key="$1"
115     case $key in
116         -h|--help)
117             echo "$usage"
118             exit 0
119             shift
120         ;;
121         -s|--teststory)
122             teststory="$2"
123             shift
124         ;;
125         -c|--testcase)
126             testcase="$2"
127             shift
128         ;;
129         --report)
130             REPORT="True"
131         ;;
132         --cleanup)
133             cleanup=true
134         ;;
135         *)
136             echo "unkown option $1 $2"
137             exit 1
138         ;;
139      esac
140      shift
141 done
142
143 # Clean up related docker images
144 #bash ${BASEDIR}/docker/docker_cleanup.sh -d bottlenecks --debug
145 #bash ${BASEDIR}/docker/docker_cleanup.sh -d yardstick --debug
146 #bash ${BASEDIR}/docker/docker_cleanup.sh -d kibana --debug
147 #bash ${BASEDIR}/docker/docker_cleanup.sh -d elasticsearch --debug
148 #bash ${BASEDIR}/docker/docker_cleanup.sh -d influxdb --debug
149
150 # Run tests
151 if [ "${teststory}" != "" ]; then
152     test_level="teststory"
153     teststory_exec=(${teststory//,/ })
154     check_test $test_level $teststory
155     for i in "${teststory_exec[@]}"; do
156         info "Start to run test story $i"
157         run_test $i
158     done
159 fi
160
161 if [ "${testcase}" != "" ]; then
162     test_level="testcase"
163     testcase_exec=(${testcase//,/ })
164     check_test $test_level $testcase
165     for i in "${testcase_exec[@]}"; do
166         info "Start to run test case $i"
167         run_test $i
168     done
169 fi
170
171 # Clean up testing dockers
172 if [[ ${cleanup} == true ]]; then
173     info "Cleaning up docker-compose images and dockers"
174     docker-compose -f $BASEDIR/docker/bottleneck-compose/docker-compose.yml down --rmi all
175     bash ${BASEDIR}/docker/docker_cleanup.sh -d influxdb --debug
176     bash ${BASEDIR}/docker/docker_cleanup.sh -d bottlenecks --debug
177 fi