Test script for ONAP UC

Test script for testing only what is specified in the ONAP UC for policies
Description of how to integrate a new app to the test engine
Bugfix for sdnc deployment in kube
Bugfix for starting containers in Linux on Win

Issue-ID: NONRTRIC-469

Signed-off-by: BjornMagnussonXA <bjorn.magnusson@est.tech>
Change-Id: I13b836be1d5b53311ecd214ef8d15e4594456a7b
diff --git a/test/auto-test/ONAP_UC.sh b/test/auto-test/ONAP_UC.sh
new file mode 100755
index 0000000..1001655
--- /dev/null
+++ b/test/auto-test/ONAP_UC.sh
@@ -0,0 +1,287 @@
+#!/usr/bin/env bash
+
+#  ============LICENSE_START===============================================
+#  Copyright (C) 2020 Nordix Foundation. All rights reserved.
+#  ========================================================================
+#  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.
+#  ============LICENSE_END=================================================
+#
+
+
+TC_ONELINE_DESCR="ONAP Use case REQ-626"
+#App names to include in the test when running docker, space separated list
+DOCKER_INCLUDED_IMAGES="CBS CONSUL CP CR MR DMAAPMR PA RICSIM SDNC NGW"
+
+#App names to include in the test when running kubernetes, space separated list
+KUBE_INCLUDED_IMAGES="CP CR MR PA RICSIM SDNC KUBEPROXY NGW"
+#Prestarted app (not started by script) to include in the test when running kubernetes, space separated list
+KUBE_PRESTARTED_IMAGES=""
+
+#Ignore image in DOCKER_INCLUDED_IMAGES, KUBE_INCLUDED_IMAGES if
+#the image is not configured in the supplied env_file
+#Used for images not applicable to all supported profile
+CONDITIONALLY_IGNORED_IMAGES="NGW"
+
+#Supported test environment profiles
+SUPPORTED_PROFILES="ONAP-HONOLULU"
+#Supported run modes
+SUPPORTED_RUNMODES="DOCKER KUBE"
+
+. ../common/testcase_common.sh $@
+. ../common/agent_api_functions.sh
+. ../common/ricsimulator_api_functions.sh
+. ../common/mr_api_functions.sh
+. ../common/control_panel_api_functions.sh
+. ../common/controller_api_functions.sh
+. ../common/cr_api_functions.sh
+. ../common/consul_cbs_functions.sh
+. ../common/kube_proxy_api_functions.sh
+. ../common/gateway_api_functions.sh
+
+setup_testenvironment
+
+#### TEST BEGIN ####
+
+#Local vars in test script
+##########################
+
+use_cr_https
+use_agent_rest_https
+use_sdnc_https
+use_simulator_https
+use_mr_https
+
+if [ "$PMS_VERSION" == "V2" ]; then
+    notificationurl=$CR_SERVICE_PATH"/test"
+else
+    echo "Version V2 of PMS is needed, exiting..."
+    exit 1
+fi
+
+generate_policy_uuid
+
+# Tested variants of REST/DMAAP/SDNC config
+TESTED_VARIANTS="REST   DMAAP   REST+SDNC   DMAAP+SDNC"
+for interface in $TESTED_VARIANTS ; do
+
+    echo "#####################################################################"
+    echo "#####################################################################"
+    echo "### Testing agent: $interface using https"
+    echo "#####################################################################"
+    echo "#####################################################################"
+
+    clean_environment
+
+    if [ $RUNMODE == "KUBE" ]; then
+        start_kube_proxy
+    fi
+
+    if [[ $interface = *"DMAAP"* ]]; then
+        use_agent_dmaap_https
+    else
+        use_agent_rest_https
+    fi
+
+    OSC_NUM_RICS=1
+    STD_NUM_RICS=1
+
+    start_ric_simulators  $RIC_SIM_PREFIX"_g1" $OSC_NUM_RICS OSC_2.1.0
+
+    start_ric_simulators  $RIC_SIM_PREFIX"_g2" $STD_NUM_RICS STD_1.1.3
+
+    start_ric_simulators $RIC_SIM_PREFIX"_g3" $STD_NUM_RICS STD_2.0.0
+
+    start_mr
+
+    start_control_panel $SIM_GROUP/$CONTROL_PANEL_COMPOSE_DIR/$CONTROL_PANEL_CONFIG_FILE
+
+    if [ ! -z "$NRT_GATEWAY_APP_NAME" ]; then
+        start_gateway $SIM_GROUP/$NRT_GATEWAY_COMPOSE_DIR/$NRT_GATEWAY_CONFIG_FILE
+    fi
+
+    if [[ $interface = *"SDNC"* ]]; then
+        start_sdnc
+        prepare_consul_config      SDNC    ".consul_config.json"
+    else
+        prepare_consul_config      NOSDNC  ".consul_config.json"
+    fi
+
+    start_policy_agent NORPOXY $SIM_GROUP/$POLICY_AGENT_COMPOSE_DIR/$POLICY_AGENT_CONFIG_FILE
+
+    set_agent_trace
+
+    if [ $RUNMODE == "DOCKER" ]; then
+        start_consul_cbs
+    fi
+
+    if [ $RUNMODE == "KUBE" ]; then
+        agent_load_config                       ".consul_config.json"
+    else
+        consul_config_app                      ".consul_config.json"
+    fi
+
+    # Check that all rics are synced in
+    api_equal json:rics 3 300
+
+    api_get_status 200
+
+    # Print the A1 version for OSC
+    for ((i=1; i<=$OSC_NUM_RICS; i++))
+    do
+        sim_print $RIC_SIM_PREFIX"_g1_"$i interface
+    done
+
+
+    # Print the A1 version for STD 1.X
+    for ((i=1; i<=$STD_NUM_RICS; i++))
+    do
+        sim_print $RIC_SIM_PREFIX"_g2_"$i interface
+    done
+
+    # Print the A1 version for STD 2.X
+    for ((i=1; i<=$STD_NUM_RICS; i++))
+    do
+        sim_print $RIC_SIM_PREFIX"_g3_"$i interface
+    done
+
+    #################################################################
+    ## REQ: Synchronize A1 Policy Information in RAN
+    #################################################################
+
+    # Load the polictypes in osc
+    for ((i=1; i<=$OSC_NUM_RICS; i++))
+    do
+        sim_put_policy_type 201 $RIC_SIM_PREFIX"_g1_"$i 100 demo-testdata/OSC/sim_qos.json
+        sim_put_policy_type 201 $RIC_SIM_PREFIX"_g1_"$i 20008 demo-testdata/OSC/sim_tsa.json
+    done
+
+    #Check the number of schemas and the individual schemas in OSC
+    api_equal json:policy-types 3 300
+
+    for ((i=1; i<=$OSC_NUM_RICS; i++))
+    do
+        api_equal json:policy-types?ric_id=$RIC_SIM_PREFIX"_g1_"$i 2 120
+    done
+
+    # Check the schemas in OSC
+    for ((i=1; i<=$OSC_NUM_RICS; i++))
+    do
+        api_get_policy_type 200 100 demo-testdata/OSC/qos-agent-modified.json
+        api_get_policy_type 200 20008 demo-testdata/OSC/tsa-agent-modified.json
+    done
+
+
+    # Load the polictypes in std
+    for ((i=1; i<=$STD_NUM_RICS; i++))
+    do
+        sim_put_policy_type 201 $RIC_SIM_PREFIX"_g3_"$i STD_QOS_0_2_0 demo-testdata/STD2/sim_qos.json
+        sim_put_policy_type 201 $RIC_SIM_PREFIX"_g3_"$i STD_QOS2_0.1.0 demo-testdata/STD2/sim_qos2.json
+    done
+
+    #Check the number of schemas and the individual schemas in STD
+    api_equal json:policy-types 5 120
+
+    for ((i=1; i<=$STD_NUM_RICS; i++))
+    do
+        api_equal json:policy-types?ric_id=$RIC_SIM_PREFIX"_g3_"$i 2 120
+    done
+
+    # Check the schemas in STD
+    for ((i=1; i<=$STD_NUM_RICS; i++))
+    do
+        api_get_policy_type 200 STD_QOS_0_2_0 demo-testdata/STD2/qos-agent-modified.json
+        api_get_policy_type 200 'STD_QOS2_0.1.0' demo-testdata/STD2/qos2-agent-modified.json
+    done
+
+    #Check the number of types
+    api_equal json:policy-types 5 120
+
+    #################################################################
+    ##  REQ: A1 Policy Type / Instance Operations
+    #################################################################
+
+    # Create policies
+    use_agent_rest_http
+
+    api_put_service 201 "Emergency-response-app" 0 "$CR_SERVICE_PATH/1"
+
+    # Create policies in OSC
+    for ((i=1; i<=$OSC_NUM_RICS; i++))
+    do
+        api_put_policy 201 "Emergency-response-app" $RIC_SIM_PREFIX"_g1_"$i 100 $((3000+$i)) NOTRANSIENT $notificationurl demo-testdata/OSC/piqos_template.json 1
+        api_put_policy 201 "Emergency-response-app" $RIC_SIM_PREFIX"_g1_"$i 20008 $((4000+$i)) NOTRANSIENT $notificationurl demo-testdata/OSC/pitsa_template.json 1
+    done
+
+
+    # Check the number of policies in OSC
+    for ((i=1; i<=$OSC_NUM_RICS; i++))
+    do
+        sim_equal $RIC_SIM_PREFIX"_g1_"$i num_instances 2
+    done
+
+
+    # Create policies in STD
+    for ((i=1; i<=$STD_NUM_RICS; i++))
+    do
+        api_put_policy 201 "Emergency-response-app" $RIC_SIM_PREFIX"_g2_"$i NOTYPE $((2100+$i)) NOTRANSIENT $notificationurl demo-testdata/STD/pi1_template.json 1
+        api_put_policy 201 "Emergency-response-app" $RIC_SIM_PREFIX"_g3_"$i STD_QOS_0_2_0 $((2300+$i)) NOTRANSIENT $notificationurl demo-testdata/STD2/pi1_template.json 1
+        api_put_policy 201 "Emergency-response-app" $RIC_SIM_PREFIX"_g3_"$i 'STD_QOS2_0.1.0' $((2400+$i)) NOTRANSIENT $notificationurl demo-testdata/STD2/pi1_template.json 1
+    done
+
+
+    # Check the number of policies in STD
+    for ((i=1; i<=$STD_NUM_RICS; i++))
+    do
+        sim_equal $RIC_SIM_PREFIX"_g2_"$i num_instances 1
+        sim_equal $RIC_SIM_PREFIX"_g3_"$i num_instances 2
+    done
+
+    #################################################################
+    ##  REQ: A1 Policy Instance Status Operations
+    #################################################################
+
+    # Check status STD
+    for ((i=1; i<=$STD_NUM_RICS; i++))
+    do
+        api_get_policy_status 200 $((2100+$i)) STD "UNDEFINED"
+        api_get_policy_status 200 $((2300+$i)) STD2 EMPTY EMPTY
+        api_get_policy_status 200 $((2400+$i)) STD2 EMPTY EMPTY
+    done
+
+    # Check status OSC
+    VAL='NOT IN EFFECT'
+    for ((i=1; i<=$OSC_NUM_RICS; i++))
+    do
+        api_get_policy_status 200 $((3000+$i)) OSC "$VAL" "false"
+        api_get_policy_status 200 $((4000+$i)) OSC "$VAL" "false"
+    done
+
+    # Note: Status callback is not tested since this callback (http POST) is made from the
+    # ricsim directly to the receiver of the status, i.e. the status does NOT
+    # pass through PMS
+
+    check_policy_agent_logs
+
+    if [[ $interface = *"SDNC"* ]]; then
+        check_sdnc_logs
+    fi
+
+    #### TEST COMPLETE ####
+
+    store_logs          "https__${interface}"
+
+done
+
+print_result
+
+auto_clean_environment
\ No newline at end of file
diff --git a/test/common/README.md b/test/common/README.md
index 120a826..a6c09e2 100644
--- a/test/common/README.md
+++ b/test/common/README.md
@@ -81,6 +81,47 @@
 `testsuite_common.sh` \
 Common functions for running two or more auto test scripts as a suite.
 
+## Integration of a new applicaton
+
+Integration a new application to the test environment involves the following steps.
+
+* Choose a short name for the application. Should be a uppcase name. For example, the NonRTRIC Gateway has NGW as short name.
+This short name shall be added to the testengine_config.sh. See that file for detailed instructions.
+
+* Create a file in this directory using the pattern `<application-name>_api_functions.sh`.
+This file must implement the following functions used by the test engine. Note that functions must include the application short name in the function name. If the application does not run in kubernetes, then the last three functions in the list can be omitted.
+
+| Function |
+|--|
+| __<app-short_name>_imagesetup |
+| __<app-short_name>_imagepull |
+| __<app-short_name>_imagebuild |
+| __<app-short_name>_image_data |
+| __<app-short_name>_kube_scale_zero |
+| __<app-short_name>_kube_scale_zero_and_wait |
+| __<app-short_name>_kube_delete_all |
+
+In addition, all other functions used for testing of the application shall also be added to the file. For example functions to start the application, setting interface parameters as well as functions to send rest call towards the api of the application and validating the result.
+
+* Add the application variables to api_curl.sh. This file contains a generic function to make rest calls to an api. It also supports switching betweeen direct rest calls or rest calls via messsage router.
+
+* Create a directory beneath in the simulator-group dir. This new directory shall contain docker-compose files, config files (with or without variable substitutions) and kubernetes resource files.
+
+All docker-compose files and all kubernetes resource files need to defined special lables. These lables are used by the test enginge to identify containers and resources started and used by the test engine.
+
+| Label for docker compose | Description |
+|--|--|
+| nrttest_app | shall contain the application short name |
+| nrttest_dp  | shall be set by a variable containing the display name, a short textual description of the applicaion |
+
+| Label for kubernetes resource | Description |
+|--|--|
+| autotest | shall contain the application short name |
+
+* Add mandatory image(s) and image tag(s) to the appropriate environment files for each release in the file(s) `test_env_<system>-<release-name>`.
+In addition, all other needed environment shall also be defined in these file.
+
+
 # Description of functions in testcase_common.sh #
 
 ## Script args ##
diff --git a/test/common/test_env-onap-honolulu.sh b/test/common/test_env-onap-honolulu.sh
index abbf824..559dab2 100644
--- a/test/common/test_env-onap-honolulu.sh
+++ b/test/common/test_env-onap-honolulu.sh
@@ -57,19 +57,29 @@
 # 6 XXX_REMOTE_RELEASE_ONAP: ONAP release images: <onap-release-nexus-repo><image-name>:<release-tag>
 # 7 XXX_PROXY: other images, not produced by the project: <proxy-nexus-repo><mage-name>:<proxy-tag>
 
+#############################################################################
+# Note:
+# The imgage tags for pms and sdnc are updated AFTER the release.
+# This means that the latest staging/snapshot images for these two components have
+# version one step (0.0.1 - bug-level) higher than the
+# latest release image version.
+
+# This is only applicable for ONAP images
+#############################################################################
+
 # Policy Agent image and tags
 POLICY_AGENT_IMAGE_BASE="onap/ccsdk-oran-a1policymanagementservice"
 POLICY_AGENT_IMAGE_TAG_LOCAL="1.1.2-SNAPSHOT"
 POLICY_AGENT_IMAGE_TAG_REMOTE_SNAPSHOT="1.1.2-SNAPSHOT"
 POLICY_AGENT_IMAGE_TAG_REMOTE="1.1.2-STAGING-latest" #Will use snapshot repo
-POLICY_AGENT_IMAGE_TAG_REMOTE_RELEASE="1.1.2"
+POLICY_AGENT_IMAGE_TAG_REMOTE_RELEASE="1.1.1"
 
 # SDNC A1 Controller remote image and tag
 SDNC_A1_CONTROLLER_IMAGE_BASE="onap/sdnc-image"
 SDNC_A1_CONTROLLER_IMAGE_TAG_LOCAL="2.1.3-SNAPSHOT" ###CHECK THIS
 SDNC_A1_CONTROLLER_IMAGE_TAG_REMOTE_SNAPSHOT="2.1.3-STAGING-latest"
 SDNC_A1_CONTROLLER_IMAGE_TAG_REMOTE="2.1.3-STAGING-latest"  #Will use snapshot repo
-SDNC_A1_CONTROLLER_IMAGE_TAG_REMOTE_RELEASE="2.1.3"
+SDNC_A1_CONTROLLER_IMAGE_TAG_REMOTE_RELEASE="2.1.2"
 
 #SDNC DB remote image and tag
 #The DB is part of SDNC so handled in the same way as SDNC
diff --git a/test/common/testcase_common.sh b/test/common/testcase_common.sh
index dc5415b..d969245 100755
--- a/test/common/testcase_common.sh
+++ b/test/common/testcase_common.sh
@@ -1873,8 +1873,8 @@
 	appcount=$1
 	shift
 
-	os_version=$(uname -a 2> /dev/null | awk '{print tolower($0)}' | grep "mircosoft")
-	if [[ "$os_version" == *"mircosoft"* ]]; then
+	os_version=$(uname -a 2> /dev/null | awk '{print tolower($0)}' | grep "microsoft")
+	if [[ "$os_version" == *"microsoft"* ]]; then
 		echo -e $YELLOW" Workaround for Linux on Win - delay container start, 1 sec, to make sure files mounted in the container are available on disk - WLS problem"$EYELLOW
 		sleep 1
 	fi
diff --git a/test/simulator-group/sdnc/app2.yaml b/test/simulator-group/sdnc/app2.yaml
index 116ce66..3a0f597 100644
--- a/test/simulator-group/sdnc/app2.yaml
+++ b/test/simulator-group/sdnc/app2.yaml
@@ -53,6 +53,8 @@
           value: 'true'
         - name: A1_TRUSTSTORE_PASSWORD
           value: $SDNC_A1_TRUSTSTORE_PASSWORD
+        - name: AAI_TRUSTSTORE_PASSWORD
+          value: 'changeit'
         command:
         - /opt/onap/sdnc/bin/startODL.sh
 ---