X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=test%2Fcommon%2Ftestcase_common.sh;h=cef8188705598a2d2ff02217e9aaeea4657af430;hb=refs%2Fchanges%2F23%2F5423%2F7;hp=ed02c7b10b4245a7fe4aa2608c0db3d335470110;hpb=045a1503113be9e0ff6e0747c94d23e06ddb263f;p=nonrtric.git diff --git a/test/common/testcase_common.sh b/test/common/testcase_common.sh index ed02c7b1..cef81887 100755 --- a/test/common/testcase_common.sh +++ b/test/common/testcase_common.sh @@ -17,8 +17,44 @@ # ============LICENSE_END================================================= # -# This is a script that contains all the functions needed for auto test -# Arg: local|remote|remote-remove [auto-clean] [--stop-at-error] [--ricsim-prefix ] [ --env-file ] [--use-local-image []*] +# This is a script that contains all the common functions needed for auto test. +# Specific test function are defined in scripts XXXX_functions.sh + + +# List of short names for all supported apps, including simulators etc +APP_SHORT_NAMES="PA RICSIM SDNC CP ECS RC CBS CONSUL RC MRSTUB CR PRODSTUB" + +__print_args() { + echo "Args: remote|remote-remove --env-file [release] [auto-clean] [--stop-at-error] " + echo " [--ricsim-prefix ] [--use-local-image +] [--use-snapshot-image +]" + echo " [--use-staging-image +] [--use-release-image +]" +} + +if [ $# -eq 1 ] && [ "$1" == "help" ]; then + + if [ ! -z "$TC_ONELINE_DESCR" ]; then + echo "Test script description:" + echo $TC_ONELINE_DESCR + echo "" + fi + __print_args + echo "" + echo "remote - Use images from remote repositories. Can be overridden for individual images using the '--use_xxx' flags" + echo "remote-remove - Same as 'remote' but will also try to pull fresh images from remote repositories" + echo "--env-file - The script will use the supplied file to read environment variables from" + echo "release - If this flag is given the script will use release version of the images" + echo "auto-clean - If the function 'auto_clean_containers' is present in the end of the test script then all containers will be stopped and removed. If 'auto-clean' is not given then the function has no effect." + echo "--stop-at-error - The script will stop when the first failed test or configuration" + echo "--ricsim-prefix - The a1 simulator will use the supplied string as container prefix instead of 'ricsim'" + echo "--use-local-image - The script will use local images for the supplied apps, space separated list of app short names" + echo "--use-snapshot-image - The script will use images from the nexus snapshot repo for the supplied apps, space separated list of app short names" + echo "--use-staging-image - The script will use images from the nexus staging repo for the supplied apps, space separated list of app short names" + echo "--use-release-image - The script will use images from the nexus release repo for the supplied apps, space separated list of app short names" + echo "" + echo "List of app short names supported: "$APP_SHORT_NAMES + exit 0 +fi + # Create a test case id, ATC (Auto Test Case), from the name of the test case script. @@ -61,7 +97,7 @@ fi echo -ne $EBOLD # default test environment variables -TEST_ENV_VAR_FILE="../common/test_env.sh" +TEST_ENV_VAR_FILE="" echo "Test case started as: ${BASH_SOURCE[$i+1]} "$@ @@ -80,15 +116,29 @@ AGENT_STAND_ALONE=0 # Var to hold 'auto' in case containers shall be stopped when test case ends AUTO_CLEAN="" -# Var to hold the app names to use local image for when running 'remote' or 'remote-remove' +# Var to hold the app names to use local images for USE_LOCAL_IMAGES="" -# List of available apps to override with local image -AVAILABLE_LOCAL_IMAGES_OVERRIDE="PA ECS CP SDNC RICSIM" +# Var to hold the app names to use remote snapshot images for +USE_SNAPSHOT_IMAGES="" + +# Var to hold the app names to use remote staging images for +USE_STAGING_IMAGES="" + +# Var to hold the app names to use remote release images for +USE_RELEASE_IMAGES="" + +# List of available apps to override with local or remote staging/snapshot/release image +AVAILABLE_IMAGES_OVERRIDE="PA ECS CP SDNC RICSIM RC" # Use this var (STOP_AT_ERROR=1 in the test script) for debugging/trouble shooting to take all logs and exit at first FAIL test case STOP_AT_ERROR=0 +# The default value "DEV" indicate that development image tags (SNAPSHOT) and nexus repos (nexus port 10002) are used. +# The value "RELEASE" indicate that relase image tag and nexus repos (nexus port) are used +# Applies only to images defined in the test-env files with image names and tags defined as XXXX_RELEASE +IMAGE_CATEGORY="DEV" + # Function to indent cmd output with one space indent1() { sed 's/^/ /'; } @@ -128,6 +178,17 @@ echo "" > $HTTPLOG # Create a log dir for the test case mkdir -p $TESTLOGS/$ATC +# Save create for current logs +mkdir -p $TESTLOGS/$ATC/previous + +rm $TESTLOGS/$ATC/previous/*.log &> /dev/null +rm $TESTLOGS/$ATC/previous/*.txt &> /dev/null +rm $TESTLOGS/$ATC/previous/*.json &> /dev/null + +mv $TESTLOGS/$ATC/*.log $TESTLOGS/$ATC/previous &> /dev/null +mv $TESTLOGS/$ATC/*.txt $TESTLOGS/$ATC/previous &> /dev/null +mv $TESTLOGS/$ATC/*.txt $TESTLOGS/$ATC/previous &> /dev/null + # Clear the log dir for the test case rm $TESTLOGS/$ATC/*.log &> /dev/null rm $TESTLOGS/$ATC/*.txt &> /dev/null @@ -148,6 +209,94 @@ RES_DEVIATION=0 DEVIATION_FILE=".tmp_deviations" rm $DEVIATION_FILE &> /dev/null + +# Trap "command not found" and make the script fail +trap_fnc() { + + if [ $? -eq 127 ]; then + echo -e $RED"Function not found, setting script to FAIL"$ERED + ((RES_CONF_FAIL++)) + fi +} +trap trap_fnc ERR + +# Counter for tests +TEST_SEQUENCE_NR=1 + +__log_test_start() { + TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") + echo -e $BOLD"TEST $TEST_SEQUENCE_NR (${BASH_LINENO[1]}): ${FUNCNAME[1]}" $@ $EBOLD + echo "TEST $TEST_SEQUENCE_NR - ${TIMESTAMP}: (${BASH_LINENO[1]}): ${FUNCNAME[1]}" $@ >> $HTTPLOG + ((RES_TEST++)) + ((TEST_SEQUENCE_NR++)) +} + +__log_test_fail_general() { + echo -e $RED" FAIL."$1 $ERED + ((RES_FAIL++)) + __check_stop_at_error +} + +__log_test_fail_status_code() { + echo -e $RED" FAIL. Exepected status "$1", got "$2 $3 $ERED + ((RES_FAIL++)) + __check_stop_at_error +} + +__log_test_fail_body() { + echo -e $RED" FAIL, returned body not correct"$ERED + ((RES_FAIL++)) + __check_stop_at_error +} + +__log_test_fail_not_supported() { + echo -e $RED" FAIL, function not supported"$ERED + ((RES_FAIL++)) + __check_stop_at_error +} + +__log_test_pass() { + if [ $# -gt 0 ]; then + echo $@ + fi + ((RES_PASS++)) + echo -e $GREEN" PASS"$EGREEN +} + +#Counter for configurations +CONF_SEQUENCE_NR=1 +__log_conf_start() { + TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") + echo -e $BOLD"CONF $CONF_SEQUENCE_NR (${BASH_LINENO[1]}): "${FUNCNAME[1]} $@ $EBOLD + echo "CONF $CONF_SEQUENCE_NR - ${TIMESTAMP}: (${BASH_LINENO[1]}): "${FUNCNAME[1]} $@ >> $HTTPLOG + ((CONF_SEQUENCE_NR++)) +} + +__log_conf_fail_general() { + echo -e $RED" FAIL."$1 $ERED + ((RES_CONF_FAIL++)) + __check_stop_at_error +} + +__log_conf_fail_status_code() { + echo -e $RED" FAIL. Exepected status "$1", got "$2 $3 $ERED + ((RES_CONF_FAIL++)) + __check_stop_at_error +} + +__log_conf_fail_body() { + echo -e $RED" FAIL, returned body not correct"$ERED + ((RES_CONF_FAIL++)) + __check_stop_at_error +} + +__log_conf_ok() { + if [ $# -gt 0 ]; then + echo $@ + fi + echo -e $GREEN" OK"$EGREEN +} + #Var for measuring execution time TCTEST_START=$SECONDS @@ -166,12 +315,16 @@ echo "----------------------------------- Test case setup ------------ START_ARG=$1 paramerror=0 +paramerror_str="" if [ $# -lt 1 ]; then paramerror=1 fi if [ $paramerror -eq 0 ]; then - if [ "$1" != "remote" ] && [ "$1" != "remote-remove" ] && [ "$1" != "local" ]; then + if [ "$1" != "remote" ] && [ "$1" != "remote-remove" ]; then paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="First arg shall be 'remote' or 'remote-remove'" + fi else shift; fi @@ -179,6 +332,14 @@ fi foundparm=0 while [ $paramerror -eq 0 ] && [ $foundparm -eq 0 ]; do foundparm=1 + if [ $paramerror -eq 0 ]; then + if [ "$1" == "release" ]; then + IMAGE_CATEGORY="RELEASE" + echo "Option set - Release image tags used for applicable images " + shift; + foundparm=0 + fi + fi if [ $paramerror -eq 0 ]; then if [ "$1" == "auto-clean" ]; then AUTO_CLEAN="auto" @@ -201,6 +362,9 @@ while [ $paramerror -eq 0 ] && [ $foundparm -eq 0 ]; do RIC_SIM_PREFIX=$1 if [ -z "$1" ]; then paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="No prefix found for flag: '--ricsim-prefix'" + fi else echo "Option set - Overriding RIC_SIM_PREFIX with: "$1 shift; @@ -214,8 +378,11 @@ while [ $paramerror -eq 0 ] && [ $foundparm -eq 0 ]; do TEST_ENV_VAR_FILE=$1 if [ -z "$1" ]; then paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="No env file found for flag: '--env-file'" + fi else - echo "Option set - Overriding test_env.sh with: "$1 + echo "Option set - Reading test env from: "$1 shift; foundparm=0 fi @@ -227,16 +394,97 @@ while [ $paramerror -eq 0 ] && [ $foundparm -eq 0 ]; do shift while [ $# -gt 0 ] && [[ "$1" != "--"* ]]; do USE_LOCAL_IMAGES=$USE_LOCAL_IMAGES" "$1 - if [[ "$AVAILABLE_LOCAL_IMAGES_OVERRIDE" != *"$1"* ]]; then + if [[ "$AVAILABLE_IMAGES_OVERRIDE" != *"$1"* ]]; then paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="App name $1 is not available for local override for flag: '--use-local-image'" + fi fi shift; done foundparm=0 if [ -z "$USE_LOCAL_IMAGES" ]; then paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="No app name found for flag: '--use-local-image'" + fi + else + echo "Option set - Overriding with local images for app(s):"$USE_LOCAL_IMAGES + fi + fi + fi + if [ $paramerror -eq 0 ]; then + if [ "$1" == "--use-snapshot-image" ]; then + USE_SNAPSHOT_IMAGES="" + shift + while [ $# -gt 0 ] && [[ "$1" != "--"* ]]; do + USE_SNAPSHOT_IMAGES=$USE_SNAPSHOT_IMAGES" "$1 + if [[ "$AVAILABLE_IMAGES_OVERRIDE" != *"$1"* ]]; then + paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="App name $1 is not available for snapshot override for flag: '--use-snapshot-image'" + fi + fi + shift; + done + foundparm=0 + if [ -z "$USE_SNAPSHOT_IMAGES" ]; then + paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="No app name found for flag: '--use-snapshot-image'" + fi else - echo "Option set - Override remote images for app(s):"$USE_LOCAL_IMAGES + echo "Option set - Overriding with snapshot images for app(s):"$USE_SNAPSHOT_IMAGES + fi + fi + fi + if [ $paramerror -eq 0 ]; then + if [ "$1" == "--use-staging-image" ]; then + USE_STAGING_IMAGES="" + shift + while [ $# -gt 0 ] && [[ "$1" != "--"* ]]; do + USE_STAGING_IMAGES=$USE_STAGING_IMAGES" "$1 + if [[ "$AVAILABLE_IMAGES_OVERRIDE" != *"$1"* ]]; then + paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="App name $1 is not available for staging override for flag: '--use-staging-image'" + fi + fi + shift; + done + foundparm=0 + if [ -z "$USE_STAGING_IMAGES" ]; then + paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="No app name found for flag: '--use-staging-image'" + fi + else + echo "Option set - Overriding with staging images for app(s):"$USE_STAGING_IMAGES + fi + fi + fi + if [ $paramerror -eq 0 ]; then + if [ "$1" == "--use-release-image" ]; then + USE_RELEASE_IMAGES="" + shift + while [ $# -gt 0 ] && [[ "$1" != "--"* ]]; do + USE_RELEASE_IMAGES=$USE_RELEASE_IMAGES" "$1 + if [[ "$AVAILABLE_IMAGES_OVERRIDE" != *"$1"* ]]; then + paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="App name $1 is not available for release override for flag: '--use-release-image'" + fi + fi + shift; + done + foundparm=0 + if [ -z "$USE_RELEASE_IMAGES" ]; then + paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="No app name found for flag: '--use-release-image'" + fi + else + echo "Option set - Overriding with release images for app(s):"$USE_RELEASE_IMAGES fi fi fi @@ -246,10 +494,14 @@ echo "" #Still params left? if [ $paramerror -eq 0 ] && [ $# -gt 0 ]; then paramerror=1 + if [ -z "$paramerror_str" ]; then + paramerror_str="Unknown parameter(s): "$@ + fi fi if [ $paramerror -eq 1 ]; then - echo -e $RED"Expected arg: local|remote|remote-remove [auto-clean] [--stop-at-error] [--ricsim-prefix ] [ --env-file ] [--use-local-image []*]"$ERED + echo -e $RED"Incorrect arg list: "$paramerror_str$ERED + __print_args exit 1 fi @@ -257,18 +509,44 @@ fi if [ -f "$TEST_ENV_VAR_FILE" ]; then echo -e $BOLD"Sourcing env vars from: "$TEST_ENV_VAR_FILE$EBOLD . $TEST_ENV_VAR_FILE + + if [ -z "$TEST_ENV_PROFILE" ] || [ -z "$SUPPORTED_PROFILES" ]; then + echo -e $YELLOW"This test case may not work with selected test env file. TEST_ENV_PROFILE is missing in test_env file or SUPPORTED_PROFILES is missing in test case file"$EYELLOW + else + if [[ "$SUPPORTED_PROFILES" == *"$TEST_ENV_PROFILE"* ]]; then + echo -e $GREEN"Test case support the selected test env file"$EGREEN + else + echo -e $RED"Test case does not support the selected test env file"$ERED + echo "Profile: "$TEST_ENV_PROFILE" Supported profiles: "$SUPPORTED_PROFILES + echo -e $RED"Exiting...."$ERED + exit 1 + fi + fi else echo -e $RED"Selected env var file does not exist: "$TEST_ENV_VAR_FILE$ERED + echo " Select one of following env var file matching the intended target of the test" + echo " Restart the test using the flag '--env-file " + ls ../common/test_env* | indent1 + exit 1 +fi + +if [ -z "$PROJECT_IMAGES_APP_NAMES" ]; then + echo -e $RED"Var PROJECT_IMAGES_APP_NAMES must be defined in: "$TEST_ENV_VAR_FILE$ERED$ERED exit 1 fi + #Vars for A1 interface version and container count G1_A1_VERSION="" G2_A1_VERSION="" G3_A1_VERSION="" +G4_A1_VERSION="" +G5_A1_VERSION="" G1_COUNT=0 G2_COUNT=0 G3_COUNT=0 +G4_COUNT=0 +G5_COUNT=0 # Vars to switch between http and https. Extra curl flag needed for https export RIC_SIM_HTTPX="http" @@ -283,29 +561,34 @@ export MR_LOCAL_PORT=$MR_EXTERNAL_PORT #When agent is running outside the docker export CR_HTTPX="http" export CR_PORT=$CR_INTERNAL_PORT export CR_LOCAL_PORT=$CR_EXTERNAL_PORT #When CR is running outside the docker net +export CR_PATH="$CR_HTTPX://$CR_APP_NAME:$CR_PORT$CR_APP_CALLBACK" export PROD_STUB_HTTPX="http" export PROD_STUB_PORT=$PROD_STUB_INTERNAL_PORT -export PROD_STUB_LOCAL_PORT=$PROD_STUB_EXTERNAL_PORT #When CR is running outside the docker net +export PROD_STUB_LOCAL_PORT=$PROD_STUB_EXTERNAL_PORT #When Prodstub is running outside the docker net export PROD_STUB_LOCALHOST=$PROD_STUB_HTTPX"://localhost:"$PROD_STUB_LOCAL_PORT export SDNC_HTTPX="http" export SDNC_PORT=$SDNC_INTERNAL_PORT export SDNC_LOCAL_PORT=$SDNC_EXTERNAL_PORT #When agent is running outside the docker net +export RAPP_CAT_HTTPX="http" +export RAPP_CAT_PORT=$RAPP_CAT_INTERNAL_PORT +export RAPP_CAT_LOCAL_PORT=$RAPP_CAT_EXTERNAL_PORT #When Rapp catalogue is running outside the docker net + echo -e $BOLD"Checking configured image setting for this test case"$EBOLD #Temp var to check for image variable name errors IMAGE_ERR=0 #Create a file with image info for later printing as a table image_list_file="./tmp/.image-list" -echo -e " Container\tImage\ttag" > $image_list_file +echo -e " Container\tImage\ttag\ttag-switch" > $image_list_file # Check if image env var is set and if so export the env var with image to use (used by docker compose files) -# arg: