Refactore SDNC/R robot test suite for K-Release 80/128980/2
authorAlexander Dehn <alexander.dehn@highstreet-technologies.com>
Thu, 28 Apr 2022 16:14:09 +0000 (16:14 +0000)
committerAlexander Dehn <alexander.dehn@highstreet-technologies.com>
Thu, 28 Apr 2022 16:43:53 +0000 (16:43 +0000)
add improvements SDNC ready state detection

Issue-ID: SDNC-1682
Signed-off-by: Alexander Dehn <alexander.dehn@highstreet-technologies.com>
Change-Id: I6b9829b5187f9c27ff9c2fab6b9a7381ce563b25

Former-commit-id: 83da3b4380d992d5891ed8e35b305358db9af4ff

14 files changed:
csit/plans/sdnr/setup.sh
csit/plans/sdnr/testdata/nts-networkfunctions.csv
csit/plans/sdnr/testplan.txt
csit/run-csit.sh
csit/scripts/sdnr/docker-compose/.env
csit/scripts/sdnr/docker-compose/docker-compose-nts-networkfunction.yaml
csit/scripts/sdnr/docker-compose/nts-networkfunctions-launch.sh
csit/scripts/sdnr/sdnr-launch.sh
csit/scripts/sdnr/sdnr-teardown.sh
csit/tests/sdnr/functional/devicemanager/_templates/10_lifecycleNetconfSsh/devicemanagerlifecycle_netconf.robot
csit/tests/sdnr/functional/devicemanager/_templates/20_pnfRegistration/pnfRegistration.robot
csit/tests/sdnr/functional/devicemanager/_templates/21_alarmNotificationVES/alarmNotificationVes.robot
csit/tests/sdnr/functional/devicemanager/_templates/22_alarmNotificationNETCONF/alarmNotificationNetconf.robot
csit/tests/sdnr/healthcheck/20_healthcheckSUT.robot

index 5fa5f7b..8f0d296 100755 (executable)
@@ -36,6 +36,15 @@ onap_dependent_components_launch
 nts_networkfunctions_launch ${WORKSPACE}/plans/sdnr/testdata/nts-networkfunctions.csv
 sdnr_launch
 
+## environment for SDNC/R specific robot test runs
+## Ready state will be checked every SDNC_READY_RETRY_PERIOD seconds
+# SDNC_READY_RETRY_PERIOD=15
+## SDNC ready state will be checked max SDNC_READY_TIMEOUT seconds
+# SDNC_READY_TIMEOUT=450
+
+# if jenkins should be ok without running robots TCS's
+# SDNC_RELEASE_WITHOUT_ROBOT=true
+
 #Pass any variables required by Robot test suites in ROBOT_VARIABLES
 ROBOT_VARIABLES="--variablefile=${WORKSPACE}/plans/sdnr/testdata/localhost.py"
 ROBOT_IMAGE="hightec/sdnc-test-lib:v0.10.0"
index c2ccb2d..0b0970d 100644 (file)
@@ -1,7 +1,6 @@
-NAME,NTS_NF_DOCKER_REPOSITORY,NTS_NF_IMAGE_NAME,NTS_NF_IMAGE_TAG,NTSFUNC-IP,NTS_HOST_NETCONF_SSH_BASE_PORT,NTS_HOST_NETCONF_TLS_BASE_PORT,NTS_NF_SSH_CONNECTIONS,NTS_NF_TLS_CONNECTIONS
-ONF-CORE-1-2,docker.io/hightec/,nts-ng-onf-core-1-2,1.3.4,172.40.0.30,30000,30500,1,1
-ONF-CORE-1-4,docker.io/hightec/,nts-ng-onf-core-1-4,1.3.4,172.40.0.31,31000,31500,1,1
-OPENROADM-6-1-0,docker.io/hightec/,nts-ng-openroadm-6.1.0,1.3.4,172.40.0.36,36000,36500,1,1
-O-RAN-FH,docker.io/hightec/,nts-ng-o-ran-fh,1.3.4,172.40.0.40,40000,40500,1,1
-X-RAN,docker.io/hightec/,nts-ng-x-ran,1.3.4,172.40.0.42,42000,42500,1,1
-
+NAME,NTS_NF_DOCKER_REPOSITORY,NTS_NF_IMAGE_NAME,NTS_NF_IMAGE_TAG,NTSFUNC-IP,NTSFUNC-IPv6,NTS_HOST_NETCONF_SSH_BASE_PORT,NTS_HOST_NETCONF_TLS_BASE_PORT,NTS_NF_SSH_CONNECTIONS,NTS_NF_TLS_CONNECTIONS,PORT,NETCONF_HOST,USER,PASSWORD,NTS_FUNCTION_TYPE
+ONF-CORE-1-2,docker.io/hightec/,nts-ng-onf-core-1-2,1.3.4,172.40.0.30,2001:db8:1:50:172:50:0:30,30000,30500,1,1,830,172.40.0.1,netconf,netconf!,nts-onf-pac:NTS_FUNCTION_TYPE_ONF_CORE_MODEL_1_2
+ONF-CORE-1-4,docker.io/hightec/,nts-ng-onf-core-1-4,1.3.4,172.40.0.31,2001:db8:1:50:172:50:0:31,31000,31500,1,1,830,172.40.0.1,netconf,netconf!,nts-onf-pac:NTS_FUNCTION_TYPE_ONF_CORE_MODEL_1_4
+OPENROADM-6-1-0,docker.io/hightec/,nts-ng-openroadm-6.1.0,1.3.4,172.40.0.36,2001:db8:1:50:172:50:0:36,36000,36500,1,1,830,172.40.0.1,netconf,netconf!,nts-openroadm-pac:NTS_FUNCTION_TYPE_OPENROADM_6_1_0
+O-RAN-FH,docker.io/hightec/,nts-ng-o-ran-fh,1.3.4,172.40.0.40,2001:db8:1:50:172:50:0:40,40000,40500,1,1,830,172.40.0.1,netconf,netconf!,nts-o-ran-fh-pac:NTS_FUNCTION_TYPE_O_RAN_FH
+X-RAN,docker.io/hightec/,nts-ng-x-ran,1.3.4,172.40.0.42,2001:db8:1:50:172:50:0:42,42000,42500,1,1,830,172.40.0.1,netconf,netconf!,nts-x-ran-pac:NTS_FUNCTION_TYPE_X_RAN
index 08ec355..dcbd829 100644 (file)
@@ -1,9 +1,8 @@
 # Test suites are relative paths under [integration/csit.git]/tests/.
 # Place the suites in run order.
 
-## To skip sdnr robot test suite uncomment this test case
-#sdnr/debug/10_dummy.robot
 
-## To skip sdnr robot test suite comment this test case
+## To skip sdnr robot test suite 
+## set in .setup.sh SDNC_RELEASE_WITHOUT_ROBOT=true
 sdnr/healthcheck
-#sdnr/functional
+sdnr/functional
index 32b0fa5..c4c4ab7 100755 (executable)
@@ -199,18 +199,29 @@ echo ROBOT_VARIABLES="${ROBOT_VARIABLES}"
 echo "Starting Robot test suites ${SUITES} ..."
 relax_set
 
-# Runs an alternative robotframework setup as docker image in $ROBOT_IMAGE
-# test suites will be executed within this docker container
-# and results are stored as usual
-if [[ -z $ROBOT_IMAGE ]]; then
-    echo "*** TRACE **** python is $(which python) [version $(python --version)]"
-    env
-    python -m robot.run -N ${TESTPLAN} -v WORKSPACE:/tmp ${ROBOT_VARIABLES} ${TESTOPTIONS} ${SUITES}
+if [[ -z $SDNC_RELEASE_WITHOUT_ROBOT ]] ; then
+    if [[ -z $SDNC_READY_STATE_TIME_OUT ]] ; then
+        # Runs an alternative robotframework setup as docker image in $ROBOT_IMAGE
+        # test suites will be executed within this docker container
+        # and results are stored as usual
+        if [[ -z $ROBOT_IMAGE ]]; then
+            echo "*** TRACE **** python is $(which python) [version $(python --version)]"
+            env
+            python -m robot.run -N ${TESTPLAN} -v WORKSPACE:/tmp ${ROBOT_VARIABLES} ${TESTOPTIONS} ${SUITES}
+        else
+            echo "*** TRACE **** python is running in a container"
+            docker run --net="host" \
+            -v ${WORKSPACE}:${WORKSPACE} -v ${WORKDIR}:${WORKDIR} $ROBOT_IMAGE  \
+            python3 -B -m robot.run -N ${TESTPLAN} -v WORKSPACE:/tmp --outputdir ${WORKDIR} ${ROBOT_VARIABLES} ${TESTOPTIONS} ${SUITES}
+        fi
+    else
+            echo "[INFO] Skip Robot test suite, because SDNC is not in ready state"
+            echo "[ERROR] SDNC is not in ready state, check karaf.log!"
+            false
+    fi
 else
-    echo "*** TRACE **** python is running in a container"
-    docker run --net="host" \
-    -v ${WORKSPACE}:${WORKSPACE} -v ${WORKDIR}:${WORKDIR} $ROBOT_IMAGE  \
-    python3 -B -m robot.run -N ${TESTPLAN} -v WORKSPACE:/tmp --outputdir ${WORKDIR} ${ROBOT_VARIABLES} ${TESTOPTIONS} ${SUITES}
+   echo "[WARNING] Robot test suite is skipped, but job remains ok. "
+   true
 fi
 RESULT=$?
 load_set
index be8448b..a2bea44 100644 (file)
@@ -47,4 +47,4 @@ VESCOLLECTOR_IP=172.40.0.90
 NTS_NF_SDN_CONTROLLER_IP=127.0.0.1
 NTS_NF_SDN_CONTROLLER_PORT=8181
 NTS_HOST_IP=172.40.0.1
-
+NTS_NF_MOUNT_POINT_ADDRESSING_METHOD=docker-mapping
index 05ab6a9..a4ae7fe 100644 (file)
@@ -1,18 +1,34 @@
+# *******************************************************************************
+# * ============LICENSE_START========================================================================
+# * Copyright (C) 2021 highstreet technologies GmbH Intellectual Property. 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==========================================================================
 version: "3"
 services:
   nts-function:
     image: ${NTS_NF_DOCKER_REPOSITORY}${NTS_NF_IMAGE_NAME}:${NTS_NF_IMAGE_TAG}
     container_name: ${NTS_NF_IMAGE_NAME}
     stop_grace_period: 5m
+    cap_add:
+      - NET_ADMIN
     ports:
       - "::${NTS_HOST_NETCONF_SSH_BASE_PORT}-${NTS_HOST_NETCONF_SSH_BASE_PORT_PLUS_SSH_CON}:${EXPOSE_PORT_SSH}-${EXPOSE_PORT_SSH_PLUS_CON}"
       - "::${NTS_HOST_NETCONF_TLS_BASE_PORT}-${NTS_HOST_NETCONF_TLS_BASE_PORT_PLUS_TLS_CON}:${EXPOSE_PORT_TLS}-${EXPOSE_PORT_TLS_PLUS_CON}"
     environment:
-      NTS_NF_STANDALONE_START_FEATURES: "datastore-populate ves-heartbeat ves-pnf-registration web-cut-through manual-notification-generation netconf-call-home"
-      NTS_NF_MOUNT_POINT_ADDRESSING_METHOD: "host-mapping"
+      NTS_NF_STANDALONE_START_FEATURES: "datastore-populate ves-heartbeat ves-pnf-registration web-cut-through manual-notification-generation"
+      NTS_NF_MOUNT_POINT_ADDRESSING_METHOD: ${NTS_NF_MOUNT_POINT_ADDRESSING_METHOD} # mapping types: host-mapping, docker-mapping
       NTS_HOST_IP: ${NTS_HOST_IP}
       HOSTNAME: ${NTS_NF_CONTAINER_NAME}
-      IPv6Enabled: ${IPV6_ENABLED}
+      IPv6_ENABLED: ${IPV6_ENABLED}
 
       SSH_CONNECTIONS: ${NTS_NF_SSH_CONNECTIONS}
       TLS_CONNECTIONS: ${NTS_NF_TLS_CONNECTIONS}
index 1f0939c..3b1e826 100755 (executable)
@@ -15,6 +15,7 @@
 # * ============LICENSE_END==========================================================================
 
 set -o xtrace
+set +e
 csvfile=$1
 export DOCKER_ENGINE_VERSION=$(docker version --format '{{.Server.APIVersion}}')
 
@@ -34,7 +35,9 @@ fi
 
 firstline=0
 # read each line of nts-networkfunctions.csv and put in into the corresponding variables
-while IFS=',' read NAME NTS_NF_DOCKER_REPOSITORY NTS_NF_IMAGE_NAME NTS_NF_IMAGE_TAG NTS_NF_IP NTS_HOST_NETCONF_SSH_BASE_PORT NTS_HOST_NETCONF_TLS_BASE_PORT NTS_NF_SSH_CONNECTIONS NTS_NF_TLS_CONNECTIONS; do
+while IFS=',' read NAME NTS_NF_DOCKER_REPOSITORY NTS_NF_IMAGE_NAME NTS_NF_IMAGE_TAG NTS_NF_IP NTS_NF_IPv6 \
+                   NTS_HOST_NETCONF_SSH_BASE_PORT NTS_HOST_NETCONF_TLS_BASE_PORT NTS_NF_SSH_CONNECTIONS NTS_NF_TLS_CONNECTIONS \
+                   PORT NETCONF_HOST USER PASSWORD NTS_FUNCTION_TYPE; do
     if [ $firstline -eq 0 ]; then
         firstline=1
         continue
@@ -45,9 +48,11 @@ while IFS=',' read NAME NTS_NF_DOCKER_REPOSITORY NTS_NF_IMAGE_NAME NTS_NF_IMAGE_
         if [[ -z ${USE_DEFAULT_REPO} ]]; then
         export NTS_NF_DOCKER_REPOSITORY=$NTS_NF_DOCKER_REPOSITORY
     fi
+    export NAME=$NAME
     export NTS_NF_IMAGE_NAME=$NTS_NF_IMAGE_NAME
     export NTS_NF_IMAGE_TAG=$NTS_NF_IMAGE_TAG
     export NTS_NF_IP=$NTS_NF_IP
+    export NTS_NF_IPv6=$NTS_NF_IPv6
     export NTS_HOST_NETCONF_SSH_BASE_PORT=$NTS_HOST_NETCONF_SSH_BASE_PORT
     export NTS_HOST_NETCONF_TLS_BASE_PORT=$NTS_HOST_NETCONF_TLS_BASE_PORT
     export NTS_HOST_NETCONF_SSH_BASE_PORT_PLUS_SSH_CON=$(expr $NTS_HOST_NETCONF_SSH_BASE_PORT + $NTS_NF_SSH_CONNECTIONS - 1)
@@ -71,3 +76,4 @@ while IFS=',' read NAME NTS_NF_DOCKER_REPOSITORY NTS_NF_IMAGE_NAME NTS_NF_IMAGE_
     docker-compose -p ${NAME} --env-file $CUR_PATH/.env -f $CUR_PATH/docker-compose-nts-networkfunction.yaml up -d
 done <$csvfile
 docker ps -a --format "table |{{.Names}}\t|{{.Image}}\t|{{printf \"%.70s\" .Ports}}|"| { head -1; sort --field-separator='|' -k 4;}
+set -e
index 651b8f4..39ca808 100755 (executable)
@@ -47,6 +47,7 @@ fi
 
 HOST_IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $7}')
 SDNC_WEB_PORT=${SDNC_WEB_PORT:-8282}
+SDNC_PORT=${SDNC_PORT:-8181}
 
 env_file="--env-file ${SCRIPTS}/sdnr/docker-compose/.env"
 echo $env_file
@@ -62,6 +63,29 @@ else
 fi
 docker ps -a
 
+# Call function with port like:
+# check_for_ready_state 1234
+# export SDNC_READY_RETRY_PERIOD and SDNC_READY_TIMEOUT to overwrite default values
+function check_for_ready_state() {
+  sdnc_port=${1}
+  SDNC_READY_RETRY_PERIOD=${SDNC_READY_RETRY_PERIOD:-15}
+  SDNC_READY_TIMEOUT=${SDNC_READY_TIMEOUT:-450}
+  max_retry=$(expr $SDNC_READY_TIMEOUT / $SDNC_READY_RETRY_PERIOD)
+  for ((i=1; i<=$max_retry; i++)); do
+    wait_time=$(expr $i \* $SDNC_READY_RETRY_PERIOD)
+    echo "[INFO] SDNC/R container not yet ready after: $wait_time seconds, Timeout: $SDNC_READY_TIMEOUT seconds"
+    curl -sS -m 1 -k -D - ${HTTPS_PREFIX}${HOST_IP}:${sdnc_port}/ready | grep 200 && break
+    if [ $i == $max_retry ]; then
+        echo "[ERROR] SDNC/R container not ready after ${SDNC_READY_TIMEOUT} seconds!"
+        export SDNC_READY_STATE_TIME_OUT=true
+        return
+    fi
+    echo sleep ${SDNC_READY_RETRY_PERIOD}
+    sleep ${SDNC_READY_RETRY_PERIOD}
+  done
+  echo "[INFO] SDNC/R container ready after: $wait_time seconds"
+}
+
 function onap_dependent_components_launch() {
     docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-onap-addons.yaml pull
     docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-onap-addons.yaml up -d
@@ -92,8 +116,6 @@ function sdnr_launch() {
     else
         sdnr_launch_single_node $1
     fi
-    cd $WORKSPACE
-    ./getAllInfo.sh -c sdnr -kp
 }
 
 
@@ -103,38 +125,23 @@ function sdnr_launch_single_node() {
     #docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-single-sdnr.yaml \
     #                         -f ${WORKSPACE}/scripts/sdnr/docker-compose/$sdnrdb_compose_file \
     #                         pull
-    docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/$sdnrdb_compose_file \
-                             pull
     docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-single-sdnr.yaml \
                              -f ${WORKSPACE}/scripts/sdnr/docker-compose/$sdnrdb_compose_file \
                              up -d
-         for i in {1..50}; do
-             curl -sS -m 1 -D - ${HOST_IP}:8181/ready | grep 200 && break
-             echo sleep $i
-             sleep $i
-             if [ $i == 50 ]; then
-                echo "[ERROR] SDNC/R container not ready"
-                docker ps -a
-                docker logs sdnr
-                # exit 1
-             fi
-         done
+    check_for_ready_state ${SDNC_PORT}
 }
 
 function sdnr_web_launch() {
-    docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-single-sdnr.yaml \
-                             -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-single-sdnr-web.override.yaml \
-                             -f ${WORKSPACE}/scripts/sdnr/docker-compose/$sdnrdb_compose_file \
-                             pull
+    # Use locally build sdnr, sdnc-web .. no need to pull
+    #docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-single-sdnr.yaml \
+    #                         -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-single-sdnr-web.override.yaml \
+    #                         -f ${WORKSPACE}/scripts/sdnr/docker-compose/$sdnrdb_compose_file \
+    #                         pull
     docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-single-sdnr.yaml \
                              -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose-single-sdnr-web.override.yaml \
                              -f ${WORKSPACE}/scripts/sdnr/docker-compose/$sdnrdb_compose_file \
                              up -d
-         for i in {1..50}; do
-             curl -sS -m 1 -D - ${HOST_IP}:${SDNC_WEB_PORT}/ready | grep 200 && break
-             echo sleep $i
-             sleep $i
-    done
+    check_for_ready_state ${SDNC_WEB_PORT}
 }
 
 function sdnr_launch_cluster() {
@@ -142,13 +149,7 @@ function sdnr_launch_cluster() {
     SDNRDM="false"
     [[ -n "$1" ]]  && SDNRDM="true" && echo "SDNRDM arg detected - running in headless mode"
     echo "SDNR being launched in Cluster mode"
-    docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose/cluster-sdnr.yaml pull
+    #docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose/cluster-sdnr.yaml pull
     docker-compose $env_file -f ${WORKSPACE}/scripts/sdnr/docker-compose/docker-compose/cluster-sdnr.yaml up -d
-    # Wait for initialization of docker services. At the moment its the master SDNR node
-         HOST_IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $7}')
-         for i in {1..50}; do
-             curl -sS -m 1 -D - ${HOST_IP}:${ODLUXPORT}/ready | grep 200 && break
-             echo sleep $i
-             sleep $i
-         done
+    check_for_ready_state ${SDNC_WEB_PORT}
 }
index eeb729e..02e8bee 100755 (executable)
@@ -15,6 +15,7 @@
 # limitations under the License.
 #
 # Modifications copyright (c) 2018 AT&T Intellectual Property
+# Modifications copyright (C) 2022 highstreet technologies GmbH Intellectual Property
 #
 
 if [[ -z $WORKSPACE ]]; then
@@ -37,7 +38,7 @@ source ${SCRIPTS}/sdnr/sdnrEnv_Common.sh
 env_file="--env-file ${SCRIPTS}/sdnr/docker-compose/.env"
 
 function sdnr_teardown() {
-       running_containers=$(docker ps -aq)
+       running_containers=$(docker ps -a --format "{{.Names}}")
        if [ -z "$running_containers" ]
        then
                echo "No containers to get logs from!"
@@ -50,6 +51,7 @@ function sdnr_teardown() {
                        echo "Getting logs from container $i"
                        docker logs $i >> ${WORKSPACE}/archives/getallinfo/$i.log 2>&1
                done
+        docker cp sdnr:/opt/opendaylight/data/log/karaf.log ${WORKSPACE}/archives/getallinfo/sdnr_karaf.log
        fi
        echo "Starting teardown!"
        # removes sdnrdb, sdnr AND all of the rest of the containers (--remove-orphans)
index 084c155..be94102 100644 (file)
@@ -21,6 +21,7 @@ Suite Setup  global suite setup    &{GLOBAL_SUITE_SETUP_CONFIG}
 Suite Teardown  global suite teardown
 
 
+
 *** Variables ***
 ${DEVICE_TYPE}  DEFINE_IN_INIT
 ${DEVICE_NAME}  robot-${DEVICE_TYPE}-sim-lifecycle
@@ -42,8 +43,8 @@ ${DEVICE_TO_DELETE}  devices
 *** Test Cases ***
 
 Add network element connection
-  [Documentation]  Add network-function to device manager 
-  ...              verify correct detection of specific device manager 
+  [Documentation]  Add network-function to device manager
+  ...              verify correct detection of specific device manager
   ...              verify correct entries in connection log
   [Tags]  smoke
 
@@ -52,7 +53,8 @@ Add network element connection
   ${start_time} =  Get Current Date  time_zone=UTC  result_format=%Y-%m-%dT%H:%M:%S.%f
   Sleep  1s  reason=insert time delay to account for time differences of container and host
   Log To Console  ${start_time}
-  ConnectApp.Add network element connection    ${DEVICE_NAME_TEST}    ${True}    ${HOST}    ${PORT}    ${USERNAME}    ${PASSWORD}
+  ConnectApp.Add network element connection    device_name=${DEVICE_NAME_TEST}    is_required=${True}
+  ...  host=${HOST}    port=${PORT}    username=${USERNAME}    password=${PASSWORD}
   Run Keyword And Continue On Failure  ConnectApp.Should Be Equal connection status until time  ${DEVICE_NAME_TEST}  Connected
   SDNCRestconfLibrary.should_be_equal_connection_status_until_time  ${DEVICE_NAME_TEST}  connected  time_in_sec=${10}
   Run Keyword And Continue On Failure  ConnectApp.should_be_equal_network_element_connection_details  ${DEVICE_NAME_TEST}
@@ -84,11 +86,11 @@ Retrieve yang capabilities from network element
   Should be True  ${is_yang_correct}  msg=Yang capabilities are different from expected list
 
 Remove network element connection
-  [Documentation]  remove network element connection from device manager 
-  ...              verify if all ressources are removed 
+  [Documentation]  remove network element connection from device manager
+  ...              verify if all ressources are removed
   ...              verify correct entries in connection log
   [Tags]  smoke
-  
+
   Sleep  1s  reason=insert time gap in log files
   ${start_time} =  Get Current Date  time_zone=UTC  result_format=%Y-%m-%dT%H:%M:%S.%f
   Sleep  1s  reason=insert time delay to account for time differences of container and host
@@ -117,7 +119,8 @@ Add network element connection wrong port
   ${start_time} =  Get Current Date  time_zone=UTC  result_format=%Y-%m-%dT%H:%M:%S.%f
   Sleep  1s  reason=insert time delay to account for time differences of container and host
   Set Test Variable  ${DEVICE_NAME_TEST}  ${DEVICE_NAME}-port-nok
-  ConnectApp.Add network element connection    ${DEVICE_NAME_TEST}    ${True}    ${HOST}    ${PORT_NOK}    ${USERNAME}    ${PASSWORD}
+  ConnectApp.Add network element connection    device_name=${DEVICE_NAME_TEST}    is_required=${True}    host=${HOST}
+  ...  port=${PORT_NOK}    username=${USERNAME}    password=${PASSWORD}
   Run Keyword And Continue On Failure  ConnectApp.Should Be Equal connection status until time  ${DEVICE_NAME_TEST}  Connecting
   SDNCRestconfLibrary.should_be_equal_connection_status_until_time  ${DEVICE_NAME_TEST}  connecting  time_in_sec=${10}
   Run Keyword And Continue On Failure  ConnectApp.should_be_equal_network_element_connection_details  ${DEVICE_NAME_TEST}
@@ -174,7 +177,8 @@ Add network element connection wrong ip
   ${start_time} =  Get Current Date  time_zone=UTC  result_format=%Y-%m-%dT%H:%M:%S.%f
   Sleep  1s  reason=insert time delay to account for time differences of container and host
   Set Test Variable  ${DEVICE_NAME_TEST}  ${DEVICE_NAME}-ip-nok
-  ConnectApp.Add network element connection    ${DEVICE_NAME_TEST}    ${True}    ${HOST_NOK}    ${PORT}    ${USERNAME}    ${PASSWORD}
+  ConnectApp.Add network element connection    device_name=${DEVICE_NAME_TEST}    is_required=${True}    host=${HOST_NOK}
+  ...  port=${PORT}    username=${USERNAME}    password=${PASSWORD}
   Run Keyword And Continue On Failure  ConnectApp.Should Be Equal connection status until time  ${DEVICE_NAME_TEST}  Connecting
   Run Keyword And Continue On Failure  SDNCRestconfLibrary.should_be_equal_connection_status_until_time  ${DEVICE_NAME_TEST}  connecting  time_in_sec=${10}
   Run Keyword And Continue On Failure  ConnectApp.should_be_equal_network_element_connection_details  ${DEVICE_NAME_TEST}
@@ -231,7 +235,8 @@ Add network element connection and change is required to false
   ${start_time} =  Get Current Date  time_zone=UTC  result_format=%Y-%m-%dT%H:%M:%S.%f
   Sleep  1s  reason=insert time delay to account for time differences of container and host
   Set Test Variable  ${DEVICE_NAME_TEST}  ${DEVICE_NAME}-required
-  ConnectApp.Add network element connection    ${DEVICE_NAME_TEST}    ${True}    ${HOST}    ${PORT}    ${USERNAME}    ${PASSWORD}
+  ConnectApp.Add network element connection    device_name=${DEVICE_NAME_TEST}    is_required=${True}    host=${HOST}
+  ...  port=${PORT}    username=${USERNAME}    password=${PASSWORD}
   Run Keyword And Continue On Failure  ConnectApp.Should Be Equal connection status until time  ${DEVICE_NAME_TEST}  Connected
   SDNCRestconfLibrary.should_be_equal_connection_status_until_time  ${DEVICE_NAME_TEST}  connected  time_in_sec=${10}
   Run Keyword And Continue On Failure  ConnectApp.should_be_equal_network_element_connection_details  ${DEVICE_NAME_TEST}
@@ -337,6 +342,19 @@ Mount network element
   Run Keyword And Continue On Failure  Dictionary Should Contain Item  ${conn_status_list_stats}  Connected  1  msg=wrong connection log entries for Connected state
   Run Keyword And Continue On Failure  Dictionary Should Contain Item  ${conn_status_list_stats}  Mounted  1    msg=wrong connection log entries for Mounted state
 
+Mount Nts Network Function with VALID TLS Key ID
+  IF    'DOCKER_TLS_PORT' in ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']}
+       Run Keyword And Continue On Failure  Add Network Element Connection     device_name=${DEVICE_NAME}_sim_key_0
+                                  ...  is_required=${True}
+                                  ...  host=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['IP']}
+                                  ...  port=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['DOCKER_TLS_PORT']}
+                                  ...  username=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['USER']}
+                                  ...  tls_key=ODL_private_key_0
+                                  ...  check_connection_status=Connected
+                                  ...  time_to_wait=60
+       ConnectApp.remove_network_element_connection    ${DEVICE_NAME}_sim_key_0
+  END
+
 Remove network element connection
   [Tags]  prio2
   Sleep  1s  reason=insert time gap in log files
@@ -348,7 +366,7 @@ Remove network element connection
   Run Keyword And Continue On Failure  SDNCRestconfLibrary.should_be_equal_connection_status_until_time  ${DEVICE_NAME_TEST}  not existing  time_in_sec=${10}
 
   # Check connection status log entries
-  Sleep  1s  reason=insert time gap to avoid time constrains
+  Sleep  5s  reason=insert time gap to avoid time constrains
   ${connection_status_list} =  FaultManagementApp.get_connection_log_list  node-id=${DEVICE_NAME_TEST}
                                                                      ...   timestamp=>=${start_time}
   Log  ${connection_status_list}
@@ -370,7 +388,8 @@ Remove unmounted network element connection
   ${start_time} =  Get Current Date  time_zone=UTC  result_format=%Y-%m-%dT%H:%M:%S.%f
   Sleep  1s  reason=insert time delay to account for time differences of container and host
   Set Test Variable  ${DEVICE_NAME_TEST}  ${DEVICE_NAME}-required-true
-  ConnectApp.Add network element connection    ${DEVICE_NAME_TEST}    ${True}    ${HOST}    ${PORT}    ${USERNAME}    ${PASSWORD}
+  ConnectApp.Add network element connection    device_name=${DEVICE_NAME_TEST}    is_required=${True}    host=${HOST}
+  ...  port=${PORT}    username=${USERNAME}    password=${PASSWORD}
   Run Keyword And Continue On Failure  ConnectApp.Should Be Equal connection status until time  ${DEVICE_NAME_TEST}  Connected
   Run Keyword And Continue On Failure  SDNCRestconfLibrary.should_be_equal_connection_status_until_time  ${DEVICE_NAME_TEST}  connected  time_in_sec=${10}
 
@@ -398,4 +417,3 @@ Remove unmounted network element connection
   Run Keyword And Continue On Failure  Dictionary Should Contain Key  ${conn_status_list_stats}  Unmounted  msg=no connection log entries for Unmounted state
   ConnectApp.Remove Network Element Connection    ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
 
-
index 3fadf22..669ceb0 100644 (file)
@@ -29,10 +29,10 @@ ${PNF_REGISTRATION_TIMEOUT}  180
 Setup NTS function
   [Tags]  nts  bringup
   [Documentation]  configure NTS manager to support restconf registration
-  Add Network Element Connection   ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}    ${True}
-  ...  ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['IP']}     ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PORT']}
-  ...  ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['USER']}    ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PASSWORD']}
-  ...  Connected
+  Add Network Element Connection   device_name=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}    is_required=${True}
+  ...  host=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['IP']}     port=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PORT']}
+  ...  username=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['USER']}    password=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PASSWORD']}
+  ...  check_connection_status=Connected
   SDNCRestconfLibrary.Should Be Equal Connection Status Until Time    ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}    Connected
 
 Start pnf ves registration from NTS function
index 068a6b8..842a3d8 100644 (file)
@@ -34,10 +34,10 @@ ${PROCESS_TIME_NOTIF}  30s
 Setup NTS function
   [Tags]  nts  bringup
   [Documentation]  add network function to trigger alarm notification via VES in next tests
-  Add Network Element Connection   ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}    ${True}
-  ...  ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['IP']}     ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PORT']}
-  ...  ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['USER']}    ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PASSWORD']}
-  ...  Connected
+  Add Network Element Connection   device_name=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}  is_required=${True}
+  ...  host=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['IP']}     port=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PORT']}
+  ...  username=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['USER']}    password=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PASSWORD']}
+  ...  check_connection_status=Connected
   SDNCRestconfLibrary.Should Be Equal Connection Status Until Time    ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}    Connected
 
 Set alarm notification
index df023c4..b0b8f0e 100644 (file)
@@ -43,10 +43,10 @@ ${TIME_PERIOD_SEND_NOTIF}  22s
 Setup NTS function
   [Tags]  nts  bringup
   [Documentation]  configure NTS manager to support restconf registration
-  Add Network Element Connection   ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}    ${True}
-  ...  ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['IP']}     ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PORT']}
-  ...  ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['USER']}    ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PASSWORD']}
-  ...  Connected
+  Add Network Element Connection   device_name=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}  is_required=${True}
+  ...  host=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['IP']}     port=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PORT']}
+  ...  username=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['USER']}    password=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['PASSWORD']}
+  ...  check_connection_status=Connected
   SDNCRestconfLibrary.Should Be Equal Connection Status Until Time    ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}    Connected
 
 Set alarm notification
@@ -63,7 +63,7 @@ Set alarm notification
   ${alarm_status_start} =  FaultManagementApp.get_alarm_status
   Set Global Variable  ${alarm_status_start}
   NTSimManagerNG.set_fault_delay_list_nf  ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}  delay-period=${fault_delay}
-  
+
   Log  Send notification every ${FAULT_DELAY} sec for ${TIME_PERIOD_SEND_NOTIF}  level=INFO  html=False  console=True  repr=False
   Sleep  ${TIME_PERIOD_SEND_NOTIF}
 
index e11fbf0..2d29c9f 100644 (file)
@@ -1,44 +1,44 @@
-*** Settings ***\r
-Documentation  healthcheck of system under test: sdnc server, sdnrdb are available\r
-Library  ConnectLibrary\r
-Library  SDNCBaseLibrary\r
-Library  Collections\r
-Library  ElasticSearchLibrary\r
-Library  ConnectApp\r
-Library  RequestsLibrary\r
-\r
-Suite Setup  global suite setup    &{GLOBAL_SUITE_SETUP_CONFIG}\r
-Suite Teardown  global suite teardown\r
-\r
-*** Variables ***\r
-&{headers}  Content-Type=application/json  Authorization=Basic\r
-\r
-*** Test Cases ***\r
-Test Is SDNR Node Available\r
-    ${server_status}=    Server Is Ready\r
-    should be true    ${server_status}\r
-\r
-Test Is SDNRDB Available\r
-    ${es_version_info}=    Get Sdnrdb Version Info As Dict\r
-    ${length_of_response}=    Get Length    ${es_version_info}\r
-    should be true    ${length_of_response}>${0}\r
-\r
-Test Is SDNRDB Initialized\r
-    ${res}=  Check Aliases\r
-    Log  ${res}  level=INFO  html=False  console=False  repr=False\r
-\r
-Test Is VES Collector available\r
-    # curl -k -u sample1:sample1 https://172.40.0.1:8443\r
-    ${auth}=  Create List  ${VESCOLLECTOR}[USERNAME]  ${VESCOLLECTOR}[PASSWORD]\r
-    ${IPV6_ENABLED}=  Get Variable Value    ${ENABLE_IPV6}  ${False}\r
-    Log To Console    ${VESCOLLECTOR}[SCHEME]://[${VESCOLLECTOR}[IP]]:${VESCOLLECTOR}[PORT]\r
-    IF    ${IPV6_ENABLED} != ${True}\r
-        RequestsLibrary.Create Session  alias=ves  url=${VESCOLLECTOR}[SCHEME]://${VESCOLLECTOR}[IP]:${VESCOLLECTOR}[PORT]  headers=${headers}  auth=${auth}\r
-    ELSE\r
-        RequestsLibrary.Create Session  alias=ves  url=${VESCOLLECTOR}[SCHEME]://[${VESCOLLECTOR}[IP]]:${VESCOLLECTOR}[PORT]  headers=${headers}  auth=${auth}\r
-    END\r
-    ${resp}=  RequestsLibrary.GET On Session  ves  /\r
-    Should Be Equal As Strings  ${resp.text}  Welcome to VESCollector\r
-    Should Be Equal As Strings  ${resp.status_code}  200\r
-    RequestsLibrary.Delete All Sessions\r
-\r
+*** Settings ***
+Documentation  healthcheck of system under test: sdnc server, sdnrdb are available
+Library  ConnectLibrary
+Library  SDNCBaseLibrary
+Library  Collections
+Library  ElasticSearchLibrary
+Library  ConnectApp
+Library  RequestsLibrary
+
+Suite Setup  global suite setup    &{GLOBAL_SUITE_SETUP_CONFIG}
+Suite Teardown  global suite teardown
+
+*** Variables ***
+&{headers}  Content-Type=application/json  Authorization=Basic
+
+*** Test Cases ***
+Test Is SDNR Node Available
+    ${server_status}=    Server Is Ready
+    should be true    ${server_status}
+
+Test Is SDNRDB Available
+    ${es_version_info}=    Get Sdnrdb Version Info As Dict
+    ${length_of_response}=    Get Length    ${es_version_info}
+    should be true    ${length_of_response}>${0}
+
+Test Is SDNRDB Initialized
+    ${res}=  Check Aliases
+    Log  ${res}  level=INFO  html=False  console=False  repr=False
+
+Test Is VES Collector available
+    # curl -k -u sample1:sample1 https://172.40.0.1:8443
+    ${auth}=  Create List  ${VESCOLLECTOR}[USERNAME]  ${VESCOLLECTOR}[PASSWORD]
+    ${IPV6_ENABLED}=  Get Variable Value    ${ENABLE_IPV6}  ${False}
+    Log To Console    ${VESCOLLECTOR}[SCHEME]://[${VESCOLLECTOR}[IP]]:${VESCOLLECTOR}[PORT]
+    IF    ${IPV6_ENABLED} != ${True}
+        RequestsLibrary.Create Session  alias=ves  url=${VESCOLLECTOR}[SCHEME]://${VESCOLLECTOR}[IP]:${VESCOLLECTOR}[PORT]  headers=${headers}  auth=${auth}
+    ELSE
+        RequestsLibrary.Create Session  alias=ves  url=${VESCOLLECTOR}[SCHEME]://[${VESCOLLECTOR}[IP]]:${VESCOLLECTOR}[PORT]  headers=${headers}  auth=${auth}
+    END
+    ${resp}=  RequestsLibrary.GET On Session  ves  /
+    Should Be Equal As Strings  ${resp.text}  Welcome to VESCollector
+    Should Be Equal As Strings  ${resp.status_code}  200
+    RequestsLibrary.Delete All Sessions
+