#!/bin/sh

# Copyright © 2018 Amdocs, Bell Canada
#
# Licensed 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.

#
# Run the testsuite for the passed tag. Valid tags are listed in usage help
# Please clean up logs when you are done...
#
if [ "$1" = "" ] || [ "$2" = "" ]; then
   echo "Usage: ete-k8s.sh [namespace] [tag] [execscript]"
   echo ""
   echo "  List of test case tags (filename for intent: tag)"
   echo ""
   echo "  cds.robot: cds"
   echo ""
   echo "  clamp.robot: clamp"
   echo ""
   echo "  demo.robot: InitDemo, InitCustomer, APPCCDTPreloadDemo, APPCMountPointDemo, DistributeDemoVFWDT, DistributeVFWNG,"
   echo "              InitDistribution, PreloadDemo, deleteVNF, instantiateDemoVFWCL, instantiateVFW,    "
   echo "              instantiateVFWCL, instantiateVFWDT, instantiateVFWCLDN"
   echo ""
   echo "  health-check.robot: health, core, small, medium, 3rdparty, api, datarouter, externalapi, health-aaf, health-aai, health-appc,"
   echo "                      health-clamp, health-cli, health-dcae, health-dmaap, health-log, health-modeling, health-msb,"
   echo "                      health-multicloud, health-oof, health-policy, health-pomba, health-portal, health-sdc, health-sdnc,"
   echo "                      health-so, health-uui, health-vfc, health-vid, health-vnfsdk, healthdist, healthlogin, healthmr,"
   echo "                      healthportalapp, multicloud, oom"
   echo ""
   echo "  hvves.robot: HVVES, ete"
   echo ""
   echo "  model-distribution-vcpe.robot: distributevCPEResCust"
   echo ""
   echo "  model-distribution.robot: distribute, distributeVFWDT, distributeVLB"
   echo ""
   echo "  oof-*.robot: cmso, has, homing"
   echo ""
   echo "  pnf-registration.robot: ete, pnf_registrate"
   echo ""
   echo "  post-install-tests.robot: dmaapacl, postinstall"
   echo ""
   echo "  sdc-dcae-d.robot: sdc-dcae-d"
   echo ""
   echo "  security.robot: security"
   echo ""
   echo "  update_onap_page.robot: UpdateWebPage"
   echo ""
   echo "  vnf-orchestration-direct-so.robot: instantiateVFWdirectso"
   echo ""
   echo "  vnf-orchestration.robot: instantiate, instantiateNoDelete, stability72hr"
   echo ""
   echo "  [execscript] - optional parameter to execute user custom scripts located in scripts/etescript directory"
   exit
fi

set -x

export NAMESPACE="$1"

POD=$(kubectl --namespace $NAMESPACE get pods | sed 's/ .*//'| grep robot)

TAGS="-i $2"

DIR=$(dirname "$0")
SCRIPTDIR=scripts/etescript

ETEHOME=/var/opt/ONAP

if [ "${!#}" = "execscript" ]; then
   for script in $(ls -1 "$DIR/$SCRIPTDIR"); do
      [ -f "$DIR/$SCRIPTDIR/$script" ] && [ -x "$DIR/$SCRIPTDIR/$script" ] && . "$DIR/$SCRIPTDIR/$script"
   done
fi

export GLOBAL_BUILD_NUMBER=$(kubectl --namespace $NAMESPACE exec  ${POD}  -- bash -c "ls -1q /share/logs/ | wc -l")
OUTPUT_FOLDER=$(printf %04d $GLOBAL_BUILD_NUMBER)_ete_$2
DISPLAY_NUM=$(($GLOBAL_BUILD_NUMBER + 90))

VARIABLEFILES="-V /share/config/robot_properties.py"
VARIABLES="-v GLOBAL_BUILD_NUMBER:$$"

case $2 in
    security)
        if [ -z "$NODEPORTS_FILE" ]; then
            echo "Security tests require gathering additional information on ONAP cluster."
            echo "It is unavailable from within Robot pod."
            echo ""
            echo "Rerun command with \"execscript\" argument, e.g."
            echo "$ $0 onap security execscript"
            exit
        fi
        VARIABLES="${VARIABLES} -v ACTUAL_NODEPORTS_FILE:${NODEPORTS_FILE}"
        ;;
esac

kubectl --namespace $NAMESPACE exec ${POD} -- ${ETEHOME}/runTags.sh ${VARIABLEFILES} ${VARIABLES} -d /share/logs/${OUTPUT_FOLDER} ${TAGS} --display $DISPLAY_NUM
