summaryrefslogtreecommitdiffstats
path: root/csit/tests/sdnr
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 /csit/tests/sdnr
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
Diffstat (limited to 'csit/tests/sdnr')
-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
29 files changed, 1251 insertions, 10 deletions
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=.*