diff options
Diffstat (limited to 'tests/usecases/5G-bulkpm')
5 files changed, 133 insertions, 4 deletions
diff --git a/tests/usecases/5G-bulkpm/BulkpmE2E.robot b/tests/usecases/5G-bulkpm/BulkpmE2E.robot index fcc1cc76..4b85e6ba 100644 --- a/tests/usecases/5G-bulkpm/BulkpmE2E.robot +++ b/tests/usecases/5G-bulkpm/BulkpmE2E.robot @@ -8,7 +8,7 @@ Resource resources/bulkpm_keywords.robot *** Variables *** -${VESC_URL} http://%{VESC_IP}:8080 +${VESC_URL} http://%{VESC_IP}:%{VESC_PORT} ${GLOBAL_APPLICATION_ID} robot-ves ${VES_ANY_EVENT_PATH} /eventListener/v7 ${HEADER_STRING} content-type=application/json @@ -17,9 +17,13 @@ ${EVENT_DATA_FILE} %{WORKSPACE}/tests/usecases/5G-bulkpm/a ${TARGETURL_TOPICS} http://${DMAAP_MR_IP}:3904/topics ${TARGETURL_SUBSCR} http://${DMAAP_MR_IP}:3904/events/unauthenticated.VES_NOTIFICATION_OUTPUT/OpenDcae-c12/C12?timeout=1000 ${CLI_EXEC_CLI} curl -k https://${DR_PROV_IP}:8443/internal/prov -${CLI_EXEC_CLI_DFC} docker exec dfc /bin/sh -c "ls /target | grep .gz" ${CLI_EXEC_CLI_FILECONSUMER} docker exec fileconsumer-node /bin/sh -c "ls /opt/app/subscriber/delivery | grep .gz" +${CLI_EXEC_CLI_FILECONSUMER_CP} docker cp fileconsumer-node:/opt/app/subscriber/delivery/xNF.pm.xml.gz.M %{WORKSPACE} +${CLI_EXEC_RENAME_METADATA} mv %{WORKSPACE}/xNF.pm.xml.gz.M %{WORKSPACE}/metadata.json +${metadataSchemaPath} %{WORKSPACE}/tests/usecases/5G-bulkpm/assets/metadata.schema.json +${metadataJsonPath} %{WORKSPACE}/metadata.json + *** Test Cases *** Send VES File Ready Event to VES Collector @@ -55,7 +59,7 @@ Check VES Notification Topic is existing in Message Router Verify Downloaded PM file from xNF exist on Data File Collector [Tags] Bulk_PM_E2E_03 [Documentation] Check the PM XML file exists on the data file collector - ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_DFC} shell=yes + ${cli_cmd_output}= Run Process %{CLI_EXEC_CLI_DFC} shell=yes Log ${cli_cmd_output.stdout} Should Be Equal As Strings ${cli_cmd_output.rc} 0 Should Contain ${cli_cmd_output.stdout} xNF.pm.xml.gz @@ -78,3 +82,15 @@ Verify Fileconsumer Receive PM file from Data Router Log ${cli_cmd_output.stdout} Should Be Equal As Strings ${cli_cmd_output.rc} 0 Should Contain ${cli_cmd_output.stdout} xNF.pm.xml.gz + +Verify File Consumer Receive valid metadata from Data Router + [Tags] Bulk_PM_E2E_06 + [Documentation] Check PM XML file is delivered to the FileConsumer Simulator with valid metadata + ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_FILECONSUMER} shell=yes + Log ${cli_cmd_output.stdout} + Should Be Equal As Strings ${cli_cmd_output.rc} 0 + Should Contain ${cli_cmd_output.stdout} xNF.pm.xml.gz.M + ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_FILECONSUMER_CP} shell=yes + ${cli_cmd_output}= Run Process ${CLI_EXEC_RENAME_METADATA} shell=yes + ${validation_result}= Validate ${metadataSchemaPath} ${metadataJsonPath} + Should Be Equal As Strings ${validation_result} 0 diff --git a/tests/usecases/5G-bulkpm/assets/json_events/FileExistNotification.json b/tests/usecases/5G-bulkpm/assets/json_events/FileExistNotification.json index 4064ea31..d5d8fd05 100644 --- a/tests/usecases/5G-bulkpm/assets/json_events/FileExistNotification.json +++ b/tests/usecases/5G-bulkpm/assets/json_events/FileExistNotification.json @@ -21,7 +21,7 @@ "arrayOfNamedHashMap": [ { "name": "xNF.pm.xml.gz", "hashMap":{ - "location": "sftp://admin:admin@sftpserver:22/xNF.pm.xml.gz", + "location": "sftp://admin:admin@sftpserver:sftpport/xNF.pm.xml.gz", "compression": "gzip", "fileFormatType": "org.3GPP.32.435#measCollec", "fileFormatVersion": "V10" diff --git a/tests/usecases/5G-bulkpm/assets/metadata.schema.json b/tests/usecases/5G-bulkpm/assets/metadata.schema.json new file mode 100644 index 00000000..a41b3544 --- /dev/null +++ b/tests/usecases/5G-bulkpm/assets/metadata.schema.json @@ -0,0 +1,74 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "metadata.schema.json", + "title": "DataRouter PM File Metadata", + "description": "Metadata for 3GPP PM files that are placed on the DMaaP Data Router by the Data File Collector (VES 7.1)", + "type": "object", + + "properties": { + "productName": { + "description": "from the FileReady event eventName", + "type": "string" + }, + + "vendorName": { + "description": "from the FileReady event eventName", + "type": "string" + }, + + "lastEpochMicrosec": { + "description": "the latest unix epoch time associated with the FileReady event", + "type": "string" + }, + + "sourceName": { + "description": "the name of the entity experiencing the event", + "type": "string" + }, + + "startEpochMicrosec": { + "description": "the earliest unix epoch time associated with the FileReady event", + "type": "string" + }, + + "timeZoneOffset": { + "description": "the timezone offset from UTC", + "type": "string", + "pattern": "^(?:(?:[a-zA-Z]{3})[+-](?:[01][0-9]|2[0-3]).[0-5][0-9])$" + }, + + "location": { + "description": "follows the format <protocol>://<ip address>:<port>/<path>/<filename>, the IP address is the node ip address, the port of the protocol server", + "type": "string" + }, + + "compression": { + "description": "specifies if the file is compressed", + "type": "string", + "enum": [ "gzip" ] + }, + + "fileFormatType": { + "description": "the file format", + "type": "string" + }, + + "fileFormatVersion": { + "description": "the version of the file format", + "type": "string" + } + }, + + "required": [ + "productName", + "vendorName", + "lastEpochMicrosec", + "sourceName", + "startEpochMicrosec", + "timeZoneOffset", + "location", + "compression", + "fileFormatType", + "fileFormatVersion" + ] +} diff --git a/tests/usecases/5G-bulkpm/resources/JsonValidatorLibrary.py b/tests/usecases/5G-bulkpm/resources/JsonValidatorLibrary.py new file mode 100644 index 00000000..12d5d856 --- /dev/null +++ b/tests/usecases/5G-bulkpm/resources/JsonValidatorLibrary.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import sys +import logging +from simplejson import load +from jsonschema import validate, ValidationError, SchemaError + + +class JsonValidatorLibrary(object): + + def __init__(self): + pass + + def validate(self, schemaPath, jsonPath): + logging.info("Schema path: " + schemaPath) + logging.info("JSON path: " + jsonPath) + schema = None + data = None + try: + schema = load(open(schemaPath, 'r')) + data = load(open(jsonPath, 'r')) + except (IOError, ValueError, OSError) as e: + logging.error(e.message) + return 1 + + try: + validate(data, schema) + except (ValidationError, SchemaError) as e: + logging.error(e.message) + return 1 + + # logger.log("JSON validation successful") + print("JSON validation successful") + return 0 + +if __name__ == '__main__': + lib = JsonValidatorLibrary() + # sys.exit(JsonValidatorLibrary().validate(sys.argv[1], sys.argv[2])) diff --git a/tests/usecases/5G-bulkpm/resources/bulkpm_keywords.robot b/tests/usecases/5G-bulkpm/resources/bulkpm_keywords.robot index 6859ea0d..9ef56c83 100644 --- a/tests/usecases/5G-bulkpm/resources/bulkpm_keywords.robot +++ b/tests/usecases/5G-bulkpm/resources/bulkpm_keywords.robot @@ -2,6 +2,7 @@ Documentation The main interface for interacting with VES. It handles low level stuff like managing the http request library and VES required fields Library RequestsLibrary Library ../resources/xNFLibrary.py +Library ../resources/JsonValidatorLibrary.py Library OperatingSystem Library Collections Library requests |