General improvements on CSIT scripts 90/139890/2
authoradheli.tavares <adheli.tavares@est.tech>
Thu, 19 Dec 2024 09:45:08 +0000 (09:45 +0000)
committeradheli.tavares <adheli.tavares@est.tech>
Fri, 10 Jan 2025 11:47:16 +0000 (11:47 +0000)
- some issues with functions order
- clear waiting times for docker containers to come up
- --local flag added to make it easier to run tests with local images

Issue-ID: POLICY-5239
Change-Id: I3bcbfd88f45110436b2b0fda16c61936ef919f95
Signed-off-by: adheli.tavares <adheli.tavares@est.tech>
compose/README.md
compose/get-versions.sh
compose/start-compose.sh
csit/README.md [new file with mode: 0644]
csit/resources/scripts/build-csit-docker-image.sh
csit/resources/scripts/get-cluster-info.sh
csit/resources/scripts/wait_for_rest.sh
csit/resources/tests/apex-slas-3.robot
csit/run-k8s-csit.sh
csit/run-project-csit.sh

index 290bdf4..dcc21c0 100644 (file)
@@ -53,10 +53,12 @@ policy-clamp-runtime-acm)
 ## Docker image download localization
 
 The docker images are always downloaded from nexus repository, but if needed to build a local
-image, edit the ``get-versions.sh`` script and change the variable ``LOCAL_IMAGES``
-to `true` or edit the image tag in the docker compose file.
-Changing the variable to `true` will ensure that the newly built images locally are being used
-by not requesting a download from nexus and using the image tagged as latest.
+image, do an export ``export USE_LOCAL_IMAGES=true`` or edit the image tag in the docker compose
+file. That will ensure that the newly built images locally are being used by not requesting a
+download from nexus and using the image tagged as latest.
+
+> When using the export command way, keep in mind that all policy images will need to be available
+> locally.
 
 
 ## Docker image versions
@@ -82,7 +84,8 @@ Use ``docker compose logs`` or `docker logs ${container_name}` instructions on h
 
 ## Uninstall
 
-Simply run the ``stop-compose.sh`` script. This will also generate logs from the services started with compose.
+Simply run the ``stop-compose.sh`` script. This will also generate logs from the services started
+with compose.
 
 ```sh
 ./stop-compose.sh
@@ -90,8 +93,8 @@ Simply run the ``stop-compose.sh`` script. This will also generate logs from the
 
 ## Database support
 
-From Oslo version onwards, this docker compose setup uses Postgres database as default; MariaDB is still available,
-but support might be limited.
+From Oslo version onwards, this docker compose setup uses Postgres database as default; MariaDB is
+still available, but support might be limited.
 
 To start docker compose with MariaDB, add a flag to use it:
 
@@ -104,16 +107,16 @@ To start docker compose with MariaDB, add a flag to use it:
 
 ### Docker compose files
 
-To make it easier and clear how the docker compose system works, there are three files describing the services
+To make it easier and clear how the docker compose system works, there are three files describing
+the services:
 - compose.common.yml
-  - Has policy services that don't connect directly to database: apex-pdp and distribution
   - Simulator service
-  - ACM-R Participants that don't connect directly to database.
+  - ACM-R Participants that don't connect directly to database
   - Messaging services (kafka, zookeeper)
   - Metrics services (prometheus, grafana, jaeger)
 - compose.postgres.yml
-  - All policy services that connect directly to database with Postgres configurations
   - Postgres database and policy-db-migrator working towards it
 - compose.mariadb.yml
-  - All policy services that connect directly to database with MariaDB configurations
   - MariaDB database and policy-db-migrator working towards it
+- compose.yml
+  - All the policy components.
index 0c2ef30..9d9b42b 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/bash
 # ============LICENSE_START====================================================
 #  Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
-#  Modification Copyright 2021-2024 Nordix Foundation.
+#  Modification Copyright 2021-2025 Nordix Foundation.
 #  Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
 #  Modifications Copyright 2024-2025 Deutsche Telekom
 # =============================================================================
@@ -25,8 +25,6 @@ if [ -z "${WORKSPACE}" ]; then
     export WORKSPACE
 fi
 
-LOCAL_IMAGES=false
-
 #default values
 export POLICY_MARIADB_VER=10.10.2
 echo POLICY_MARIADB_VER=${POLICY_MARIADB_VER}
@@ -34,7 +32,7 @@ echo POLICY_MARIADB_VER=${POLICY_MARIADB_VER}
 export POLICY_POSTGRES_VER=16.4
 echo POLICY_POSTGRES_VER=${POLICY_POSTGRES_VER}
 
-if [ -n "$LOCAL_IMAGES" ] && [ "$LOCAL_IMAGES" = "true" ]; then
+if [ -n "${USE_LOCAL_IMAGES}" ] && [ "${USE_LOCAL_IMAGES}" = "true" ]; then
     echo "Running with local images."
     export POLICY_DOCKER_VERSION="latest"
     export POLICY_MODELS_VERSION="latest"
@@ -51,6 +49,7 @@ if [ -n "$LOCAL_IMAGES" ] && [ "$LOCAL_IMAGES" = "true" ]; then
     export CONTAINER_LOCATION=""
 
 else
+    echo "Downloading latest released images..."
     export CONTAINER_LOCATION="nexus3.onap.org:10001/"
     GERRIT_BRANCH=$(awk -F= '$1 == "defaultbranch" { print $2 }' \
                         "${WORKSPACE}"/.gitreview)
index 013aba6..115b30e 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 # ============LICENSE_START====================================================
-#  Copyright (C) 2022-2024 Nordix Foundation.
+#  Copyright (C) 2022-2025 Nordix Foundation.
 # =============================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -53,6 +53,10 @@ do
       database=postgres
       shift
       ;;
+    --local)
+      export USE_LOCAL_IMAGES=true
+      shift
+      ;;
     *)
       component="$1"
       shift
diff --git a/csit/README.md b/csit/README.md
new file mode 100644 (file)
index 0000000..f0c4482
--- /dev/null
@@ -0,0 +1,43 @@
+# Running Policy Framework CSIT
+
+## Using Docker Compose environment
+
+Policy Framework Continuous System and Integration Tests are executed daily on jenkins jobs
+targeting master branch. The runs are available at https://jenkins.onap.org/view/policy/
+
+The CSIT suites are also used by developers as another guarantee that new code or changes
+delivered on main code do not affect the expected behaviour for the already delivered
+functionalities or new tests are added when a new functionality is added.
+
+To execute the tests on a local environment, the steps are the following:
+
+> all the instructions assume docker repository was cloned to /git/policy/docker
+
+- after cloning the project, go to ../docker/csit
+- to run a test, execute the run-project-csit.sh script
+
+`./run-project-csit.sh <policy-component>`
+
+The options for <policy-component> are:
+- api
+- pap
+- apex-pdp
+- clamp (for runtime-acm and participants)
+- drools-pdp
+- drools-applications
+- xacml-pdp
+- distribution
+- opa-pdp
+
+The command above with download the latest SNAPSHOT version available for the policy-component
+being tested. Version is collected from [PF Release Data](https://github.com/onap/policy-parent/blob/master/integration/src/main/resources/release/pf_release_data.csv)
+
+To start the containers with images generated in local environment, the script can be run with the
+flag `--local`
+
+`./run-project-csit.sh api --local`
+
+The command above with start the docker containers for `policy-api` and `policy-db-migrator` using
+the latest image created at the local environment. When using the flag `--local` it will look for
+all the policy components needed for the test suites to be executed. The support services like
+PostgreSQL, Kafka, Prometheus, Grafana will always be downloaded if not present.
index c80afc4..8b5aa7d 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -x
 #
-# Copyright 2024 Nordix Foundation.
+# Copyright 2024-2025 Nordix Foundation.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -37,7 +37,6 @@ fi
 GERRIT_BRANCH=$(awk -F= '$1 == "defaultbranch" { print $2 }' "${WORKSPACE}"/.gitreview)
 export ROBOT_DOCKER_IMAGE="policy-csit-robot"
 
-echo "Build docker image for robot framework"
 cd ${WORKSPACE}/csit/resources || exit
 
 docker image rm -f ${ROBOT_DOCKER_IMAGE}
index 92e92ee..75fe719 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 # ============LICENSE_START=======================================================
-#  Copyright (C) 2023-2024 Nordix Foundation. All rights reserved.
+#  Copyright (C) 2023-2025 Nordix Foundation. All rights reserved.
 #  Modifications Copyright © 2024 Deutsche Telekom
 # ================================================================================
 #
@@ -39,6 +39,10 @@ export OPA_PORT=30012
 export SIMULATOR_PORT=30904
 
 # Retrieve pod names
+function get_pod_name() {
+  microk8s kubectl get pods --no-headers -o custom-columns=':metadata.name' | grep $1
+}
+
 function get_pod_names() {
   export APEX_POD=$(get_pod_name apex)
   export PAP_POD=$(get_pod_name pap)
@@ -56,6 +60,10 @@ function get_pod_names() {
 }
 
 # Retrieve service names
+function get_svc_name() {
+  microk8s kubectl get svc --no-headers -o custom-columns=':metadata.name' | grep $1
+}
+
 function get_svc_names() {
   export APEX_SVC=$(get_svc_name policy-apex-pdp)
   export PAP_SVC=$(get_svc_name policy-pap)
@@ -72,47 +80,11 @@ function get_svc_names() {
   export POLICY_K8S_SVC=$(get_svc_name policy-clamp-ac-k8s-ppnt)
 }
 
-# Expose services in order to perform tests from JMeter
-function expose_services() {
-    expose_service $APEX_SVC
-    expose_service $PAP_SVC
-    expose_service $API_SVC
-    expose_service $XACML_SVC
-    expose_service_opa_pdp $OPA_SVC
-    expose_service $DROOLS_SVC
-    expose_service $DIST_SVC
-    expose_service $ACM_SVC
-    expose_service $POLICY_PPNT_SVC
-    expose_service $POLICY_HTTP_SVC
-    expose_service $POLICY_SIM_SVC
-    expose_service $POLICY_K8S_SVC
-
-    setup_message_router_svc
-    sleep 2
-    patch_ports
-}
-
-function get_pod_name() {
-  microk8s kubectl get pods --no-headers -o custom-columns=':metadata.name' | grep $1
-}
-
-function get_svc_name() {
-  microk8s kubectl get svc --no-headers -o custom-columns=':metadata.name' | grep $1
-}
-
-function expose_service_opa_pdp() {
-  microk8s kubectl expose service $1 --name $1"-svc" --type NodePort --protocol TCP --port 8282 --target-port 8282
-}
-
-function expose_service() {
-  microk8s kubectl expose service $1 --name $1"-svc" --type NodePort --protocol TCP --port 6969 --target-port 6969
-}
-
+# Assign set port values
 function patch_port() {
   microk8s kubectl patch service "$1-svc" --namespace=default --type='json' --patch='[{"op": "replace", "path": "/spec/ports/0/nodePort", "value":'"$2"'}]'
 }
 
-# Assign set port values
 function patch_ports() {
   patch_port "$APEX_SVC" $APEX_PORT
   patch_port "$API_SVC" $API_PORT
@@ -133,6 +105,34 @@ function setup_message_router_svc() {
   microk8s kubectl patch service message-router-svc --namespace=default --type='json' --patch='[{"op": "replace", "path": "/spec/ports/0/nodePort", "value":'"$SIMULATOR_PORT"'}]'
 }
 
+# Expose services in order to perform tests from JMeter
+function expose_service() {
+  microk8s kubectl expose service $1 --name $1"-svc" --type NodePort --protocol TCP --port 6969 --target-port 6969
+}
+
+function expose_service_opa_pdp() {
+  microk8s kubectl expose service $1 --name $1"-svc" --type NodePort --protocol TCP --port 8282 --target-port 8282
+}
+
+function expose_services() {
+    expose_service $APEX_SVC
+    expose_service $PAP_SVC
+    expose_service $API_SVC
+    expose_service $XACML_SVC
+    expose_service $DROOLS_SVC
+    expose_service $DIST_SVC
+    expose_service $ACM_SVC
+    expose_service $POLICY_PPNT_SVC
+    expose_service $POLICY_HTTP_SVC
+    expose_service $POLICY_SIM_SVC
+    expose_service $POLICY_K8S_SVC
+    expose_service_opa_pdp $OPA_SVC
+
+    setup_message_router_svc
+    sleep 2
+    patch_ports
+}
+
 ####MAIN###
 get_pod_names
 get_svc_names
index 9732bc5..b51a7fe 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 # ============LICENSE_START====================================================
-# Copyright (C) 2023-2024 Nordix Foundation.
+# Copyright (C) 2023-2025 Nordix Foundation.
 # =============================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -49,7 +49,7 @@ do
     export port="$2"
     shift
     shift
-    echo "Waiting for REST to come up on $host port $port..."
+    echo "Checking if REST port $port is open on $host ..."
     while [ "$tmout" -gt 0 ]
     do
         if command -v docker > /dev/null 2>&1
@@ -67,7 +67,7 @@ do
         fi
     done
     if [ $rc -ne 0 ]; then
-        echo "$host port $port REST cannot be detected"
+        echo "REST port $port cannot be detected on host $host"
         exit $rc
     fi
 done
index 1ceb9b7..c8fc258 100644 (file)
@@ -17,7 +17,7 @@ Healthcheck
      Set Suite Variable    ${pdpName}    ${resp.json()['name']}
 
 ValidatePolicyExecutionAndEventRateLowComplexity
-    [Documentation]  Validate that a moderate complexity policity can be executed in less than 100ms and minimum 30 events triggered per second
+    [Documentation]  Validate that a moderate complexity policy can be executed in less than 100ms and minimum 30 events triggered per second
     Set Test Variable    ${policyName}    onap.policies.apex.pnf.Test
     ${postjson}=  Get File  ${CURDIR}/data/${policyName}.json
     CreatePolicySuccessfully  /policy/api/v1/policytypes/onap.policies.native.Apex/versions/1.0.0/policies  ${postjson}  ${policyName}  1.0.0
@@ -31,7 +31,7 @@ ValidatePolicyExecutionAndEventRateLowComplexity
     ValidateEventExecution    ${eventStartTime}  ${eventEndTime}  30
 
 ValidatePolicyExecutionAndEventRateHighComplexity
-    [Documentation]  Validate that a high complexity policity can be executed in less than 5000ms and minimum 0.6 events triggered per second
+    [Documentation]  Validate that a high complexity policy can be executed in less than 5000ms and minimum 0.6 events triggered per second
     Set Test Variable    ${policyName}    onap.policies.apex.pnf.metadataSet.Test
     ${postjson}=  Get File  ${CURDIR}/data/${policyName}.json
     CreatePolicySuccessfully  /policy/api/v1/policytypes/onap.policies.native.Apex/versions/1.0.0/policies  ${postjson}  ${policyName}  1.0.0
@@ -47,7 +47,7 @@ ValidatePolicyExecutionAndEventRateHighComplexity
     ValidateEventExecution    ${eventStartTime}  ${eventEndTime}  0.6
 
 ValidatePolicyExecutionAndEventRateModerateComplexity
-    [Documentation]  Validate that a low complexity policity can be executed in less than 1000ms and minimum 3 events triggered per second
+    [Documentation]  Validate that a low complexity policy can be executed in less than 1000ms and minimum 3 events triggered per second
     Set Test Variable    ${policyName}    onap.policies.native.apex.Sampledomain
     ${postjson}=  Get File  ${CURDIR}/data/${policyName}.json
     CreatePolicySuccessfully  /policy/api/v1/policytypes/onap.policies.native.Apex/versions/1.0.0/policies  ${postjson}  ${policyName}  1.0.0
index 3f6e5a4..7d93fa8 100755 (executable)
@@ -1,10 +1,9 @@
 #!/bin/bash
 #
 # ============LICENSE_START====================================================
-#  Copyright (C) 2022-2024 Nordix Foundation.
+#  Copyright (C) 2022-2025 Nordix Foundation.
 #  Modifications Copyright © 2024 Deutsche Telekom
 # =============================================================================
-# 
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -170,6 +169,32 @@ function teardown_cluster() {
     echo "MicroK8s Cluster removed"
 }
 
+function clone_models() {
+
+    # download models examples
+    git clone -b "${GERRIT_BRANCH}" --single-branch https://github.com/onap/policy-models.git "${WORKSPACE}"/csit/resources/tests/models
+
+    # create a couple of variations of the policy definitions
+    sed -e 's!Measurement_vGMUX!ADifferentValue!' \
+        tests/models/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.json \
+        >tests/models/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.v1_2.json
+
+    sed -e 's!"version": "1.0.0"!"version": "2.0.0"!' \
+        -e 's!"policy-version": 1!"policy-version": 2!' \
+        tests/models/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.json \
+        >tests/models/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.v2.json
+}
+
+function copy_csar_file() {
+    zip -F ${DISTRIBUTION_CSAR}/sample_csar_with_apex_policy.csar \
+        --out ${DISTRIBUTION_CSAR}/csar_temp.csar -q
+    # Remake temp directory
+    sudo rm -rf "${DIST_TEMP_FOLDER}"
+    sudo mkdir "${DIST_TEMP_FOLDER}"
+    sudo cp ${DISTRIBUTION_CSAR}/csar_temp.csar ${DISTRIBUTION_CSAR}/temp.csar
+    sudo mv ${DISTRIBUTION_CSAR}/temp.csar ${DIST_TEMP_FOLDER}/sample_csar_with_apex_policy.csar
+}
+
 function build_robot_image() {
     echo "Build docker image for robot framework"
     cd ${WORKSPACE}/csit/resources || exit
@@ -186,6 +211,37 @@ function build_robot_image() {
     echo "---------------------------------------------"
 }
 
+function push_acelement_chart() {
+    echo "Pushing acelement chart to the chartmuseum repo..."
+    helm repo add policy-chartmuseum http://localhost:30208
+
+    # download clamp repo
+    git clone -b "${GERRIT_BRANCH}" --single-branch https://github.com/onap/policy-clamp.git "${WORKSPACE}"/csit/resources/tests/clamp
+    ACELEMENT_CHART=${WORKSPACE}/csit/resources/tests/clamp/examples/src/main/resources/clamp/acm/acelement-helm/acelement
+    helm cm-push $ACELEMENT_CHART policy-chartmuseum
+    helm repo update
+    rm -rf ${WORKSPACE}/csit/resources/tests/clamp/
+    echo "-------------------------------------------"
+}
+
+function print_robot_log() {
+    count_pods=0
+    while [[ ${count_pods} -eq 0 ]]; do
+        echo "Waiting for pods to come up..."
+        sleep 5
+        count_pods=$(kubectl get pods --output name | wc -l)
+    done
+    robotpod=$(kubectl get po | grep policy-csit)
+    podName=$(echo "$robotpod" | awk '{print $1}')
+    echo "The robot tests will begin once the policy components {${READINESS_CONTAINERS[*]}} are up and running..."
+    kubectl wait --for=jsonpath='{.status.phase}'=Running --timeout=18m pod/"$podName"
+    echo "Policy deployment status:"
+    kubectl get po
+    kubectl get all -A
+    echo "Robot Test logs:"
+    kubectl logs -f "$podName"
+}
+
 function start_csit() {
     build_robot_image
     if [ "${?}" -eq 0 ]; then
@@ -212,48 +268,14 @@ function start_csit() {
     fi
 }
 
-function print_robot_log() {
-    count_pods=0
-    while [[ ${count_pods} -eq 0 ]]; do
-        echo "Waiting for pods to come up..."
-        sleep 5
-        count_pods=$(kubectl get pods --output name | wc -l)
-    done
-    robotpod=$(kubectl get po | grep policy-csit)
-    podName=$(echo "$robotpod" | awk '{print $1}')
-    echo "The robot tests will begin once the policy components {${READINESS_CONTAINERS[*]}} are up and running..."
-    kubectl wait --for=jsonpath='{.status.phase}'=Running --timeout=18m pod/"$podName"
-    echo "Policy deployment status:"
-    kubectl get po
-    kubectl get all -A
-    echo "Robot Test logs:"
-    kubectl logs -f "$podName"
-}
-
-function clone_models() {
-
-    # download models examples
-    git clone -b "${GERRIT_BRANCH}" --single-branch https://github.com/onap/policy-models.git "${WORKSPACE}"/csit/resources/tests/models
-
-    # create a couple of variations of the policy definitions
-    sed -e 's!Measurement_vGMUX!ADifferentValue!' \
-        tests/models/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.json \
-        >tests/models/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.v1_2.json
-
-    sed -e 's!"version": "1.0.0"!"version": "2.0.0"!' \
-        -e 's!"policy-version": 1!"policy-version": 2!' \
-        tests/models/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.json \
-        >tests/models/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.v2.json
-}
-
-function copy_csar_file() {
-    zip -F ${DISTRIBUTION_CSAR}/sample_csar_with_apex_policy.csar \
-        --out ${DISTRIBUTION_CSAR}/csar_temp.csar -q
-    # Remake temp directory
-    sudo rm -rf "${DIST_TEMP_FOLDER}"
-    sudo mkdir "${DIST_TEMP_FOLDER}"
-    sudo cp ${DISTRIBUTION_CSAR}/csar_temp.csar ${DISTRIBUTION_CSAR}/temp.csar
-    sudo mv ${DISTRIBUTION_CSAR}/temp.csar ${DIST_TEMP_FOLDER}/sample_csar_with_apex_policy.csar
+function install_chartmuseum () {
+    echo "---------------------------------------------"
+    echo "Installing Chartmuseum helm repository..."
+    helm repo add chartmuseum-git https://chartmuseum.github.io/charts
+    helm repo update
+    helm install policy-chartmuseum chartmuseum-git/chartmuseum --set env.open.DISABLE_API=false --set service.type=NodePort --set service.nodePort=30208
+    helm plugin install https://github.com/chartmuseum/helm-push
+    echo "---------------------------------------------"
 }
 
 function set_project_config() {
@@ -328,36 +350,13 @@ function set_project_config() {
 
 }
 
-function install_chartmuseum () {
-    echo "---------------------------------------------"
-    echo "Installing Chartmuseum helm repository..."
-    helm repo add chartmuseum-git https://chartmuseum.github.io/charts
-    helm repo update
-    helm install policy-chartmuseum chartmuseum-git/chartmuseum --set env.open.DISABLE_API=false --set service.type=NodePort --set service.nodePort=30208
-    helm plugin install https://github.com/chartmuseum/helm-push
-    echo "---------------------------------------------"
-}
-
-function push_acelement_chart() {
-    echo "Pushing acelement chart to the chartmuseum repo..."
-    helm repo add policy-chartmuseum http://localhost:30208
-
-    # download clamp repo
-    git clone -b "${GERRIT_BRANCH}" --single-branch https://github.com/onap/policy-clamp.git "${WORKSPACE}"/csit/resources/tests/clamp
-    ACELEMENT_CHART=${WORKSPACE}/csit/resources/tests/clamp/examples/src/main/resources/clamp/acm/acelement-helm/acelement
-    helm cm-push $ACELEMENT_CHART policy-chartmuseum
-    helm repo update
-    rm -rf ${WORKSPACE}/csit/resources/tests/clamp/
-    echo "-------------------------------------------"
-}
-
 function get_pod_name() {
   pods=$(kubectl get pods --no-headers -o custom-columns=':metadata.name' | grep $1)
   read -rd '' -a pod_array <<< "$pods"
   echo "${pod_array[@]}"
 }
 
-wait_for_pods_running() {
+function wait_for_pods_running() {
   local namespace="$1"
   shift
   local timeout_seconds="$1"
index 1c5c2f1..9b2c769 100755 (executable)
@@ -3,7 +3,7 @@
 # Copyright 2016-2017 Huawei Technologies Co., Ltd.
 # Modification Copyright 2019 © Samsung Electronics Co., Ltd.
 # Modification Copyright 2021 © AT&T Intellectual Property.
-# Modification Copyright 2021-2024 Nordix Foundation.
+# Modification Copyright 2021-2025 Nordix Foundation.
 # Modifications Copyright 2024 Deutsche Telekom
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # limitations under the License.
 #
 
+SKIP_BUILDING_ROBOT_IMG=false
+DO_NOT_TEARDOWN=false
+
 # even with forced finish, clean up docker containers
 function on_exit(){
     rm -rf ${CSAR_DIR}/csar_temp.csar
 
-    # teardown of compose containers for acm-replicas doesn't work with normal stop-compose script
-    if [ "${ACM_REPLICA_TEARDOWN}" = true ]; then
-        source ${DOCKER_COMPOSE_DIR}/start-acm-replica.sh --stop --replicas=2
-    elif [ "${APEX_REPLICA_TEARDOWN}" = true ]; then
-        source ${DOCKER_COMPOSE_DIR}/start-multiple-pdp.sh --stop --replicas=2
-    else
-        source ${DOCKER_COMPOSE_DIR}/stop-compose.sh ${PROJECT}
+    if [ "${DO_NOT_TEARDOWN}" = false ]; then
+        # teardown of compose containers for acm-replicas doesn't work with normal stop-compose script
+        if [ "${ACM_REPLICA_TEARDOWN}" = true ]; then
+            source ${DOCKER_COMPOSE_DIR}/start-acm-replica.sh --stop --replicas=2
+        elif [ "${APEX_REPLICA_TEARDOWN}" = true ]; then
+            source ${DOCKER_COMPOSE_DIR}/start-multiple-pdp.sh --stop --replicas=2
+        else
+            source ${DOCKER_COMPOSE_DIR}/stop-compose.sh ${PROJECT}
+        fi
+
+        mv ${DOCKER_COMPOSE_DIR}/*.log ${ROBOT_LOG_DIR}
     fi
 
-    mv ${DOCKER_COMPOSE_DIR}/*.log ${ROBOT_LOG_DIR}
     exit $RC
 }
 
@@ -91,7 +97,8 @@ function check_rest_endpoint() {
 function setup_clamp() {
     export ROBOT_FILES="policy-clamp-test.robot clamp-slas.robot"
     source ${DOCKER_COMPOSE_DIR}/start-compose.sh policy-clamp-runtime-acm --grafana
-    sleep 30
+    echo "Waiting 2 minutes acm-runtime and participants to start..."
+    sleep 120
     check_rest_endpoint "${ACM_PORT}"
 }
 
@@ -101,8 +108,8 @@ function setup_clamp_replica() {
     export TEST_ENV="docker"
     export PROJECT=clamp
     source ${DOCKER_COMPOSE_DIR}/start-acm-replica.sh --start --replicas=2
-    echo "Waiting a minute for the replicas to be started..."
-    sleep 60
+    echo "Waiting 2 minutes for the replicas to be started..."
+    sleep 120
     # checking on apex-pdp status because acm-r replicas only start after apex-pdp is running
     check_rest_endpoint ${PAP_PORT}
     check_rest_endpoint ${APEX_PORT}
@@ -113,31 +120,37 @@ function setup_clamp_replica() {
 function setup_api() {
     export ROBOT_FILES="api-test.robot api-slas.robot"
     source ${DOCKER_COMPOSE_DIR}/start-compose.sh api --grafana
-    sleep 10
+    echo "Waiting 1 minute for policy-api to start..."
+    sleep 60
     check_rest_endpoint ${API_PORT}
 }
 
 function setup_pap() {
     export ROBOT_FILES="pap-test.robot pap-slas.robot"
     source ${DOCKER_COMPOSE_DIR}/start-compose.sh apex-pdp --grafana
-    sleep 10
+    echo "Waiting 1 minute for policy-pap to start..."
+    sleep 60
     check_rest_endpoint ${PAP_PORT}
+    check_rest_endpoint ${APEX_PORT}
+    apex_healthcheck
 }
 
 function setup_apex() {
     export ROBOT_FILES="apex-pdp-test.robot apex-slas.robot"
     source ${DOCKER_COMPOSE_DIR}/start-compose.sh apex-pdp --grafana
-    sleep 10
+    echo "Waiting 1 minute for apex-pdp to start..."
+    sleep 60
     check_rest_endpoint ${PAP_PORT}
     check_rest_endpoint ${APEX_PORT}
     apex_healthcheck
 }
 
 function setup_apex_medium() {
-    export SUITES="apex-slas-3.robot"
+    export ROBOT_FILES="apex-slas-3.robot"
     export APEX_REPLICA_TEARDOWN=true
     source ${DOCKER_COMPOSE_DIR}/start-multiple-pdp.sh --start --replicas=3
-    sleep 10
+    echo "Waiting 1 minute for apex-pdp to start..."
+    sleep 60
     check_rest_endpoint ${PAP_PORT}
     check_rest_endpoint ${APEX_PORT}
     apex_healthcheck
@@ -147,7 +160,8 @@ function setup_apex_large() {
     export ROBOT_FILES="apex-slas-10.robot"
     export APEX_REPLICA_TEARDOWN=true
     source ${DOCKER_COMPOSE_DIR}/start-multiple-pdp.sh --start --replicas=10
-    sleep 10
+    echo "Waiting 1 minute for apex-pdp to start..."
+    sleep 60
     check_rest_endpoint ${PAP_PORT}
     check_rest_endpoint ${APEX_PORT}
     apex_healthcheck
@@ -156,33 +170,35 @@ function setup_apex_large() {
 function setup_drools_apps() {
     export ROBOT_FILES="drools-applications-test.robot drools-applications-slas.robot"
     source ${DOCKER_COMPOSE_DIR}/start-compose.sh drools-applications --grafana
-    sleep 10
+    echo "Waiting 1 minute for drools-pdp and drools-applications to start..."
+    sleep 60
     check_rest_endpoint ${PAP_PORT}
-    sleep 10
     check_rest_endpoint ${DROOLS_APPS_PORT}
-    sleep 10
     check_rest_endpoint ${DROOLS_APPS_TELEMETRY_PORT}
 }
 
 function setup_xacml_pdp() {
     export ROBOT_FILES="xacml-pdp-test.robot xacml-pdp-slas.robot"
     source ${DOCKER_COMPOSE_DIR}/start-compose.sh xacml-pdp --grafana
-    sleep 10
+    echo "Waiting 1 minute for xacml-pdp to start..."
+    sleep 60
     check_rest_endpoint "${XACML_PORT}"
 }
 
 function setup_opa_pdp() {
     export ROBOT_FILES="opa-pdp-test.robot"
     export PROJECT="opa-pdp"
-    source ${DOCKER_COMPOSE_DIR}/start-compose.sh opa-pdp --grafana
+    source ${DOCKER_COMPOSE_DIR}/start-compose.sh opa-pdp
+    echo "Waiting 3 minutes for OPA-PDP to start..."
     sleep 180
-    bash ${SCRIPTS}/wait_for_rest.sh localhost "${OPA_PDP_PORT}"
+    check_rest_endpoint "${OPA_PDP_PORT}"
 }
 
 function setup_drools_pdp() {
     export ROBOT_FILES="drools-pdp-test.robot"
     source ${DOCKER_COMPOSE_DIR}/start-compose.sh drools-pdp --grafana
-    sleep 30
+    echo "Waiting 1 minute for drools-pdp to start..."
+    sleep 60
     check_rest_endpoint ${DROOLS_TELEMETRY_PORT}
 }
 
@@ -195,8 +211,11 @@ function setup_distribution() {
 
     export ROBOT_FILES="distribution-test.robot"
     source ${DOCKER_COMPOSE_DIR}/start-compose.sh distribution --grafana
-    sleep 10
+    echo "Waiting 1 minute for distribution to start..."
+    sleep 60
     check_rest_endpoint "${DIST_PORT}"
+    check_rest_endpoint ${APEX_PORT}
+    apex_healthcheck
 }
 
 function build_robot_image() {
@@ -233,10 +252,6 @@ function set_project_config() {
         setup_apex
         ;;
 
-    apex-pdp-postgres | policy-apex-pdp-postgres)
-        setup_apex
-        ;;
-
     apex-pdp-medium | policy-apex-pdp-medium)
         setup_apex_medium
         ;;
@@ -275,6 +290,33 @@ function set_project_config() {
 # ensure that teardown and other finalizing steps are always executed
 trap on_exit EXIT
 
+# start the script
+
+# Parse the command-line arguments
+while [[ $# -gt 0 ]]
+do
+  key="$1"
+
+  case $key in
+    --skip-build-csit)
+      export SKIP_BUILDING_ROBOT_IMG=true
+      shift
+      ;;
+    --local)
+      export USE_LOCAL_IMAGES=true
+      shift
+      ;;
+    --no-exit)
+      export DO_NOT_TEARDOWN=true
+      shift
+      ;;
+    *)
+      export PROJECT="${1}"
+      shift
+      ;;
+  esac
+done
+
 # setup all directories used for test resources
 if [ -z "${WORKSPACE}" ]; then
     WORKSPACE=$(git rev-parse --show-toplevel)
@@ -282,7 +324,6 @@ if [ -z "${WORKSPACE}" ]; then
 fi
 
 export GERRIT_BRANCH=$(awk -F= '$1 == "defaultbranch" { print $2 }' "${WORKSPACE}"/.gitreview)
-export PROJECT="${1}"
 export ROBOT_LOG_DIR="${WORKSPACE}/csit/archives/${PROJECT}"
 export SCRIPTS="${WORKSPACE}/csit/resources/scripts"
 export CSAR_DIR="${WORKSPACE}/csit/resources/tests/data/csar"
@@ -319,7 +360,7 @@ unset http_proxy https_proxy
 export ROBOT_FILES
 
 # use a separate script to build a CSIT docker image, to isolate the test run
-if [ "${2}" == "--skip-build-csit" ]; then
+if [ "${SKIP_BUILDING_ROBOT_IMG}" == "true" ]; then
     echo "Skipping build csit robot image"
 else
     build_robot_image