Adaptation of test env to helm chart
[nonrtric.git] / test / common / ricsimulator_api_functions.sh
index bb057ce..f760313 100644 (file)
 
 # This is a script that contains container/service management functions and test functions for RICSIM A1 simulators
 
+################ Test engine functions ################
+
+# Create the image var used during the test
+# arg: <image-tag-suffix> (selects staging, snapshot, release etc)
+# <image-tag-suffix> is present only for images with staging, snapshot,release tags
+__RICSIM_imagesetup() {
+       __check_and_create_image_var RICSIM "RIC_SIM_IMAGE" "RIC_SIM_IMAGE_BASE" "RIC_SIM_IMAGE_TAG" $1 "$RIC_SIM_DISPLAY_NAME"
+}
+
+# Pull image from remote repo or use locally built image
+# arg: <pull-policy-override> <pull-policy-original>
+# <pull-policy-override> Shall be used for images allowing overriding. For example use a local image when test is started to use released images
+# <pull-policy-original> Shall be used for images that does not allow overriding
+# Both var may contain: 'remote', 'remote-remove' or 'local'
+__RICSIM_imagepull() {
+       __check_and_pull_image $1 "$RIC_SIM_DISPLAY_NAME" $RIC_SIM_PREFIX"_"$RIC_SIM_BASE RIC_SIM_IMAGE
+}
+
+# Generate a string for each included image using the app display name and a docker images format string
+# If a custom image repo is used then also the source image from the local repo is listed
+# arg: <docker-images-format-string> <file-to-append>
+__RICSIM_image_data() {
+       echo -e "$RIC_SIM_DISPLAY_NAME\t$(docker images --format $1 $RIC_SIM_IMAGE)" >>   $2
+       if [ ! -z "$RIC_SIM_IMAGE_SOURCE" ]; then
+               echo -e "-- source image --\t$(docker images --format $1 $RIC_SIM_IMAGE_SOURCE)" >>   $2
+       fi
+}
+
+# Scale kubernetes resources to zero
+# All resources shall be ordered to be scaled to 0, if relevant. If not relevant to scale, then do no action.
+# This function is called for apps fully managed by the test script
+__RICSIM_kube_scale_zero() {
+       __kube_scale_all_resources $KUBE_A1SIM_NAMESPACE autotest RICSIM
+}
+
+# Scale kubernetes resources to zero and wait until this has been accomplished, if relevant. If not relevant to scale, then do no action.
+# This function is called for prestarted apps not managed by the test script.
+__RICSIM_kube_scale_zero_and_wait() {
+       #__kube_scale_and_wait_all_resources $KUBE_A1SIM_NAMESPACE app $KUBE_A1SIM_NAMESPACE"-"$RIC_SIM_PREFIX
+       __kube_scale_and_wait_all_resources $KUBE_A1SIM_NAMESPACE app # the values of the app label is not known
+}
+
+# Delete all kube resouces for the app
+# This function is called for apps managed by the test script.
+__RICSIM_kube_delete_all() {
+       __kube_delete_all_resources $KUBE_A1SIM_NAMESPACE autotest RICSIM
+}
+
+# Store docker logs
+# This function is called for apps managed by the test script.
+# args: <log-dir> <file-prexix>
+__RICSIM_store_docker_logs() {
+       if [ $RUNMODE == "KUBE" ]; then
+               for podname in $(kubectl get pods -n $KUBE_A1SIM_NAMESPACE -l "autotest=RICSIM" -o custom-columns=":metadata.name"); do
+                       kubectl logs -n $KUBE_A1SIM_NAMESPACE $podname --tail=-1 > $1$2_$podname.log 2>&1
+               done
+       else
+
+               rics=$(docker ps --filter "name=$RIC_SIM_PREFIX" --filter "network=$DOCKER_SIM_NWNAME" --filter "status=running" --format {{.Names}})
+               for ric in $rics; do
+                       docker logs $ric > $1$2_$ric.log 2>&1
+               done
+       fi
+}
+
+# Initial setup of protocol, host and ports
+# This function is called for apps managed by the test script.
+# args: -
+__RICSIM_initial_setup() {
+       use_simulator_http
+}
+
+#######################################################
+
+
 RIC_SIM_HTTPX="http"
 RIC_SIM_HOST=$RIC_SIM_HTTPX"://"$LOCALHOST_NAME
 RIC_SIM_PORT=$RIC_SIM_INTERNAL_PORT
@@ -92,7 +167,7 @@ start_ric_simulators() {
                        echo -e " Using existing $1 statefulset and service"
                        echo " Using existing simulator deployment and service for statefulset $1"
                        echo " Setting $1 replicas=$2"
-                       __kube_scale statefulset $1 $KUBE_NONRTRIC_NAMESPACE $2
+                       __kube_scale statefulset $1 $KUBE_A1SIM_NAMESPACE $2
                        echo ""
                        return
                fi
@@ -139,7 +214,7 @@ start_ric_simulators() {
 
                        #export needed env var for statefulset
                        export RIC_SIM_SET_NAME=$(echo "$1" | tr '_' '-')  #kube does not accept underscore in names
-                       export KUBE_NONRTRIC_NAMESPACE
+                       export KUBE_A1SIM_NAMESPACE
                        export RIC_SIM_IMAGE
                        #Adding 1 more instance, instance 0 is never used. This is done to keep test scripts compatible
                        # with docker that starts instance index on 1.....
@@ -151,7 +226,7 @@ start_ric_simulators() {
                        echo -e " Creating $POLICY_AGENT_APP_NAME app and expose service"
 
                        #Check if nonrtric namespace exists, if not create it
-                       __kube_create_namespace $KUBE_NONRTRIC_NAMESPACE
+                       __kube_create_namespace $KUBE_A1SIM_NAMESPACE
 
                        # Create service
                        input_yaml=$SIM_GROUP"/"$RIC_SIM_COMPOSE_DIR"/"svc.yaml
@@ -190,6 +265,7 @@ start_ric_simulators() {
                export RIC_SIM_INTERNAL_SECURE_PORT
                export RIC_SIM_CERT_MOUNT_DIR
                export DOCKER_SIM_NWNAME
+               export RIC_SIM_DISPLAY_NAME
 
                docker_args="--scale g1=$G1_COUNT --scale g2=$G2_COUNT --scale g3=$G3_COUNT --scale g4=$G4_COUNT --scale g5=$G5_COUNT"
                app_data=""
@@ -200,36 +276,66 @@ start_ric_simulators() {
                        let cntr=cntr+1
                done
 
-               __start_container $RIC_SIM_COMPOSE_DIR "$docker_args" $2 $app_data
+               __start_container $RIC_SIM_COMPOSE_DIR "" "$docker_args" $2 $app_data
 
                cntr=1
                while [ $cntr -le $2 ]; do
                        app=$1"_"$cntr
-                       localport=0
-
-                       while [ $localport -eq 0 ]; do
-                               echo -ne " Waiting for container ${app} to publish its ports...${SAMELINE}"
-                               localport=$(__find_sim_port $app)
-                               sleep 0.5
-                               echo -ne " Waiting for container ${app} to publish its ports...retrying....${SAMELINE}"
-                       done
-                       echo -e " Waiting for container ${app} to publish its ports...retrying....$GREEN OK $EGREEN"
-                       __check_service_start $app $RIC_SIM_HOST":"$localport$RIC_SIM_ALIVE_URL
+                       __check_service_start $app $RIC_SIM_HTTPX"://"$app:$RIC_SIM_PORT$RIC_SIM_ALIVE_URL
                        let cntr=cntr+1
                done
+
        fi
        echo ""
        return 0
 }
 
+# Translate ric name to kube host name
+# args: <ric-name>
+# For test scripts
+get_kube_sim_host() {
+       name=$(echo "$1" | tr '_' '-')  #kube does not accept underscore in names
+       #example gnb_1_2 -> gnb-1-2
+       set_name=$(echo $name | rev | cut -d- -f2- | rev) # Cut index part of ric name to get the name of statefulset
+       # example gnb-g1-2 -> gnb-g1 where gnb-g1-2 is the ric name and gnb-g1 is the set name
+       echo $name"."$set_name"."$KUBE_A1SIM_NAMESPACE
+}
+
+# Helper function to get a the port and host name of a specific ric simulator
+# args: <ric-id>
+# (Not for test scripts)
+__find_sim_host() {
+       if [ $RUNMODE == "KUBE" ]; then
+               ricname=$(echo "$1" | tr '_' '-') # Kube does not accept underscore in names as docker do
+               ric_setname="${ricname%-*}"  #Extract the stateful set name
+               echo $RIC_SIM_HTTPX"://"$ricname.$ric_setname.$KUBE_A1SIM_NAMESPACE":"$RIC_SIM_PORT
+       else
+               echo $RIC_SIM_HTTPX"://"$1":"$RIC_SIM_PORT
+
+       fi
+}
 
+# Generate a UUID to use as prefix for policy ids
+generate_policy_uuid() {
+       UUID=$(python3 -c 'import sys,uuid; sys.stdout.write(uuid.uuid4().hex)')
+       #Reduce length to make space for serial id, uses 'a' as marker where the serial id is added
+       UUID=${UUID:0:${#UUID}-4}"a"
+}
 
 # Excute a curl cmd towards a ricsimulator and check the response code.
 # args: <expected-response-code> <curl-cmd-string>
 __execute_curl_to_sim() {
        echo ${FUNCNAME[1]} "line: "${BASH_LINENO[1]} >> $HTTPLOG
-       echo " CMD: $2" >> $HTTPLOG
-       res="$($2)"
+       proxyflag=""
+       if [ ! -z "$KUBE_PROXY_PATH" ]; then
+               if [ $KUBE_PROXY_HTTPX == "http" ]; then
+                       proxyflag=" --proxy $KUBE_PROXY_PATH"
+               else
+                       proxyflag=" --proxy-insecure --proxy $KUBE_PROXY_PATH"
+               fi
+       fi
+       echo " CMD: $2 $proxyflag" >> $HTTPLOG
+       res="$($2 $proxyflag)"
        echo " RESP: $res" >> $HTTPLOG
        retcode=$?
     if [ $retcode -ne 0 ]; then
@@ -349,7 +455,7 @@ sim_post_delete_instances() {
 # (Function for test scripts)
 sim_post_delete_all() {
        __log_conf_start $@
-       if [ $# -ne 3 ]; then
+       if [ $# -ne 2 ]; then
                __print_err "<response-code> <numericic-id>" $@
                return 1
        fi