aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordemskeq8 <alexander.dehn@highstreet-technologies.com>2021-07-21 09:37:41 +0200
committerdemskeq8 <alexander.dehn@highstreet-technologies.com>2021-08-27 09:58:25 +0200
commit00960a3b25697ef06cdfd7534944f7e2cc2e6d06 (patch)
treee7e44ffdc2abf0c81dd159d1394652878258cd1a
parent4308ac023373157f4255088efba7cdb34115bff7 (diff)
[SNDC-CSIT] Add tests for device manager
Integration tests for wt feature set Issue-ID: SDNC-1584 Signed-off-by: demskeq8 <alexander.dehn@highstreet-technologies.com> Change-Id: I21de1540a664684d55bdec1172112130cdc2902f Former-commit-id: bdbf1ee7ae34887ca40dcc113d1065ce44da4a89
-rwxr-xr-xcsit/plans/sdnr/setup.sh2
-rw-r--r--csit/plans/sdnr/testdata/localhost.py15
-rw-r--r--csit/plans/sdnr/testdata/nts-networkfunctions.csv9
-rw-r--r--csit/scripts/sdnr/docker-compose/.env8
-rw-r--r--csit/tests/sdnr/functional/devicemanager/_templates/10_lifecycleNetconfSsh/devicemanagerlifecycle_netconf.robot401
-rw-r--r--csit/tests/sdnr/functional/devicemanager/_templates/20_pnfRegistration/pnfRegistration.robot118
-rw-r--r--csit/tests/sdnr/functional/devicemanager/_templates/21_alarmNotificationVES/alarmNotificationVes.robot136
-rw-r--r--csit/tests/sdnr/functional/devicemanager/_templates/22_alarmNotificationNETCONF/alarmNotificationNetconf.robot143
-rw-r--r--csit/tests/sdnr/functional/devicemanager/_templates/90_resetSimulatedDevices/90_resetSimulatedDevices.robot25
-rw-r--r--csit/tests/sdnr/functional/devicemanager/_templates/__init__.robot16
l---------csit/tests/sdnr/functional/devicemanager/o-ran-basic/20_pnfRegistration1
l---------csit/tests/sdnr/functional/devicemanager/o-ran-basic/21_alarmNotificationVES1
l---------csit/tests/sdnr/functional/devicemanager/o-ran-basic/90_resetSimulatedDevices1
-rw-r--r--csit/tests/sdnr/functional/devicemanager/o-ran-basic/__init__.robot18
-rw-r--r--csit/tests/sdnr/functional/devicemanager/o-ran-basic/yangCapabilities.txt70
l---------csit/tests/sdnr/functional/devicemanager/onfcore12-basic/10_lifecycleNetconfSsh1
l---------csit/tests/sdnr/functional/devicemanager/onfcore12-basic/22_alarmNotificationNETCONF1
l---------csit/tests/sdnr/functional/devicemanager/onfcore12-basic/90_resetSimulatedDevices1
-rw-r--r--csit/tests/sdnr/functional/devicemanager/onfcore12-basic/__init__.robot19
-rw-r--r--csit/tests/sdnr/functional/devicemanager/onfcore12-basic/yangCapabilities.txt35
l---------csit/tests/sdnr/functional/devicemanager/onfcore14-basic/10_lifecycleNetconfSsh1
l---------csit/tests/sdnr/functional/devicemanager/onfcore14-basic/22_alarmNotificationNETCONF1
l---------csit/tests/sdnr/functional/devicemanager/onfcore14-basic/90_resetSimulatedDevices1
-rw-r--r--csit/tests/sdnr/functional/devicemanager/onfcore14-basic/__init__.robot19
-rw-r--r--csit/tests/sdnr/functional/devicemanager/onfcore14-basic/yangCapabilities.txt51
l---------csit/tests/sdnr/functional/devicemanager/openroadm-basic/10_lifecycleNetconfSsh1
l---------csit/tests/sdnr/functional/devicemanager/openroadm-basic/22_alarmNotificationNETCONF1
l---------csit/tests/sdnr/functional/devicemanager/openroadm-basic/90_resetSimulatedDevices1
-rw-r--r--csit/tests/sdnr/functional/devicemanager/openroadm-basic/__init__.robot18
-rw-r--r--csit/tests/sdnr/functional/devicemanager/openroadm-basic/yangCapabilities.txt102
-rw-r--r--csit/tests/sdnr/functional/devicemanager/readme.md5
-rw-r--r--csit/tests/sdnr/functional/dummy.robot10
-rw-r--r--csit/tests/sdnr/healthcheck/30_pipeCleanerPNFReg.robot63
33 files changed, 1280 insertions, 15 deletions
diff --git a/csit/plans/sdnr/setup.sh b/csit/plans/sdnr/setup.sh
index e2942b37..a447cf5d 100755
--- a/csit/plans/sdnr/setup.sh
+++ b/csit/plans/sdnr/setup.sh
@@ -38,5 +38,5 @@ sdnr_launch
#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:latest"
+ROBOT_IMAGE="hightec/sdnc-test-lib:v0.9.1"
diff --git a/csit/plans/sdnr/testdata/localhost.py b/csit/plans/sdnr/testdata/localhost.py
index 0de4bac5..ed498245 100644
--- a/csit/plans/sdnr/testdata/localhost.py
+++ b/csit/plans/sdnr/testdata/localhost.py
@@ -24,6 +24,21 @@ RESTCONF_TIMEOUT = '90 s'
# Restconf response time longer than VALID_RESPONSE_TIME in s will be notified as warning in the robot logs
VALID_RESPONSE_TIME = 5
+# Define network function parameter
+NETWORK_FUNCTIONS = {
+ 'O_RAN_FH': {"NAME": "o-ran-fh", "IP": "172.40.0.40", "PORT": "830", "USER": "netconf",
+ "PASSWORD": "netconf!", 'NETCONF_HOST': '172.40.0.1', 'BASE_PORT': 40000, 'TLS_PORT': 40500},
+ 'X_RAN': {"NAME": "x-ran", "IP": "172.40.0.42", "PORT": "830", "USER": "netconf",
+ "PASSWORD": "netconf!", 'NETCONF_HOST': '172.40.0.1', 'BASE_PORT': 42000, 'TLS_PORT': 42500},
+ 'ONF_CORE_1_2': {"NAME": "onf-core-1-2", "IP": "172.40.0.30", "PORT": "830",
+ "USER": "netconf", "PASSWORD": "netconf!", 'NETCONF_HOST': '172.40.0.1', 'BASE_PORT': 30000,
+ 'TLS_PORT': 30500},
+ 'ONF_CORE_1_4': {"NAME": "onf-core-1-4", "IP": "172.40.0.31", "PORT": "830",
+ "USER": "netconf", "PASSWORD": "netconf!", 'NETCONF_HOST': '172.40.0.1', 'BASE_PORT': 31000,
+ 'TLS_PORT': 31500},
+ 'OPENROADM_6_1_0': {"NAME": "openroadm-6-1-0", "IP": "172.40.0.36", "PORT": "830", "USER": "netconf",
+ "PASSWORD": "netconf!", 'NETCONF_HOST': '172.40.0.1', 'BASE_PORT': 36000, 'TLS_PORT': 36500}
+}
VESCOLLECTOR = {"SCHEME": "https", "IP": "172.40.0.1", "PORT": 8443, "AUTHMETHOD": "basic-auth", "USERNAME": "sample1",
"PASSWORD": "sample1"}
diff --git a/csit/plans/sdnr/testdata/nts-networkfunctions.csv b/csit/plans/sdnr/testdata/nts-networkfunctions.csv
index 3a9219aa..c2ccb2d6 100644
--- a/csit/plans/sdnr/testdata/nts-networkfunctions.csv
+++ b/csit/plans/sdnr/testdata/nts-networkfunctions.csv
@@ -1,4 +1,7 @@
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-4,docker.io/hightec/,nts-ng-onf-core-1-4,1.3.1,172.40.0.31,31000,31500,1,1
-O-RAN-FH,docker.io/hightec/,nts-ng-o-ran-fh,1.3.1,172.40.0.40,40000,40500,1,1
-X-RAN,docker.io/hightec/,nts-ng-x-ran,1.3.1,172.40.0.42,42000,42500,1,1
+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
+
diff --git a/csit/scripts/sdnr/docker-compose/.env b/csit/scripts/sdnr/docker-compose/.env
index 53039467..c5509327 100644
--- a/csit/scripts/sdnr/docker-compose/.env
+++ b/csit/scripts/sdnr/docker-compose/.env
@@ -23,7 +23,7 @@ SDNR_DM=true
# sdnrdb
ES_VERSION=7.9.3
ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch-oss
-ESDB_IP=172.40.0.30
+ESDB_IP=172.40.0.71
# sdnc-web
#NEXUS_DOCKER_REPO see sdnc section
@@ -42,3 +42,9 @@ ZOOKEEPER_IP=172.40.0.60
KAFKA_IP=172.40.0.70
DMAAP_IP=172.40.0.80
VESCOLLECTOR_IP=172.40.0.90
+
+# NTSim
+NTS_NF_SDN_CONTROLLER_IP=127.0.0.1
+NTS_NF_SDN_CONTROLLER_PORT=8181
+NTS_HOST_IP=172.40.0.1
+
diff --git a/csit/tests/sdnr/functional/devicemanager/_templates/10_lifecycleNetconfSsh/devicemanagerlifecycle_netconf.robot b/csit/tests/sdnr/functional/devicemanager/_templates/10_lifecycleNetconfSsh/devicemanagerlifecycle_netconf.robot
new file mode 100644
index 00000000..084c1556
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/_templates/10_lifecycleNetconfSsh/devicemanagerlifecycle_netconf.robot
@@ -0,0 +1,401 @@
+*** Settings ***
+Documentation devicemanager lifecycle via netconf only
+... Verify network element connection
+... Actions are triggered via server interface as used by ODLUX
+... Status verifcation is done by dataprovider interface and restconf mdsal
+... to detect asynchron connection status entries
+Default Tags dm-lifecycle netconf ssh
+
+Library ConnectLibrary
+Library SDNCBaseLibrary
+Library SDNCDataProvider
+Library SDNCRestconfLibrary
+Library ConnectApp
+Library FaultManagementApp
+Library FaultManagementAppBackend
+Library Collections
+Library DateTime
+Library utility
+
+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
+${HOST} ${NETWORK_FUNCTIONS}[${DEVICE_TYPE}][NETCONF_HOST]
+${PORT} ${NETWORK_FUNCTIONS}[${DEVICE_TYPE}][BASE_PORT]
+${USERNAME} ${NETWORK_FUNCTIONS}[${DEVICE_TYPE}][USER]
+${PASSWORD} ${NETWORK_FUNCTIONS}[${DEVICE_TYPE}][PASSWORD]
+${HOST_NOK} 192.168.240.240
+${PORT_NOK} ${4711}
+${USERNAME_NOK} wrong-username
+${PASSWORD_NOK} wrong-password
+${CORE_MODEL} Unsupported
+${UNDEFINED} undefined
+${DEVICE_TO_DELETE} devices
+
+# set log level https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
+
+
+*** Test Cases ***
+
+Add network element connection
+ [Documentation] Add network-function to device manager
+ ... verify correct detection of specific device manager
+ ... verify correct entries in connection log
+ [Tags] smoke
+
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-ok
+ 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
+ Log To Console ${start_time}
+ ConnectApp.Add network element connection ${DEVICE_NAME_TEST} ${True} ${HOST} ${PORT} ${USERNAME} ${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}
+ ... node-id=${DEVICE_NAME_TEST}
+ ... is-required=${True}
+ ... status=Connected
+ ... host=${HOST}
+ ... port=${PORT}
+ ... core-model-capability=${CORE_MODEL}
+ ... device-type=${DEVICE_TYPE_GUI}
+ # Check connection status log entries
+ Sleep 1s 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}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${conn_status_list_stats} Connected 1 msg=wrong connection log entries for Connected state
+ Dictionary Should Contain Item ${conn_status_list_stats} Mounted 1 msg=wrong connection log entries for Mounted state
+
+Retrieve yang capabilities from network element
+ [Documentation] get yang capabilities from network element and compare with reference file
+ [Tags] smoke netconf yang
+
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-ok
+ ${yang_capabilities} = get_yang_capabilities_as_list node_id=${DEVICE_NAME_TEST}
+ Log ${yang_capabilities}
+ ${is_yang_correct} = compare_yang_capability_list_to_file ${yang_capabilities} ${YANG_CAPABILITIES_FILE}
+ 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
+ ... 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-ok
+ ConnectApp.Remove network element connection ${DEVICE_NAME_TEST}
+ Run Keyword And Continue On Failure ConnectApp.Should be equal connection status until time ${DEVICE_NAME_TEST} not existing
+ SDNCRestconfLibrary.should_be_equal_connection_status_until_time ${DEVICE_NAME_TEST} not existing time_in_sec=${10}
+
+ # Check connection status log entries
+ Sleep 6s 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}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Dictionary Should Contain Item ${conn_status_list_stats} Unmounted 1 msg=wrong connection log entries for Unmounted state
+
+Add network element connection wrong port
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-port-nok
+ ConnectApp.Add network element connection ${DEVICE_NAME_TEST} ${True} ${HOST} ${PORT_NOK} ${USERNAME} ${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}
+ ... node-id=${DEVICE_NAME_TEST}
+ ... is-required=${True}
+ ... status=Connecting
+ ... host=${HOST}
+ ... port=${PORT_NOK}
+ # Check connection status log entries
+ Sleep 1s 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}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${conn_status_list_stats} Mounted 1 msg=wrong connection log entries for Mounted state
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Connected
+ Dictionary Should Not Contain Key ${conn_status_list_stats} Unmounted
+
+Remove network element connection wrong port
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-port-nok
+ ConnectApp.Remove network element connection ${DEVICE_NAME_TEST}
+ Run Keyword And Continue On Failure ConnectApp.Should be equal connection status until time ${DEVICE_NAME_TEST} not existing
+ 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
+ ${connection_status_list} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${conn_status_list_stats} Unmounted 1 msg=wrong connection log entries for Unmounted state
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Connected
+ Dictionary Should Not Contain Key ${conn_status_list_stats} Mounted
+
+Add network element connection wrong ip
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-ip-nok
+ ConnectApp.Add network element connection ${DEVICE_NAME_TEST} ${True} ${HOST_NOK} ${PORT} ${USERNAME} ${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}
+ ... node-id=${DEVICE_NAME_TEST}
+ ... is-required=${True}
+ ... status=Connecting
+ ... host=${HOST_NOK}
+ ... port=${PORT}
+ # Check connection status log entries
+ Sleep 1s 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}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${conn_status_list_stats} Mounted 1 msg=wrong connection log entries for Mounted state
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Connected
+ Dictionary Should Not Contain Key ${conn_status_list_stats} Unmounted
+
+Remove network element connection wrong ip
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-ip-nok
+ ConnectApp.Remove network element connection ${DEVICE_NAME_TEST}
+ Run Keyword And Continue On Failure ConnectApp.Should be equal connection status until time ${DEVICE_NAME_TEST} not existing
+ 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
+ ${connection_status_list} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${conn_status_list_stats} Unmounted 1 msg=wrong connection log entries for Unmounted state
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Connected
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Mounted
+
+Add network element connection and change is required to false
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-required
+ ConnectApp.Add network element connection ${DEVICE_NAME_TEST} ${True} ${HOST} ${PORT} ${USERNAME} ${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}
+ ... node-id=${DEVICE_NAME_TEST}
+ ... is-required=${True}
+
+ ConnectApp.edit network element connection ${DEVICE_NAME_TEST} ${False}
+ Run Keyword And Continue On Failure ConnectApp.should_be_equal_network_element_connection_details ${DEVICE_NAME_TEST}
+ ... node-id=${DEVICE_NAME_TEST}
+ ... is-required=${False}
+ # Check connection status log entries
+ Sleep 1s 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}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ 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
+
+Edit network element connection: is required to true
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-required
+ ConnectApp.edit network element connection ${DEVICE_NAME_TEST} ${True}
+ Run Keyword And Continue On Failure ConnectApp.should_be_equal_network_element_connection_details ${DEVICE_NAME_TEST}
+ ... node-id=${DEVICE_NAME_TEST}
+ ... is-required=${True}
+ # Check connection status log entries
+ Sleep 1s 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}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Connected
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Mounted
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Unmounted
+ #Dictionary Should Not Contain Key ${conn_status_list_stats} Connecting
+
+Unmount network element
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-required
+ ConnectApp.unmount_network_element ${DEVICE_NAME_TEST}
+ Run Keyword And Continue On Failure ConnectApp.Should Be Equal connection status until time ${DEVICE_NAME_TEST} Disconnected
+ 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
+ ${connection_status_list} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${conn_status_list_stats} Unmounted 1 msg=wrong connection log entries for Unmounted state
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Connected
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Mounted
+ #Dictionary Should Not Contain Key ${conn_status_list_stats} Connecting
+
+
+Mount network element
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-required
+ ConnectApp.mount_network_element ${DEVICE_NAME_TEST}
+ 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}
+
+ # Check connection status log entries
+ Sleep 1s 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}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ 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
+
+Remove network element connection
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-required
+ ConnectApp.remove network element connection ${DEVICE_NAME_TEST}
+ Run Keyword And Continue On Failure ConnectApp.Should Be Equal connection status until time ${DEVICE_NAME_TEST} not existing
+ 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
+ ${connection_status_list} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${conn_status_list_stats} Unmounted 1 msg=wrong connection log entries for Unmounted state
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Connected
+ Run Keyword And Continue On Failure Dictionary Should Not Contain Key ${conn_status_list_stats} Mounted
+ #Dictionary Should Not Contain Key ${conn_status_list_stats} Connecting
+
+Remove unmounted network element connection
+ [Tags] prio2
+ 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
+ Set Test Variable ${DEVICE_NAME_TEST} ${DEVICE_NAME}-required-true
+ ConnectApp.Add network element connection ${DEVICE_NAME_TEST} ${True} ${HOST} ${PORT} ${USERNAME} ${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}
+
+ ConnectApp.unmount_network_element ${DEVICE_NAME_TEST}
+ Run Keyword And Continue On Failure ConnectApp.Should Be Equal connection status until time ${DEVICE_NAME_TEST} Disconnected
+ Run Keyword And Continue On Failure SDNCRestconfLibrary.should_be_equal_connection_status_until_time ${DEVICE_NAME_TEST} not existing time_in_sec=${10}
+
+ ConnectApp.remove_network_element_connection ${DEVICE_NAME_TEST}
+ Run Keyword And Continue On Failure ConnectApp.Should Be Equal connection status until time ${DEVICE_NAME_TEST} not existing
+
+ # Check connection status log entries
+ Sleep 1s 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}
+ ${connection_status_list_debug} = FaultManagementApp.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ Log ${connection_status_list_debug}
+ ${connection_status_list_debug_backend} = FaultManagementAppBackend.get_connection_log_list node-id=${DEVICE_NAME_TEST}
+ ... timestamp=>=${start_time}
+ Log ${connection_status_list_debug_backend}
+ ${conn_status_list_stats} = get_counts_from_list ${connection_status_list} status
+ Log Dictionary ${conn_status_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${conn_status_list_stats} Mounted 1 msg=wrong connection log entries for Mounted state
+ 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 Key ${conn_status_list_stats} Unmounted msg=no connection log entries for Unmounted state
+ ConnectApp.Remove Network Element Connection ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+
+
diff --git a/csit/tests/sdnr/functional/devicemanager/_templates/20_pnfRegistration/pnfRegistration.robot b/csit/tests/sdnr/functional/devicemanager/_templates/20_pnfRegistration/pnfRegistration.robot
new file mode 100644
index 00000000..3fadf223
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/_templates/20_pnfRegistration/pnfRegistration.robot
@@ -0,0 +1,118 @@
+*** Settings ***
+Documentation Set VES collector endpoint details in NTS manager
+... VES endpooint Details and NTS manager information are stored in test environemnt variable file <environment>
+... as dictionary NETWORK_FUNCTIONS = {}, VESCOLLECTOR ={}
+... change number devices on command line with --variable DEVICE_TYPE:ORAN
+...
+
+Library ConnectLibrary
+Library String
+Library SDNCBaseLibrary
+Library SDNCRestconfLibrary
+Library NTSimManagerNG
+Library SDNCDataProvider
+Library ConnectApp
+
+Suite Setup global suite setup &{GLOBAL_SUITE_SETUP_CONFIG}
+Suite Teardown global suite teardown
+
+
+*** Variables ***
+${DEVICE_TYPE} DEFINE_IN_INIT
+${SIM_COUNT} 1
+${CORE_MODEL} DEFINE_IN_INIT
+${DEVICE_TYPE_GUI} DEFINE_IN_INIT
+${PNF_REGISTRATION_TIMEOUT} 180
+
+
+*** Test Cases ***
+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
+ SDNCRestconfLibrary.Should Be Equal Connection Status Until Time ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} Connected
+
+Start pnf ves registration from NTS function
+ [Tags] nts bringup
+ [Documentation] scales number of simulated devices per device type to '0'
+ ... set details for VES endpoint
+ ... scales number of simulated devices per device type
+ Stop Network Function Feature ${NETWORK_FUNCTIONS['O_RAN_FH']['NAME']} ves-pnf-registration
+ NTSimManagerNG.set_ves_endpoint_details_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ ... ves-endpoint-protocol=${VESCOLLECTOR}[SCHEME]
+ ... ves-endpoint-ip=${VESCOLLECTOR}[IP]
+ ... ves-endpoint-port=${VESCOLLECTOR}[PORT]
+ ... ves-endpoint-auth-method=${VESCOLLECTOR}[AUTHMETHOD]
+ ... ves-endpoint-username=${VESCOLLECTOR}[USERNAME]
+ ... ves-endpoint-password=${VESCOLLECTOR}[PASSWORD]
+ Start Network Function Feature ${NETWORK_FUNCTIONS['O_RAN_FH']['NAME']} ves-pnf-registration
+ NTSimManagerNG.set_ves_config_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ ... pnf-registration=${True}
+ sleep 10s reason=Wait before start network function
+# Log console=True message=Wait some time ${PNF_REGISTRATION_TIMEOUT} till request sent by NTSim
+# ConnectApp.should_be_equal_connection_status_until_time ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} Connected ${180}
+
+
+Verify connection status SSH
+ [Tags] pnfregistration dm-lifecycle SSH
+ sleep 5s reason=Wait for processing of simulated device
+ @{pnf_list}= NTSimManagerNG.get_simulated_pnfs_nf ${DEVICE_TYPE} protocol=SSH
+ ${length} = Get Length ${pnf_list}
+ Should Not Be Equal As Integers ${length} 0 msg=No network functions created
+
+ Log to console ${pnf_list}
+ FOR ${device} IN @{pnf_list}
+ ${node_id}= set variable ${device["node-id"]}
+ ${port}= set variable ${device["port"]}
+ Log console=True message=Verify connection status: ${node_id}
+ Run Keyword And Continue On Failure ConnectApp.Should Be Equal connection status until time
+ ... ${node_id} Connected ${PNF_REGISTRATION_TIMEOUT}
+ SDNCRestconfLibrary.Should Be Equal Connection Status Until Time ${node_id} connected ${5}
+ ConnectApp.should_be_equal_network_element_connection_details ${node_id}
+ ... node-id=${node_id}
+ ... is-required=${False}
+ ... status=Connected
+ ... port=${port}
+ ... core-model-capability=${CORE_MODEL}
+ ... device-type=${DEVICE_TYPE_GUI}
+ END
+
+Verify connection status TLS
+ [Tags] pnfregistration dm-lifecycle TLS
+ @{pnf_list}= NTSimManagerNG.get_simulated_pnfs_nf ${DEVICE_TYPE} protocol=TLS
+ Log to console ${pnf_list}
+ ${length} = Get Length ${pnf_list}
+ Should Not Be Equal As Integers ${length} 0 msg=No network functions created
+
+ FOR ${device} IN @{pnf_list}
+ ${node_id}= set variable ${device["node-id"]}
+ ${port}= set variable ${device["port"]}
+ Log console=True message=Verify connection status: ${node_id}
+ Run Keyword And Continue On Failure ConnectApp.Should Be Equal connection status until time
+ ... ${node_id} Connected ${PNF_REGISTRATION_TIMEOUT}
+ SDNCRestconfLibrary.Should Be Equal Connection Status Until Time ${node_id} connected ${5}
+ ConnectApp.should_be_equal_network_element_connection_details ${node_id}
+ ... node-id=${node_id}
+ ... is-required=${False}
+ ... status=Connected
+ ... port=${port}
+ ... core-model-capability=${CORE_MODEL}
+ ... device-type=${DEVICE_TYPE_GUI}
+ END
+
+Remove all networkelement connections
+ [Documentation] Delete all network element connections, should not fail if the connection is not there
+ [Tags] restconf dm-lifecycle
+ Stop Network Function Feature ${NETWORK_FUNCTIONS['O_RAN_FH']['NAME']} ves-pnf-registration
+ @{pnf_list}= NTSimManagerNG.get_simulated_pnfs_nf ${DEVICE_TYPE}
+ FOR ${device} IN @{pnf_list}
+ ${node_id}= set variable ${device["node-id"]}
+ Run Keyword And Ignore Error ConnectApp.remove network element connection filtered validate=${True} node-id=${node_id}
+ END
+ NTSimManagerNG.set_ves_config_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ ... pnf-registration=${False}
+ ConnectApp.Remove Network Element Connection ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+
diff --git a/csit/tests/sdnr/functional/devicemanager/_templates/21_alarmNotificationVES/alarmNotificationVes.robot b/csit/tests/sdnr/functional/devicemanager/_templates/21_alarmNotificationVES/alarmNotificationVes.robot
new file mode 100644
index 00000000..068a6b89
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/_templates/21_alarmNotificationVES/alarmNotificationVes.robot
@@ -0,0 +1,136 @@
+*** Settings ***
+Documentation Connects NTSim of specific device type
+... NTSim information are stored in test environment variable file <environment>
+... as dictionary NETWORK_FUNCTIONS = {}
+... change device type on command line with e.g. --variable DEVICE_TYPE:O_RAN_FH
+... Enable alarms by setting fault-notification-delay-period and validate the alarms published by NTSim
+... received by SDNR via VES use case
+Default Tags fm ves
+
+Library ConnectLibrary
+Library SDNCRestconfLibrary
+Library SDNCBaseLibrary
+Library ConnectApp
+Library NTSimManagerNG
+Library FaultManagementApp
+Library FaultManagementAppBackend
+Library utility
+Library DateTime
+Library Collections
+
+Suite Setup global suite setup &{GLOBAL_SUITE_SETUP_CONFIG}
+Suite Teardown global suite teardown
+
+
+*** Variables ***
+${DEVICE_TYPE} _FILL_HERE_
+${FAULT_DELAY} 5
+${TIME_PERIOD_SEND_NOTIFY} 22s
+${PROCESS_TIME_NOTIF} 30s
+&{ALARM_SEVERITY_DEFAULT} Critical=${0} Major=${0} Minor=${0} Warning=${0} NonAlarmed=${0}
+
+
+*** Test Cases ***
+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
+ SDNCRestconfLibrary.Should Be Equal Connection Status Until Time ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} Connected
+
+Set alarm notification
+ [Tags] smoke
+ NTSimManagerNG.clear_alarm_count ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ NTSimManagerNG.set_ves_config_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} faults-enabled=${True}
+ ${vesAlarmGenerated} = NTSimManagerNG.Get Alarm Count ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ 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
+ Set Global Variable ${start_time}
+ ${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_NOTIFY} level=INFO html=False console=True repr=False
+ Sleep ${TIME_PERIOD_SEND_NOTIFY}
+
+UnSet alarm notification
+ [Documentation] stops alarm generation and create dictionary ${vesAlarmGenerated}
+ ... for further checks
+ [Tags] smoke
+ NTSimManagerNG.set_fault_delay_list_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} delay-period=${0}
+ #NTSimManagerNG.set_ves_config_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ #... faults-enabled=${False}
+ Log Wait ${PROCESS_TIME_NOTIF} to process notifications level=INFO html=False console=True repr=False
+ Sleep ${PROCESS_TIME_NOTIF}
+ # get generated alarms
+ ${vesAlarmGenerated} = NTSimManagerNG.Get Alarm Count ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ ${alarmsGenerated} = Get Dictionary Values ${vesAlarmGenerated}
+ Log ${alarmsGenerated}
+ ${numAlarmsGenerated} = evaluate sum(${alarmsGenerated})
+ Log ${numAlarmsGenerated}
+ Should Not Be Equal As Integers ${numAlarmsGenerated} 0 msg=no alarm notifications generated
+ Set Global Variable ${vesAlarmGenerated}
+
+
+Verify alarm log
+ [Documentation] NTSim sends alarm notification for all simulated devices
+ ... Verification is done for all simulated devices of the simulator
+ [Tags] smoke fm ves
+
+ @{pnf_list}= NTSimManagerNG.get_simulated_pnfs_nf_as_node_id_list ${DEVICE_TYPE}
+ ${length} = Get Length ${pnf_list}
+ Should Not Be Equal As Integers ${length} 0 msg=No network functions created
+ Log to console ${pnf_list}
+ FOR ${device} IN @{pnf_list}
+ ${alarm_log_list_debug_backend} = FaultManagementAppBackend.get_alarm_log_list source-type=Ves
+ ... timestamp=>=${start_time}
+ ... node-id=${device}
+ Log ${alarm_log_list_debug_backend}
+ ${alarm_log_list} = FaultManagementApp.get_alarm_log_list source-type=Ves
+ ... timestamp=>=${start_time}
+ ... node-id=${device}
+ ${alarm_log_list_stats} = get_counts_from_list ${alarm_log_list} severity ${ALARM_SEVERITY_DEFAULT}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} Critical ${vesAlarmGenerated}[critical]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} Major ${vesAlarmGenerated}[major]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} Minor ${vesAlarmGenerated}[minor]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} Warning ${vesAlarmGenerated}[warning]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} NonAlarmed ${vesAlarmGenerated}[normal]
+ END
+
+Verify current problem list
+ [Tags] smoke
+ ${alarm_log_list} = FaultManagementApp.get_alarm_log_list timestamp=>=${start_time}
+ ${current_problem_list_calculated}= FaultManagementApp.calculate_current_alarm_list ${alarm_log_list}
+ Log ${current_problem_list_calculated}
+ ${current_problem_list}= FaultManagementApp.get_current_problem_list timestamp=>=${start_time}
+ Log ${current_problem_list}
+ ${current_problem_list_debug}= FaultManagementApp.get_current_problem_list
+ Log ${current_problem_list_debug}
+ ${current_problem_list_debug_backend}= FaultManagementAppBackend.get_current_problem_list timestamp=>=${start_time}
+ Log ${current_problem_list_debug_backend}
+ ${current_problem_list_calculated_stats}= get_counts_from_list ${current_problem_list_calculated} severity ${ALARM_SEVERITY_DEFAULT}
+ ${current_problem_list_stats}= get_counts_from_list ${current_problem_list} severity ${ALARM_SEVERITY_DEFAULT}
+ Log Dictionary ${current_problem_list_calculated_stats}
+ Log Dictionary ${current_problem_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${current_problem_list_stats} Critical ${current_problem_list_calculated_stats}[Critical]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${current_problem_list_stats} Major ${current_problem_list_calculated_stats}[Major]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${current_problem_list_stats} Minor ${current_problem_list_calculated_stats}[Minor]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${current_problem_list_stats} Warning ${current_problem_list_calculated_stats}[Warning]
+
+Verify alarm status bar
+ [Tags] smoke
+ Sleep 10s reason=wait update alarmstatus
+ ${alarm_status_end} = FaultManagementApp.get_alarm_status
+ Log Dictionary ${alarm_status_start}
+ Log Dictionary ${alarm_status_end}
+ Run Keyword And Continue On Failure Evaluate ${alarm_status_end}[criticals]-${alarm_status_start}[criticals] == ${vesAlarmGenerated}[critical]
+ Run Keyword And Continue On Failure Evaluate ${alarm_status_end}[majors]-${alarm_status_start}[majors] == ${vesAlarmGenerated}[major]
+ Run Keyword And Continue On Failure Evaluate ${alarm_status_end}[minors]-${alarm_status_start}[minors] == ${vesAlarmGenerated}[minor]
+ Run Keyword And Continue On Failure Evaluate ${alarm_status_end}[warnings]-${alarm_status_start}[warnings] == ${vesAlarmGenerated}[warning]
+
+Remove networkelement connection
+ ConnectApp.Remove network element connection ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ Run Keyword And Continue On Failure ConnectApp.Should be equal connection status until time ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} not existing
+ SDNCRestconfLibrary.Should Be Equal Connection Status Until Time ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} not existing
diff --git a/csit/tests/sdnr/functional/devicemanager/_templates/22_alarmNotificationNETCONF/alarmNotificationNetconf.robot b/csit/tests/sdnr/functional/devicemanager/_templates/22_alarmNotificationNETCONF/alarmNotificationNetconf.robot
new file mode 100644
index 00000000..df023c41
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/_templates/22_alarmNotificationNETCONF/alarmNotificationNetconf.robot
@@ -0,0 +1,143 @@
+*** Settings ***
+Documentation Connects NTSim of specific device type
+... NTSim information are stored in test environment variable file <environment>
+... as dictionary NETWORK_FUNCTIONS = {}
+... change device type on command line with e.g. --variable DEVICE_TYPE:O_RAN_FH
+... Enable alarms by setting fault-notification-delay-period and validate the alarms raised by NTS
+... received by SDNR via netconf
+Default Tags fm ves
+
+Library ConnectLibrary
+Library SDNCBaseLibrary
+Library SDNCRestconfLibrary
+Library ConnectApp
+Library NTSimManagerNG
+Library FaultManagementApp
+Library FaultManagementAppBackend
+Library utility
+Library DateTime
+Library Collections
+
+Suite Setup global suite setup &{GLOBAL_SUITE_SETUP_CONFIG}
+Suite Teardown global suite teardown
+
+
+*** Variables ***
+${DEVICE_TYPE} DEFINE_IN_INIT
+${HOST} ${NETWORK_FUNCTIONS}[${DEVICE_TYPE}][NETCONF_HOST]
+${PORT} ${NETWORK_FUNCTIONS}[${DEVICE_TYPE}][BASE_PORT]
+${USERNAME} ${NETWORK_FUNCTIONS}[${DEVICE_TYPE}][USER]
+${PASSWORD} ${NETWORK_FUNCTIONS}[${DEVICE_TYPE}][PASSWORD]
+${HOST_NOK} 192.168.240.240
+${PORT_NOK} ${4711}
+${USERNAME_NOK} wrong-username
+${PASSWORD_NOK} wrong-password
+${CORE_MODEL} Unsupported
+${UNDEFINED} undefined
+${FAULT_DELAY} 5
+${TIME_PERIOD_SEND_NOTIF} 22s
+&{ALARM_SEVERITY_DEFAULT} Critical=${0} Major=${0} Minor=${0} Warning=${0} NonAlarmed=${0}
+
+
+*** Test Cases ***
+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
+ SDNCRestconfLibrary.Should Be Equal Connection Status Until Time ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} Connected
+
+Set alarm notification
+ [Tags] smoke
+ NTSimManagerNG.clear_alarm_count ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ NTSimManagerNG.Set Netconf Config Nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} faults-enabled=${True}
+ ${vesAlarmGenerated} = NTSimManagerNG.Get Alarm Count ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ 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
+ Set Global Variable ${start_time}
+ ${current_problem_list}= FaultManagementApp.Get Current Problem List
+ Log ${current_problem_list}
+ ${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}
+
+UnSet alarm notification
+ [Documentation] stops alarm generation and create dictionary ${netconfAlarmGenerated}
+ ... for further checks
+ [Tags] smoke
+ ${netconfAlarmGenerated} = NTSimManagerNG.Get Alarm Count ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ NTSimManagerNG.set_fault_delay_list_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} delay-period=${0}
+ NTSimManagerNG.Set Netconf Config Nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} faults-enabled=${False}
+ # get generated alarms
+ ${alarmsGenerated} = Get Dictionary Values ${netconfAlarmGenerated}
+ Log ${alarmsGenerated}
+ ${numAlarmsGenerated} = evaluate sum(${alarmsGenerated})
+ Log ${numAlarmsGenerated}
+ Should Not Be Equal As Integers ${numAlarmsGenerated} 0 msg=no alarm notifications generated
+ Set Global Variable ${netconfAlarmGenerated}
+
+
+Verify alarm log
+ [Tags] smoke
+
+ ${alarm_log_list} = FaultManagementApp.get_alarm_log_list source-type=Netconf
+ ... timestamp=>=${start_time}
+ ... node-id=${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ ${alarm_log_list_stats} = get_counts_from_list ${alarm_log_list} severity ${ALARM_SEVERITY_DEFAULT}
+ Log Dictionary ${alarm_log_list_stats}
+ ${alarm_log_list_debug} = FaultManagementApp.get_alarm_log_list source-type=Netconf
+ Log ${alarm_log_list_debug}
+ ${alarm_log_list_debug_backend} = FaultManagementAppBackend.get_alarm_log_list source-type=Netconf
+ ... timestamp=>=${start_time}
+ Log ${alarm_log_list_debug_backend}
+
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} Critical ${netconfAlarmGenerated}[critical]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} Major ${netconfAlarmGenerated}[major]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} Minor ${netconfAlarmGenerated}[minor]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} Warning ${netconfAlarmGenerated}[warning]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${alarm_log_list_stats} NonAlarmed ${netconfAlarmGenerated}[normal]
+
+Verify current problem list
+ [Tags] smoke
+ # fails immediatly if netconfAlarmGenerated is not set
+ Log ${netconfAlarmGenerated}
+ ${alarm_log_list} = FaultManagementApp.get_alarm_log_list timestamp=>=${start_time}
+ ${current_problem_list_calculated}= FaultManagementApp.calculate_current_alarm_list ${alarm_log_list}
+ Log ${current_problem_list_calculated}
+ ${current_problem_list}= FaultManagementApp.get_current_problem_list timestamp=>=${start_time}
+ Log ${current_problem_list}
+ ${current_problem_list_debug}= FaultManagementApp.get_current_problem_list
+ Log ${current_problem_list_debug}
+ ${current_problem_list_debug_backend}= FaultManagementAppBackend.get_current_problem_list timestamp=>=${start_time}
+ Log ${current_problem_list_debug_backend}
+ ${current_problem_list_calculated_stats} = get_counts_from_list ${current_problem_list_calculated} severity ${ALARM_SEVERITY_DEFAULT}
+ ${current_problem_list_stats} = get_counts_from_list ${current_problem_list} severity ${ALARM_SEVERITY_DEFAULT}
+ Log Dictionary ${current_problem_list_calculated_stats}
+ Log Dictionary ${current_problem_list_stats}
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${current_problem_list_stats} Critical ${current_problem_list_calculated_stats}[Critical]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${current_problem_list_stats} Major ${current_problem_list_calculated_stats}[Major]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${current_problem_list_stats} Minor ${current_problem_list_calculated_stats}[Minor]
+ Run Keyword And Continue On Failure Dictionary Should Contain Item ${current_problem_list_stats} Warning ${current_problem_list_calculated_stats}[Warning]
+
+Verify alarm status bar
+ [Tags] smoke
+ Sleep 10s reason=wait update alarmstatus
+ ${alarm_status_end} = FaultManagementApp.get_alarm_status
+ Log Dictionary ${alarm_status_start}
+ Log Dictionary ${alarm_status_end}
+ Run Keyword And Continue On Failure Evaluate ${alarm_status_end}[criticals]-${alarm_status_start}[criticals] == ${netconfAlarmGenerated}[critical]
+ Run Keyword And Continue On Failure Evaluate ${alarm_status_end}[majors]-${alarm_status_start}[majors] == ${netconfAlarmGenerated}[major]
+ Run Keyword And Continue On Failure Evaluate ${alarm_status_end}[minors]-${alarm_status_start}[minors] == ${netconfAlarmGenerated}[minor]
+ Run Keyword And Continue On Failure Evaluate ${alarm_status_end}[warnings]-${alarm_status_start}[warnings] == ${netconfAlarmGenerated}[warning]
+
+Remove networkelement connection
+ ConnectApp.Remove network element connection ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ Run Keyword And Continue On Failure ConnectApp.Should be equal connection status until time ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} not existing
+ SDNCRestconfLibrary.Should Be Equal Connection Status Until Time ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} not existing
+
diff --git a/csit/tests/sdnr/functional/devicemanager/_templates/90_resetSimulatedDevices/90_resetSimulatedDevices.robot b/csit/tests/sdnr/functional/devicemanager/_templates/90_resetSimulatedDevices/90_resetSimulatedDevices.robot
new file mode 100644
index 00000000..e9db7405
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/_templates/90_resetSimulatedDevices/90_resetSimulatedDevices.robot
@@ -0,0 +1,25 @@
+*** Settings ***
+Documentation Set number of simulated devices of all device types
+... NTS manager information are stored in test environemnt variable file <environment>
+... as dictionary NTS_MANAGER = {}
+... change number devices on command line with --variable SIM_COUNT:10 --variable DEVICE_TYPE:ORAN
+
+Library ConnectLibrary
+Library SDNCBaseLibrary
+Library NTSimManagerNG
+Library ConnectApp
+
+Suite Setup global_suite_setup
+Suite Teardown global suite teardown
+
+
+*** Variables ***
+${DEVICE_TYPE} DEFINE_IN_INIT
+${SIM_COUNT} 0
+
+
+*** Test Cases ***
+Reset simulated devices
+ [Tags] nts-manager bringup
+ [Documentation] scales number of simulated devices per device type
+ remove network element connection filtered node-id=*
diff --git a/csit/tests/sdnr/functional/devicemanager/_templates/__init__.robot b/csit/tests/sdnr/functional/devicemanager/_templates/__init__.robot
new file mode 100644
index 00000000..0011fbc5
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/_templates/__init__.robot
@@ -0,0 +1,16 @@
+*** Settings ***
+Documentation Test suite for _FILL_HERE_ devices
+Suite Setup My Setup
+Force Tags _FILL_HERE_
+#Library SomeLibrary
+
+*** Variables ***
+
+
+*** Keywords ***
+My Setup
+ Set Suite Variable ${DEVICE_TYPE} _FILL_HERE_ children=true
+ Set Suite Variable ${CORE_MODEL} _FILL_HERE_ children=true
+ Set Suite Variable ${DEVICE_TYPE_GUI} _FILL_HERE_ children=true
+
+
diff --git a/csit/tests/sdnr/functional/devicemanager/o-ran-basic/20_pnfRegistration b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/20_pnfRegistration
new file mode 120000
index 00000000..2c1e5752
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/20_pnfRegistration
@@ -0,0 +1 @@
+../_templates/20_pnfRegistration \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/o-ran-basic/21_alarmNotificationVES b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/21_alarmNotificationVES
new file mode 120000
index 00000000..80f9ccaa
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/21_alarmNotificationVES
@@ -0,0 +1 @@
+../_templates/21_alarmNotificationVES \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/o-ran-basic/90_resetSimulatedDevices b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/90_resetSimulatedDevices
new file mode 120000
index 00000000..86f3cad3
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/90_resetSimulatedDevices
@@ -0,0 +1 @@
+../_templates/90_resetSimulatedDevices \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/o-ran-basic/__init__.robot b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/__init__.robot
new file mode 100644
index 00000000..36cbca9f
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/__init__.robot
@@ -0,0 +1,18 @@
+*** Settings ***
+Documentation Test suite for o-ran devices
+Suite Setup My Setup
+Force Tags o-ran
+Library OperatingSystem
+
+*** Variables ***
+
+
+*** Keywords ***
+My Setup
+ Set Suite Variable ${DEVICE_TYPE} O_RAN_FH children=true
+ Set Suite Variable ${CORE_MODEL} Unsupported children=true
+ Set Suite Variable ${DEVICE_TYPE_GUI} O-RAN children=true
+ ${yang_file} = Get File ${CURDIR}/yangCapabilities.txt
+ Set Suite Variable ${YANG_CAPABILITIES_FILE} ${yang_file} children=true
+
+
diff --git a/csit/tests/sdnr/functional/devicemanager/o-ran-basic/yangCapabilities.txt b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/yangCapabilities.txt
new file mode 100644
index 00000000..33e7abb7
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/o-ran-basic/yangCapabilities.txt
@@ -0,0 +1,70 @@
+[["o-ran-compression-factors", "2019-07-03"],
+ ["ietf-crypto-types", "2019-07-02"],
+ ["ietf-netconf", "2013-09-29"],
+ ["o-ran-alarm-id", "2019-02-04"],
+ ["o-ran-hardware", "2019-07-03"],
+ ["nc-notifications", "2008-07-14"],
+ ["ietf-inet-types", "2013-07-15"],
+ ["o-ran-antenna-calibration", "2019-07-03"],
+ ["o-ran-interfaces", "2019-07-03"],
+ ["ietf-ip", "2018-02-22"],
+ ["ietf-tcp-server", "2019-07-02"],
+ ["ietf-netconf-monitoring", "2010-10-04"],
+ ["iana-hardware", "2018-03-13"],
+ ["iana-if-type", "2017-01-19"],
+ ["ietf-netconf-acm", "2018-02-14"],
+ ["ietf-origin", "2018-02-14"],
+ ["o-ran-lbm", "2019-02-04"],
+ ["ietf-yang-metadata", "2016-08-05"],
+ ["o-ran-operations", "2019-07-03"],
+ ["o-ran-fan", "2019-07-03"],
+ ["o-ran-module-cap", "2019-07-03"],
+ ["ietf-tls-common", "2019-07-02"],
+ ["ietf-netconf-server", "2019-07-02"],
+ ["ietf-yang-types", "2013-07-15"],
+ ["ietf-ssh-common", "2019-07-02"],
+ ["o-ran-delay-management", "2019-07-03"],
+ ["ietf-ssh-server", "2019-07-02"],
+ ["ietf-system", "2014-08-06"],
+ ["o-ran-trace", "2019-07-03"],
+ ["o-ran-ald-port", "2019-07-03"],
+ ["ietf-netconf-notifications", "2012-02-06"],
+ ["ietf-tls-server", "2019-07-02"],
+ ["ietf-tcp-client", "2019-07-02"],
+ ["o-ran-fm", "2019-02-04"],
+ ["o-ran-laa-operations", "2019-07-03"],
+ ["onap-system", "2020-10-26"],
+ ["o-ran-supervision", "2019-07-03"],
+ ["o-ran-file-management", "2019-07-03"],
+ ["o-ran-performance-management", "2019-07-03"],
+ ["nts-common", "2021-06-08"],
+ ["o-ran-ecpri-delay", "2019-02-04"],
+ ["o-ran-laa", "2019-07-03"],
+ ["ietf-dhcpv6-types", "2018-01-30"],
+ ["o-ran-usermgmt", "2019-07-03"],
+ ["yang", "2017-02-20"],
+ ["o-ran-transceiver", "2019-07-03"],
+ ["ietf-keystore", "2019-07-02"],
+ ["ietf-netconf-with-defaults", "2011-06-01"],
+ ["o-ran-processing-element", "2019-07-03"],
+ ["ietf-yang-library", "2019-01-04"],
+ ["ietf-x509-cert-to-name", "2014-12-10"],
+ ["notifications", "2008-07-14"],
+ ["ietf-hardware", "2018-03-13"],
+ ["ietf-tcp-common", "2019-07-02"],
+ ["ietf-truststore", "2019-07-02"],
+ ["o-ran-uplane-conf", "2019-07-03"],
+ ["o-ran-ald", "2019-07-03"],
+ ["ietf-interfaces", "2018-02-20"],
+ ["o-ran-troubleshooting", "2019-02-04"],
+ ["o-ran-beamforming", "2019-07-03"],
+ ["o-ran-software-management", "2019-07-03"],
+ ["o-ran-externalio", "2019-07-03"],
+ ["o-ran-mplane-int", "2019-07-03"],
+ ["o-ran-sync", "2019-07-03"],
+ ["ietf-datastores", "2018-02-14"],
+ ["o-ran-dhcp", "2019-07-03"],
+ ["ietf-netconf-nmda", "2019-01-07"],
+ ["nts-network-function", "2021-06-18"],
+ ["o-ran-udp-echo", "2019-02-04"],
+ ["iana-crypt-hash", "2014-08-06"]] \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/10_lifecycleNetconfSsh b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/10_lifecycleNetconfSsh
new file mode 120000
index 00000000..639f57e8
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/10_lifecycleNetconfSsh
@@ -0,0 +1 @@
+../_templates/10_lifecycleNetconfSsh/ \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/22_alarmNotificationNETCONF b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/22_alarmNotificationNETCONF
new file mode 120000
index 00000000..60a2a791
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/22_alarmNotificationNETCONF
@@ -0,0 +1 @@
+../_templates/22_alarmNotificationNETCONF/ \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/90_resetSimulatedDevices b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/90_resetSimulatedDevices
new file mode 120000
index 00000000..d2624a66
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/90_resetSimulatedDevices
@@ -0,0 +1 @@
+../_templates/90_resetSimulatedDevices/ \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/__init__.robot b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/__init__.robot
new file mode 100644
index 00000000..2fbbea3e
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/__init__.robot
@@ -0,0 +1,19 @@
+*** Settings ***
+Documentation Test suite for onf core 1.2 devices
+Suite Setup My Setup
+Force Tags onf-core-12
+Library OperatingSystem
+
+*** Variables ***
+
+
+*** Keywords ***
+My Setup
+ Set Suite Variable ${DEVICE_TYPE} ONF_CORE_1_2 children=true
+ Set Suite Variable ${CORE_MODEL} 2017-03-20 children=true
+ Set Suite Variable ${DEVICE_TYPE_GUI} Wireless children=true
+ ${yang_file} = Get File ${CURDIR}/yangCapabilities.txt
+ Set Suite Variable ${YANG_CAPABILITIES_FILE} ${yang_file} children=true
+ Set Suite Variable ${IS_SUPERVISION_ALARM} ${True}
+
+
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/yangCapabilities.txt b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/yangCapabilities.txt
new file mode 100644
index 00000000..6f82f463
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore12-basic/yangCapabilities.txt
@@ -0,0 +1,35 @@
+[["core-model", "2017-03-20"],
+["onap-system", "2020-10-26"],
+["ietf-crypto-types", "2019-07-02"],
+["ietf-netconf-monitoring", "2010-10-04"],
+["nts-common", "2021-06-08"],
+["ietf-tcp-server", "2019-07-02"],
+["ietf-yang-metadata", "2016-08-05"],
+["ietf-keystore", "2019-07-02"],
+["ietf-inet-types", "2013-07-15"],
+["ietf-netconf-acm", "2018-02-14"],
+["ietf-x509-cert-to-name", "2014-12-10"],
+["ietf-yang-library", "2019-01-04"],
+["ietf-netconf-with-defaults", "2011-06-01"],
+["ietf-origin", "2018-02-14"],
+["ietf-tcp-common", "2019-07-02"],
+["nc-notifications", "2008-07-14"],
+["ietf-truststore", "2019-07-02"],
+["yang", "2017-02-20"],
+["ietf-tls-common", "2019-07-02"],
+["microwave-model", "2018-10-10"],
+["ietf-netconf-server", "2019-07-02"],
+["ietf-netconf", "2013-09-29"],
+["g.874.1-model", "2017-03-20"],
+["ietf-ssh-common", "2019-07-02"],
+["notifications", "2008-07-14"],
+["ietf-yang-types", "2013-07-15"],
+["ietf-ssh-server", "2019-07-02"],
+["ietf-datastores", "2018-02-14"],
+["ietf-system", "2014-08-06"],
+["ietf-netconf-nmda", "2019-01-07"],
+["iana-crypt-hash", "2014-08-06"],
+["nts-network-function", "2021-06-18"],
+["ietf-netconf-notifications", "2012-02-06"],
+["ietf-tls-server", "2019-07-02"],
+["ietf-tcp-client", "2019-07-02"]] \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/10_lifecycleNetconfSsh b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/10_lifecycleNetconfSsh
new file mode 120000
index 00000000..8f1d75b0
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/10_lifecycleNetconfSsh
@@ -0,0 +1 @@
+../_templates/10_lifecycleNetconfSsh \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/22_alarmNotificationNETCONF b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/22_alarmNotificationNETCONF
new file mode 120000
index 00000000..8b7b5170
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/22_alarmNotificationNETCONF
@@ -0,0 +1 @@
+../_templates/22_alarmNotificationNETCONF \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/90_resetSimulatedDevices b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/90_resetSimulatedDevices
new file mode 120000
index 00000000..86f3cad3
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/90_resetSimulatedDevices
@@ -0,0 +1 @@
+../_templates/90_resetSimulatedDevices \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/__init__.robot b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/__init__.robot
new file mode 100644
index 00000000..4def8cd4
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/__init__.robot
@@ -0,0 +1,19 @@
+*** Settings ***
+Documentation Test suite for onf core 1.4 devices
+Suite Setup My Setup
+Force Tags onf-core-14
+Library OperatingSystem
+
+*** Variables ***
+
+
+*** Keywords ***
+My Setup
+ Set Suite Variable ${DEVICE_TYPE} ONF_CORE_1_4 children=true
+ Set Suite Variable ${CORE_MODEL} 2019-11-27 children=true
+ Set Suite Variable ${DEVICE_TYPE_GUI} Wireless children=true
+ ${yang_file} = Get File ${CURDIR}/yangCapabilities.txt
+ Set Suite Variable ${YANG_CAPABILITIES_FILE} ${yang_file} children=true
+ Set Suite Variable ${IS_SUPERVISION_ALARM} ${True}
+
+
diff --git a/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/yangCapabilities.txt b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/yangCapabilities.txt
new file mode 100644
index 00000000..ddc11cca
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/onfcore14-basic/yangCapabilities.txt
@@ -0,0 +1,51 @@
+[["ethernet-container-2-0", "2020-01-21"],
+ ["ietf-crypto-types", "2019-07-02"],
+ ["ietf-netconf-notifications", "2012-02-06"],
+ ["ietf-yang-types", "2013-07-15"],
+ ["vlan-fd-1-0", "2021-01-05"],
+ ["ietf-tcp-server", "2019-07-02"],
+ ["yang", "2017-02-20"],
+ ["notifications", "2008-07-14"],
+ ["iana-crypt-hash", "2014-08-06"],
+ ["ietf-origin", "2018-02-14"],
+ ["wred-profile-1-0", "2020-01-24"],
+ ["ietf-netconf-monitoring", "2010-10-04"],
+ ["ietf-tls-common", "2019-07-02"],
+ ["ietf-netconf-server", "2019-07-02"],
+ ["mac-fd-1-0", "2020-08-26"],
+ ["wire-interface-2-0", "2020-01-23"],
+ ["ietf-ssh-common", "2019-07-02"],
+ ["qos-profile-1-0", "2020-01-24"],
+ ["mac-interface-1-0", "2020-01-23"],
+ ["ietf-ssh-server", "2019-07-02"],
+ ["ietf-netconf-with-defaults", "2011-06-01"],
+ ["ietf-tls-server", "2019-07-02"],
+ ["ietf-tcp-client", "2019-07-02"],
+ ["onap-system", "2020-10-26"],
+ ["l-3vpn-profile-1-0", "2020-01-27"],
+ ["ietf-netconf", "2013-09-29"],
+ ["nts-common", "2021-06-08"],
+ ["mac-fc-1-0", "2020-08-26"],
+ ["ltp-augment-1-0", "2020-07-30"],
+ ["ietf-keystore", "2019-07-02"],
+ ["co-channel-profile-1-0", "2020-01-27"],
+ ["vlan-interface-1-0", "2021-01-04"],
+ ["ietf-yang-library", "2019-01-04"],
+ ["ietf-netconf-acm", "2018-02-14"],
+ ["ietf-x509-cert-to-name", "2014-12-10"],
+ ["ietf-tcp-common", "2019-07-02"],
+ ["tdm-container-2-0", "2020-01-23"],
+ ["vlan-fc-1-0", "2021-01-05"],
+ ["ietf-truststore", "2019-07-02"],
+ ["pure-ethernet-structure-2-0", "2020-01-22"],
+ ["ietf-system", "2014-08-06"],
+ ["core-model-1-4", "2019-11-27"],
+ ["hybrid-mw-structure-2-0", "2020-01-22"],
+ ["air-interface-2-0", "2020-01-21"],
+ ["ietf-yang-metadata", "2016-08-05"],
+ ["ietf-datastores", "2018-02-14"],
+ ["nc-notifications", "2008-07-14"],
+ ["ietf-netconf-nmda", "2019-01-07"],
+ ["ip-interface-1-0", "2020-01-24"],
+ ["ietf-inet-types", "2013-07-15"],
+ ["nts-network-function", "2021-06-18"]] \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/openroadm-basic/10_lifecycleNetconfSsh b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/10_lifecycleNetconfSsh
new file mode 120000
index 00000000..639f57e8
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/10_lifecycleNetconfSsh
@@ -0,0 +1 @@
+../_templates/10_lifecycleNetconfSsh/ \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/openroadm-basic/22_alarmNotificationNETCONF b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/22_alarmNotificationNETCONF
new file mode 120000
index 00000000..60a2a791
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/22_alarmNotificationNETCONF
@@ -0,0 +1 @@
+../_templates/22_alarmNotificationNETCONF/ \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/openroadm-basic/90_resetSimulatedDevices b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/90_resetSimulatedDevices
new file mode 120000
index 00000000..d2624a66
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/90_resetSimulatedDevices
@@ -0,0 +1 @@
+../_templates/90_resetSimulatedDevices/ \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/devicemanager/openroadm-basic/__init__.robot b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/__init__.robot
new file mode 100644
index 00000000..a335edcf
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/__init__.robot
@@ -0,0 +1,18 @@
+*** Settings ***
+Documentation Test suite for open-roadm devices
+Suite Setup My Setup
+Force Tags openroadm
+Library OperatingSystem
+
+*** Variables ***
+
+
+*** Keywords ***
+My Setup
+ Set Suite Variable ${DEVICE_TYPE} OPENROADM_6_1_0 children=true
+ Set Suite Variable ${CORE_MODEL} Unsupported children=true
+ Set Suite Variable ${DEVICE_TYPE_GUI} O-ROADM children=true
+ ${yang_file} = Get File ${CURDIR}/yangCapabilities.txt
+ Set Suite Variable ${YANG_CAPABILITIES_FILE} ${yang_file} children=true
+
+
diff --git a/csit/tests/sdnr/functional/devicemanager/openroadm-basic/yangCapabilities.txt b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/yangCapabilities.txt
new file mode 100644
index 00000000..7efb5c0c
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/openroadm-basic/yangCapabilities.txt
@@ -0,0 +1,102 @@
+[["org-openroadm-common-attributes", "2019-11-29"],
+["ietf-netconf", "2011-06-01"],
+["ietf-netconf-notifications", "2012-02-06"],
+["org-openroadm-swdl", "2019-11-29"],
+["org-openroadm-common-types", "2019-11-29"],
+["ietf-tcp-server", "2019-07-02"],
+["org-openroadm-switching-pool-types", "2019-11-29"],
+["org-openroadm-rstp", "2019-11-29"],
+["org-openroadm-pm", "2019-11-29"],
+["org-openroadm-common-node-types", "2019-11-29"],
+["ietf-origin", "2018-02-14"],
+["iana-crypt-hash", "2014-08-06"],
+["org-openroadm-interfaces", "2019-11-29"],
+["org-openroadm-otn-otu-interfaces", "2019-11-29"],
+["ietf-tls-common", "2019-07-02"],
+["org-openroadm-common-amplifier-types", "2019-11-29"],
+["org-openroadm-ppp-interfaces", "2019-11-29"],
+["org-openroadm-resource", "2019-11-29"],
+["openconfig-telemetry-types", "2017-08-24"],
+["org-openroadm-device-types", "2019-11-29"],
+["org-openroadm-ethernet-interfaces", "2019-11-29"],
+["org-openroadm-pm-types", "2019-11-29"],
+["ietf-tls-server", "2019-07-02"],
+["ietf-netconf", "2013-09-29"],
+["onap-system", "2020-10-26"],
+["org-openroadm-optical-tributary-signal-interfaces", "2019-11-29"],
+["nts-common", "2021-06-08"],
+["org-openroadm-gcc-interfaces", "2019-11-29"],
+["org-openroadm-syslog", "2019-11-29"],
+["org-openroadm-common-alarm-pm-types", "2019-11-29"],
+["ietf-yang-library", "2019-01-04"],
+["org-openroadm-security", "2019-11-29"],
+["ietf-x509-cert-to-name", "2014-12-10"],
+["openconfig-telemetry", "2017-08-24"],
+["org-openroadm-ip", "2019-11-29"],
+["org-openroadm-optical-channel-interfaces", "2019-11-29"],
+["org-openroadm-fwdl", "2019-11-29"],
+["org-openroadm-dhcp", "2019-11-29"],
+["org-openroadm-tca", "2019-11-29"],
+["org-openroadm-manifest-file", "2019-11-29"],
+["org-openroadm-flexo-interfaces", "2019-11-29"],
+["org-openroadm-alarm", "2019-11-29"],
+["ietf-netconf-nmda", "2019-01-07"],
+["nts-network-function", "2021-06-18"],
+["iana-afn-safi", "2013-07-04"],
+["org-openroadm-common-state-types", "2019-11-29"],
+["org-openroadm-media-channel-interfaces", "2019-11-29"],
+["org-openroadm-key-chain", "2019-11-29"],
+["org-openroadm-common-equipment-types", "2019-11-29"],
+["ietf-crypto-types", "2019-07-02"],
+["org-openroadm-network-resource", "2019-11-29"],
+["openconfig-extensions", "2017-04-11"],
+["ietf-netconf-with-defaults", "2011-06-01"],
+["org-openroadm-otn-odu-interfaces", "2019-11-29"],
+["yang", "2017-02-20"],
+["org-openroadm-optical-operational-interfaces", "2019-11-29"],
+["org-openroadm-user-mgmt", "2019-11-29"],
+["notifications", "2008-07-14"],
+["org-openroadm-wavelength-map", "2019-11-29"],
+["org-openroadm-common-optical-channel-types", "2019-11-29"],
+["org-openroadm-physical-types", "2019-11-29"],
+["org-openroadm-telemetry-types", "2019-11-29"],
+["org-openroadm-otsi-group-interfaces", "2019-11-29"],
+["ietf-netconf-server", "2019-07-02"],
+["org-openroadm-otsigroup-capability", "2019-11-29"],
+["ietf-ssh-common", "2019-07-02"],
+["ietf-ssh-server", "2019-07-02"],
+["org-openroadm-maintenance-loopback", "2019-11-29"],
+["org-openroadm-port-capability", "2019-11-29"],
+["org-openroadm-network-media-channel-interfaces", "2019-11-29"],
+["ietf-tcp-client", "2019-07-02"],
+["org-openroadm-gnmi", "2019-11-29"],
+["org-openroadm-layerRate", "2019-11-29"],
+["org-openroadm-common-link-types", "2019-11-29"],
+["org-openroadm-probable-cause", "2019-11-29"],
+["org-openroadm-otn-common", "2019-11-29"],
+["nc-notifications", "2008-07-14"],
+["org-openroadm-de-operations", "2019-11-29"],
+["org-openroadm-file-transfer", "2019-11-29"],
+["org-openroadm-maintenance-testsignal", "2019-11-29"],
+["org-openroadm-port-types", "2019-11-29"],
+["org-openroadm-database", "2019-11-29"],
+["ietf-keystore", "2019-07-02"],
+["ietf-netconf-monitoring", "2010-10-04"],
+["org-openroadm-optical-transport-interfaces", "2019-11-29"],
+["ietf-system", "2014-08-06"],
+["ietf-tcp-common", "2019-07-02"],
+["ietf-netconf-acm", "2018-02-14"],
+["ietf-truststore", "2019-07-02"],
+["ietf-yang-metadata", "2016-08-05"],
+["org-openroadm-prot-otn-linear-aps", "2019-11-29"],
+["openconfig-inet-types", "2017-08-24"],
+["org-openroadm-lldp", "2019-11-29"],
+["org-openroadm-otn-common-types", "2019-11-29"],
+["org-openroadm-flexogroup-interfaces", "2019-11-29"],
+["org-openroadm-service-format", "2019-11-29"],
+["ietf-yang-types", "2013-07-15"],
+["ietf-inet-types", "2013-07-15"],
+["org-openroadm-equipment-states-types", "2019-11-29"],
+["org-openroadm-device", "2019-11-29"],
+["ietf-datastores", "2018-02-14"],
+["org-openroadm-resource-types", "2019-11-29"]]
diff --git a/csit/tests/sdnr/functional/devicemanager/readme.md b/csit/tests/sdnr/functional/devicemanager/readme.md
new file mode 100644
index 00000000..cd655220
--- /dev/null
+++ b/csit/tests/sdnr/functional/devicemanager/readme.md
@@ -0,0 +1,5 @@
+all test suites to verify FCAPS device manager functionality
+_templates dir provides basic test cases for different functions
+device-xyz directory contains:
+ __init__.robot with specific suitevariables
+ links to dedictaed testsuites or test cases provided by _templates dir \ No newline at end of file
diff --git a/csit/tests/sdnr/functional/dummy.robot b/csit/tests/sdnr/functional/dummy.robot
deleted file mode 100644
index 13687861..00000000
--- a/csit/tests/sdnr/functional/dummy.robot
+++ /dev/null
@@ -1,10 +0,0 @@
-*** Settings ***
-Documentation Dummy test case for debugging purposes
-
-Library BuiltIn
-
-
-*** Test Cases ***
-Dummy Test
- [Documentation] dummy test case passing by intention
- Pass Execution Passed dummy Test for setup debugging purposes
diff --git a/csit/tests/sdnr/healthcheck/30_pipeCleanerPNFReg.robot b/csit/tests/sdnr/healthcheck/30_pipeCleanerPNFReg.robot
new file mode 100644
index 00000000..0024fb4e
--- /dev/null
+++ b/csit/tests/sdnr/healthcheck/30_pipeCleanerPNFReg.robot
@@ -0,0 +1,63 @@
+*** Settings ***
+Documentation In a new deployment of sdnc, ves collector and message router
+... the first pnf registration request fails.
+... Therefore some requets are send to ensure proper working of the use case
+... VES endpoint details test environemnt variable file <environment>.py
+... as dictionary NETWORK_FUNCTIONS = {}, VESCOLLECTOR ={}
+
+
+Library ConnectLibrary
+Library SDNCBaseLibrary
+Library NTSimManagerNG
+Library ConnectApp
+
+
+Suite Setup global suite setup &{GLOBAL_SUITE_SETUP_CONFIG}
+Suite Teardown global suite teardown
+
+
+*** Variables ***
+${DEVICE_TYPE} O_RAN_FH
+${CHECK_CONNECTION_STATUS} Connected
+${SIM_COUNT} 1
+${PNF_REGISTRATION_TIMEOUT} 60s
+${FAULT_DELAY} 5
+${TIME_PERIOD_SEND_NOTIF} 30s
+
+*** Test Cases ***
+Add Network Function O-RAN-FH in connectApp
+ [Tags] healthcheck sim
+ [Documentation] add nf as network element connection and verifies connection status
+
+ ConnectApp.add_network_element_connection_from_dict ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']} check_connection_status=${CHECK_CONNECTION_STATUS}
+
+Send pnf registration request to VES collector
+ [Tags] healthcheck sim
+ [Documentation] set details for VES endpoint details and
+ ... send pnf registration requests
+
+ NTSimManagerNG.set_ves_endpoint_details_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ ... ves-endpoint-ip=${VESCOLLECTOR}[IP]
+ ... ves-endpoint-port=${VESCOLLECTOR}[PORT]
+ ... ves-endpoint-auth-method=${VESCOLLECTOR}[AUTHMETHOD]
+ ... ves-endpoint-username=${VESCOLLECTOR}[USERNAME]
+ ... ves-endpoint-password=${VESCOLLECTOR}[PASSWORD]
+ NTSimManagerNG.set_ves_config_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ ... pnf-registration=${True}
+
+Send VES notifications
+ [Tags] healthcheck sim
+ [Documentation] send some notifications for VES messages
+ NTSimManagerNG.set_ves_config_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} faults-enabled=${True}
+ 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}
+ NTSimManagerNG.set_fault_delay_list_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} delay-period=${0}
+ NTSimManagerNG.set_ves_config_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']} faults-enabled=${False}
+
+Remove mounted devices
+ [Documentation] cleanup all mounted devices
+ [Tags] healthcheck sim
+ NTSimManagerNG.set_ves_config_nf ${NETWORK_FUNCTIONS['${DEVICE_TYPE}']['NAME']}
+ ... pnf-registration=${False}
+ ConnectApp.remove_network_element_connection_filtered validate=${True} node-id=.*