| #!/usr/bin/env bash |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| declare -a FAILS |
| |
| export BRCLI_HOME=/tmp |
| trap cleanup EXIT |
| |
| |
| function usage() { |
| echo "Usage: $0 <brooklyn_url> [ <user> <password> ]" |
| exit 0 |
| } |
| |
| |
| function cleanup() { |
| rm -f $BRCLI_HOME/.brooklyn_cli |
| } |
| |
| function title() { |
| echo "*************************************************************************" |
| echo " ${FUNCNAME[1]}" |
| echo "*************************************************************************" |
| } |
| |
| function fail() { |
| local code=$? |
| local message="$*" |
| FAILS[${#FAILS[*]}]="${FUNCNAME[1]}: (${code}) ${message}" |
| } |
| |
| function report() { |
| if [ 0 -ne ${#FAILS[*]} ] ; then |
| echo " ${#FAILS[*]} Test failures" 1>&2 |
| else |
| echo All tests succeeded |
| fi |
| local n=0 |
| while [ $n -lt ${#FAILS[*]} ] ; do |
| echo ${FAILS[$N]} 1>&2 |
| n=$(( $n + 1 )) |
| done |
| } |
| |
| |
| function isAppStatus() { |
| local appname=$1 |
| local status=$2 |
| br apps | grep "${appname}" | grep ${status} > /dev/null |
| } |
| |
| function isEntityStatus() { |
| local appname=$1 |
| local entity=$2 |
| local status=$3 |
| |
| br app "${appname}" ent "${entity}" | grep ${status} > /dev/null |
| } |
| |
| function waitForCommand() { |
| local N=300 # 5 minutes |
| while [ $N -gt 0 ] && ! "$@" ; do |
| sleep 1 |
| N=$(($N - 1)) |
| done |
| if [ $N -eq 0 ] ; then |
| return 1 |
| fi |
| return 0 |
| } |
| |
| |
| |
| function brIsDefined() { |
| type br > /dev/null 2>&1 |
| } |
| |
| |
| # |
| # TESTS |
| # |
| |
| function shouldLogin() { |
| title |
| br login $1 $2 $3 || fail |
| } |
| |
| |
| |
| function shouldDeployTomcat() { |
| title |
| |
| br deploy test_app.yaml |
| |
| waitForCommand isAppStatus "Test Tomcat" RUNNING || fail |
| } |
| |
| function shouldRenameApp() { |
| title |
| local appname=$1 |
| local rename=$2 |
| |
| br app "${appname}" rename "${rename}" |
| |
| br apps | grep "${rename}" | grep RUNNING || fail |
| } |
| |
| function shouldGetAppConfig() { |
| title |
| local appname=$1 |
| br app "${appname}" config | grep brooklyn.wrapper_app | grep true || fail |
| } |
| |
| function shouldGetTomcatServerEntity() { |
| title |
| local appname=$1 |
| |
| br app "${appname}" entity | grep TomcatServer || fail |
| } |
| |
| |
| function shouldRenameTomcatServerEntity() { |
| title |
| local appname=$1 |
| local rename=$2 |
| |
| br app "${appname}" entity "Tomcat Server" rename "${rename}" |
| br app "${appname}" entity "${rename}" | grep TomcatServer || fail |
| } |
| |
| function shouldStopEntity() { |
| title |
| local appname=$1 |
| local entityname=$2 |
| |
| br app "${appname}" ent "${entityname}" stop |
| |
| waitForCommand isEntityStatus "${appname}" "${entityname}" STOPPED || fail; return |
| } |
| |
| function shouldRestartEntity() { |
| title |
| local appname=$1 |
| local entityname=$2 |
| |
| br app "${appname}" restart "${entityname}" |
| |
| waitForCommand isEntityStatus "${appname}" "${entityname}" RUNNING || fail; return |
| } |
| |
| function shouldStartEntity() { |
| title |
| local appname=$1 |
| local entityname=$2 |
| |
| br app "${appname}" start "${entityname}" |
| |
| waitForCommand isEntityStatus "${appname}" "${entityname}" RUNNING || fail; return |
| } |
| |
| |
| function runAllTests() { |
| |
| local brooklyn_url=${1} |
| local user=${2} |
| local password=${3} |
| |
| shouldLogin ${brooklyn_url} ${user} ${password} |
| shouldDeployTomcat |
| shouldRenameApp "Test Tomcat" mytest |
| shouldGetAppConfig mytest |
| shouldGetTomcatServerEntity mytest |
| shouldRenameTomcatServerEntity mytest myserver |
| shouldStopEntity mytest myserver |
| shouldStartEntity mytest myserver |
| shouldRestartEntity mytest myserver |
| |
| |
| #... TODO add more tests here |
| } |
| |
| # |
| # main function |
| # |
| function main() { |
| |
| [ $1 ] || usage |
| |
| local brooklyn_url=${1} |
| local user=${2} |
| local password=${3} |
| |
| brIsDefined || { |
| >&2 echo br is not defined |
| exit 1 |
| } |
| |
| runAllTests ${brooklyn_url} ${user} ${password} |
| |
| # If there are test failures we leave the application running, in case it helps determine what failed. |
| if [ 0 -eq ${#FAILS[*]} ] ; then |
| echo Stopping test application |
| br app mytest stop |
| fi |
| |
| report |
| |
| } |
| |
| main $@ |
| exit ${#FAILS[*]} |