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