Setup automated tests with two replicas of cps-and-ncmp

- this change for two test suits: CSIT and K6
- increase cps-and-ncmp replicas to 2
- introduce nginx as load-balancer
- set proxies inside nginx for the cps-and-ncmp URI paths
- upgrade hazelcast-spring to 5.3.7

Issue-ID: CPS-2038

Change-Id: If1b6c1e1218af16b24cc061507ea9b25d277d143
Signed-off-by: halil.cakal <halil.cakal@est.tech>
diff --git a/cps-dependencies/pom.xml b/cps-dependencies/pom.xml
index 380c00a..16b1697 100644
--- a/cps-dependencies/pom.xml
+++ b/cps-dependencies/pom.xml
@@ -146,7 +146,7 @@
             <dependency>
                 <groupId>com.hazelcast</groupId>
                 <artifactId>hazelcast-spring</artifactId>
-                <version>5.3.1</version>
+                <version>5.3.7</version>
             </dependency>
             <dependency>
                 <groupId>com.squareup.okhttp3</groupId>
diff --git a/csit/run-csit.sh b/csit/run-csit.sh
index 0981fc6..7f8f6b5 100755
--- a/csit/run-csit.sh
+++ b/csit/run-csit.sh
@@ -2,6 +2,7 @@
 #
 # Copyright 2016-2017 Huawei Technologies Co., Ltd.
 # Modification Copyright 2019-2021 © Samsung Electronics Co., Ltd.
+# Modification Copyright (C) 2024 Nordix Foundation.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -186,6 +187,10 @@
 rm -rf "$WORKSPACE/archives/$TESTPLAN"
 mkdir -p "$WORKSPACE/archives/$TESTPLAN"
 
+rm -rf "$WORKSPACE/nginx-log"
+mkdir -p "$WORKSPACE/nginx-log"
+chmod -R 755 "$WORKSPACE/nginx-log"
+
 TESTPLANDIR="${WORKSPACE}/${TESTPLAN}"
 
 # Run installation of prerequired libraries
diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml
index 5620c4c..f75915a 100644
--- a/docker-compose/docker-compose.yml
+++ b/docker-compose/docker-compose.yml
@@ -43,11 +43,7 @@
           memory: 3G
 
   cps-and-ncmp:
-    container_name: cps-and-ncmp
     image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/cps-and-ncmp:${CPS_VERSION:-latest}
-    ports:
-      - ${CPS_CORE_PORT:-8883}:8080
-      # - ${CPS_CORE_DEBUG_PORT:-5005}:5005
     environment:
       CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
       CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
@@ -58,11 +54,11 @@
       DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
       KAFKA_BOOTSTRAP_SERVER: kafka:29092
       notification.enabled: 'true'
-      # JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
     restart: unless-stopped
     depends_on:
       - dbpostgresql
     deploy:
+      replicas: 2
       resources:
         reservations:
           cpus: '2'
@@ -71,6 +67,18 @@
           cpus: '3'
           memory: 3G
 
+  nginx:
+    container_name: nginx-loadbalancer
+    image: nginx:latest
+    ports:
+      - ${CPS_CORE_PORT:-8883}:80
+    depends_on:
+      - cps-and-ncmp
+    volumes:
+      - ./nginx.conf:/etc/nginx/nginx.conf
+      - ./proxy_params:/etc/nginx/proxy_params
+      - ../csit/nginx-log:/var/log/nginx
+
   ### if kafka is not required comment out zookeeper and kafka ###
   zookeeper:
     image: confluentinc/cp-zookeeper:6.2.1
diff --git a/docker-compose/nginx.conf b/docker-compose/nginx.conf
new file mode 100644
index 0000000..17fad1b
--- /dev/null
+++ b/docker-compose/nginx.conf
@@ -0,0 +1,52 @@
+#  ============LICENSE_START===============================================
+#  Copyright (C) 2024 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=================================================
+
+events { }
+
+http {
+
+    # Add more server entries here for scaling or load balancing
+    upstream cps-and-ncmp {
+        server cps-and-ncmp:8080;
+    }
+
+    server {
+        listen 80;
+
+        # Root location proxying
+        location / {
+            proxy_pass http://cps-and-ncmp;
+            include /etc/nginx/proxy_params;    # Include common proxy parameters
+        }
+
+        location /swagger-ui/ {     # Swagger UI location
+            proxy_pass http://cps-and-ncmp/swagger-ui/;
+        }
+
+        location /v3/api-docs/ {    # API docs location
+            proxy_pass http://cps-and-ncmp/v3/api-docs/;
+        }
+
+        location /actuator/health { # Actuator health endpoint
+            proxy_pass http://cps-and-ncmp/actuator/health;
+        }
+
+        location /actuator/health/readiness {    # Actuator readiness endpoint
+            proxy_pass http://cps-and-ncmp/actuator/health/readiness;
+        }
+
+    }
+}
diff --git a/docker-compose/proxy_params b/docker-compose/proxy_params
new file mode 100644
index 0000000..ab092a9
--- /dev/null
+++ b/docker-compose/proxy_params
@@ -0,0 +1,4 @@
+proxy_set_header Host $host;
+proxy_set_header X-Real-IP $remote_addr;
+proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+proxy_set_header X-Forwarded-Proto $scheme;
\ No newline at end of file
diff --git a/k6-tests/setup.sh b/k6-tests/setup.sh
index 4805e2e..86f6d26 100755
--- a/k6-tests/setup.sh
+++ b/k6-tests/setup.sh
@@ -18,5 +18,13 @@
 docker-compose -f ../docker-compose/docker-compose.yml --profile dmi-stub up -d
 
 echo "Waiting for CPS to start..."
-READY_MESSAGE='Processing module sync fetched 0 advised cm handles from DB'
-docker logs cps-and-ncmp -f | grep -m 1 "$READY_MESSAGE" >/dev/null || true
+READY_MESSAGE="Processing module sync fetched 0 advised cm handles from DB"
+
+# Get the container IDs of the cps-and-ncmp replicas
+CONTAINER_IDS=$(docker ps --filter "name=cps-and-ncmp" --format "{{.ID}}")
+
+# Check the logs for each container
+for CONTAINER_ID in $CONTAINER_IDS; do
+    echo "Checking logs for container: $CONTAINER_ID"
+    docker logs "$CONTAINER_ID" -f | grep -m 1 "$READY_MESSAGE" >/dev/null || true
+done