[SNDC-CSIT] Add tests for device manager 71/122771/10
authordemskeq8 <alexander.dehn@highstreet-technologies.com>
Wed, 21 Jul 2021 07:37:41 +0000 (09:37 +0200)
committerdemskeq8 <alexander.dehn@highstreet-technologies.com>
Fri, 27 Aug 2021 07:58:25 +0000 (09:58 +0200)
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

33 files changed:
csit/plans/sdnr/setup.sh
csit/plans/sdnr/testdata/localhost.py
csit/plans/sdnr/testdata/nts-networkfunctions.csv
csit/scripts/sdnr/docker-compose/.env
csit/tests/sdnr/functional/devicemanager/_templates/10_lifecycleNetconfSsh/devicemanagerlifecycle_netconf.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/_templates/20_pnfRegistration/pnfRegistration.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/_templates/21_alarmNotificationVES/alarmNotificationVes.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/_templates/22_alarmNotificationNETCONF/alarmNotificationNetconf.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/_templates/90_resetSimulatedDevices/90_resetSimulatedDevices.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/_templates/__init__.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/o-ran-basic/20_pnfRegistration [new symlink]
csit/tests/sdnr/functional/devicemanager/o-ran-basic/21_alarmNotificationVES [new symlink]
csit/tests/sdnr/functional/devicemanager/o-ran-basic/90_resetSimulatedDevices [new symlink]
csit/tests/sdnr/functional/devicemanager/o-ran-basic/__init__.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/o-ran-basic/yangCapabilities.txt [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/onfcore12-basic/10_lifecycleNetconfSsh [new symlink]
csit/tests/sdnr/functional/devicemanager/onfcore12-basic/22_alarmNotificationNETCONF [new symlink]
csit/tests/sdnr/functional/devicemanager/onfcore12-basic/90_resetSimulatedDevices [new symlink]
csit/tests/sdnr/functional/devicemanager/onfcore12-basic/__init__.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/onfcore12-basic/yangCapabilities.txt [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/onfcore14-basic/10_lifecycleNetconfSsh [new symlink]
csit/tests/sdnr/functional/devicemanager/onfcore14-basic/22_alarmNotificationNETCONF [new symlink]
csit/tests/sdnr/functional/devicemanager/onfcore14-basic/90_resetSimulatedDevices [new symlink]
csit/tests/sdnr/functional/devicemanager/onfcore14-basic/__init__.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/onfcore14-basic/yangCapabilities.txt [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/openroadm-basic/10_lifecycleNetconfSsh [new symlink]
csit/tests/sdnr/functional/devicemanager/openroadm-basic/22_alarmNotificationNETCONF [new symlink]
csit/tests/sdnr/functional/devicemanager/openroadm-basic/90_resetSimulatedDevices [new symlink]
csit/tests/sdnr/functional/devicemanager/openroadm-basic/__init__.robot [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/openroadm-basic/yangCapabilities.txt [new file with mode: 0644]
csit/tests/sdnr/functional/devicemanager/readme.md [new file with mode: 0644]
csit/tests/sdnr/functional/dummy.robot [deleted file]
csit/tests/sdnr/healthcheck/30_pipeCleanerPNFReg.robot [new file with mode: 0644]

index e2942b3..a447cf5 100755 (executable)
@@ -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"
 
index 0de4bac..ed49824 100644 (file)
@@ -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"}
index 3a9219a..c2ccb2d 100644 (file)
@@ -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
+
index 5303946..c550932 100644 (file)
@@ -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 (file)
index 0000000..084c155
--- /dev/null
@@ -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 (file)
index 0000000..3fadf22
--- /dev/null
@@ -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 (file)
index 0000000..068a6b8
--- /dev/null
@@ -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 (file)
index 0000000..df023c4
--- /dev/null
@@ -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 (file)
index 0000000..e9db740
--- /dev/null
@@ -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 (file)
index 0000000..0011fbc
--- /dev/null
@@ -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 (symlink)
index 0000000..2c1e575
--- /dev/null
@@ -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 (symlink)
index 0000000..80f9cca
--- /dev/null
@@ -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 (symlink)
index 0000000..86f3cad
--- /dev/null
@@ -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 (file)
index 0000000..36cbca9
--- /dev/null
@@ -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 (file)
index 0000000..33e7abb
--- /dev/null
@@ -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 (symlink)
index 0000000..639f57e
--- /dev/null
@@ -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 (symlink)
index 0000000..60a2a79
--- /dev/null
@@ -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 (symlink)
index 0000000..d2624a6
--- /dev/null
@@ -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 (file)
index 0000000..2fbbea3
--- /dev/null
@@ -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 (file)
index 0000000..6f82f46
--- /dev/null
@@ -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 (symlink)
index 0000000..8f1d75b
--- /dev/null
@@ -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 (symlink)
index 0000000..8b7b517
--- /dev/null
@@ -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 (symlink)
index 0000000..86f3cad
--- /dev/null
@@ -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 (file)
index 0000000..4def8cd
--- /dev/null
@@ -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 (file)
index 0000000..ddc11cc
--- /dev/null
@@ -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 (symlink)
index 0000000..639f57e
--- /dev/null
@@ -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 (symlink)
index 0000000..60a2a79
--- /dev/null
@@ -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 (symlink)
index 0000000..d2624a6
--- /dev/null
@@ -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 (file)
index 0000000..a335edc
--- /dev/null
@@ -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 (file)
index 0000000..7efb5c0
--- /dev/null
@@ -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 (file)
index 0000000..cd65522
--- /dev/null
@@ -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 (file)
index 1368786..0000000
+++ /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 (file)
index 0000000..0024fb4
--- /dev/null
@@ -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=.*