summaryrefslogtreecommitdiffstats
path: root/tests/usecases-5G-bulkpm/5G-bulkpm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/usecases-5G-bulkpm/5G-bulkpm')
-rw-r--r--tests/usecases-5G-bulkpm/5G-bulkpm/BulkpmE2E.robot125
-rw-r--r--tests/usecases-5G-bulkpm/5G-bulkpm/__init__.robot2
-rw-r--r--tests/usecases-5G-bulkpm/5G-bulkpm/assets/json_events/FileExistNotification.json33
-rw-r--r--tests/usecases-5G-bulkpm/5G-bulkpm/assets/metadata.schema.json74
-rw-r--r--tests/usecases-5G-bulkpm/5G-bulkpm/resources/JsonValidatorLibrary.py40
-rw-r--r--tests/usecases-5G-bulkpm/5G-bulkpm/resources/bulkpm_keywords.robot39
-rw-r--r--tests/usecases-5G-bulkpm/5G-bulkpm/resources/xNFLibrary.py30
7 files changed, 343 insertions, 0 deletions
diff --git a/tests/usecases-5G-bulkpm/5G-bulkpm/BulkpmE2E.robot b/tests/usecases-5G-bulkpm/5G-bulkpm/BulkpmE2E.robot
new file mode 100644
index 00000000..fe3b1cec
--- /dev/null
+++ b/tests/usecases-5G-bulkpm/5G-bulkpm/BulkpmE2E.robot
@@ -0,0 +1,125 @@
+*** Settings ***
+Documentation Testing E2E VES,Dmaap,DFC,DR with File Ready event feed from xNF
+Library RequestsLibrary
+Library OperatingSystem
+Library Collections
+Library Process
+Resource resources/bulkpm_keywords.robot
+Library resources/JsonValidatorLibrary.py
+Library resources/xNFLibrary.py
+
+
+*** Variables ***
+${VESC_URL} http://%{VESC_IP}:%{VESC_PORT}
+${GLOBAL_APPLICATION_ID} robot-ves
+${VES_ANY_EVENT_PATH} /eventListener/v7
+${HEADER_STRING} content-type=application/json
+${EVENT_DATA_FILE} %{WORKSPACE}/tests/usecases-5G-bulkpm/5G-bulkpm/assets/json_events/FileExistNotification.json
+
+${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_FILECONSUMER} docker exec fileconsumer-node /bin/sh -c "ls /opt/app/subscriber/delivery | grep .xml"
+${CLI_EXEC_CLI_DFC_LOG} docker exec dcaegen2-datafile-collector /bin/sh -c "cat /var/log/ONAP/application.log" > %{WORKSPACE}/archives/dfc_docker.log
+${CLI_EXEC_CLI_DFC_LOG_GREP} grep "Datafile file published" %{WORKSPACE}/archives/dfc_docker.log
+${CLI_EXEC_CLI_FILECONSUMER_CP} docker cp fileconsumer-node:/opt/app/subscriber/delivery/A20181002.0000-1000-0015-1000_5G.xml.M %{WORKSPACE}
+${CLI_EXEC_RENAME_METADATA} mv %{WORKSPACE}/A20181002.0000-1000-0015-1000_5G.xml.M %{WORKSPACE}/archives/metadata.json
+${CLI_EXEC_CLI_PMMAPPER_LOG} docker exec dcaegen2-pm-mapper /bin/sh -c "cat /var/log/ONAP/dcaegen2/services/pm-mapper/pm-mapper_output.log" > %{WORKSPACE}/archives/pmmapper_docker.log
+${CLI_EXEC_CLI_PMMAPPER_LOG_GREP} grep "XML validation successful Event" %{WORKSPACE}/archives/pmmapper_docker.log
+${CLI_EXEC_CLI_PMMAPPER_LOG_GREP_VES} grep "Successfully published VES events to messagerouter" %{WORKSPACE}/archives/pmmapper_docker.log
+${metadataSchemaPath} %{WORKSPACE}/tests/usecases-5G-bulkpm/5G-bulkpm/assets/metadata.schema.json
+${metadataJsonPath} %{WORKSPACE}/archives/metadata.json
+
+*** Test Cases ***
+
+Send VES File Ready Event to VES Collector
+ [Tags] Bulk_PM_E2E_01
+ [Documentation] Send VES File Ready Event
+ ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE}
+ ${headers}= Create Header From String ${HEADER_STRING}
+ ${resp}= Publish Event To VES Collector ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
+ Sleep 15s
+ ${resp}= Publish Event To VES Collector ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
+ Sleep 5s
+ ${resp}= Publish Event To VES Collector ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
+ Sleep 5s
+ ${resp}= Publish Event To VES Collector ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
+ Sleep 5s
+ Log Receive HTTP Status code ${resp.status_code}
+ Should Be Equal As Strings ${resp.status_code} 202
+
+Check VES Notification Topic is existing in Message Router
+ [Tags] Bulk_PM_E2E_02
+ [Documentation] Get the VES Notification topic on message router
+ [Timeout] 1 minute
+ Sleep 10s
+ ${resp}= GetCall ${TARGETURL_TOPICS}
+ log ${TARGETURL_TOPICS}
+ log 'JSON Response Code :'${resp}
+ ${topics}= Evaluate $resp.json().get('topics')
+ log ${topics}
+ ${ListLength}= Get Length ${topics}
+ log ${ListLength}
+ List Should Contain Value ${topics} unauthenticated.VES_NOTIFICATION_OUTPUT
+
+Verify Data File Collector successfully publishes the PM XML file to the Data Router
+ [Tags] Bulk_PM_E2E_03
+ [Documentation] Check that DFC publishes the PM XML to the Data Router
+ ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_DFC_LOG} shell=yes
+ Log ${cli_cmd_output.stdout}
+ Should Be Equal As Strings ${cli_cmd_output.rc} 0
+ ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_DFC_LOG_GREP} shell=yes
+ Log ${cli_cmd_output.stdout}
+ Should Be Equal As Strings ${cli_cmd_output.rc} 0
+ Should Contain ${cli_cmd_output.stdout} Datafile file published
+
+
+Verify Default Feed And File Consumer Subscription On Datarouter
+ [Tags] Bulk_PM_E2E_04
+ [Documentation] Verify Default Feed And File Consumer Subscription On Datarouter
+ ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI} shell=yes
+ Log ${cli_cmd_output.stdout}
+ Should Be Equal As Strings ${cli_cmd_output.rc} 0
+ Should Contain ${cli_cmd_output.stdout} https://dmaap-dr-prov/publish/1
+ Should Contain ${cli_cmd_output.stdout} http://datarouter-subscriber:7070
+
+
+Verify Fileconsumer Receive PM file from Data Router
+ [Tags] Bulk_PM_E2E_05
+ [Documentation] Check PM XML file exists on the File Consumer Simulator
+ ${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} A20181002.0000-1000-0015-1000_5G.xml
+
+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} A20181002.0000-1000-0015-1000_5G.xml.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
+
+Verify PM-Mapper successfully receives uncompressed the PM XML file
+ [Tags] Bulk_PM_E2E_07
+ [Documentation] Check that PM-Mapper receives the uncompressed PM XML file
+ ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_PMMAPPER_LOG} shell=yes
+ Log ${cli_cmd_output.stdout}
+ Should Be Equal As Strings ${cli_cmd_output.rc} 0
+ ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_PMMAPPER_LOG_GREP} shell=yes
+ Log ${cli_cmd_output.stdout}
+ Should Be Equal As Strings ${cli_cmd_output.rc} 0
+ Should Contain ${cli_cmd_output.stdout} XML validation successful Event
+
+Verify PM-Mapper successfully publishes VES event the Message Router
+ [Tags] Bulk_PM_E2E_08
+ [Documentation] Check that PM-Mapper publishes VES onto the Message Router
+ ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_PMMAPPER_LOG} shell=yes
+ Log ${cli_cmd_output.stdout}
+ Should Be Equal As Strings ${cli_cmd_output.rc} 0
+ ${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_PMMAPPER_LOG_GREP_VES} shell=yes
+ Should Contain ${cli_cmd_output.stdout} Successfully published VES events to messagerouter \ No newline at end of file
diff --git a/tests/usecases-5G-bulkpm/5G-bulkpm/__init__.robot b/tests/usecases-5G-bulkpm/5G-bulkpm/__init__.robot
new file mode 100644
index 00000000..7114fd44
--- /dev/null
+++ b/tests/usecases-5G-bulkpm/5G-bulkpm/__init__.robot
@@ -0,0 +1,2 @@
+*** Settings ***
+Documentation 5G Bulk PM E2E Testcases
diff --git a/tests/usecases-5G-bulkpm/5G-bulkpm/assets/json_events/FileExistNotification.json b/tests/usecases-5G-bulkpm/5G-bulkpm/assets/json_events/FileExistNotification.json
new file mode 100644
index 00000000..02f092df
--- /dev/null
+++ b/tests/usecases-5G-bulkpm/5G-bulkpm/assets/json_events/FileExistNotification.json
@@ -0,0 +1,33 @@
+{
+ "event": {
+ "commonEventHeader": {
+ "version": "4.0.1",
+ "vesEventListenerVersion": "7.0.1",
+ "domain": "notification",
+ "eventName": "Noti_RnNode-Ericsson_FileReady",
+ "eventId": "FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1",
+ "lastEpochMicrosec": 8745745764578,
+ "priority": "Normal",
+ "reportingEntityName": "otenb5309",
+ "sequence": 0,
+ "sourceName": "oteNB5309",
+ "startEpochMicrosec": 8745745764578,
+ "timeZoneOffset": "UTC+05.30"
+ },
+ "notificationFields": {
+ "changeIdentifier": "PM_MEAS_FILES",
+ "changeType": "FileReady",
+ "notificationFieldsVersion": "2.0",
+ "arrayOfNamedHashMap": [
+ { "name": "A20181002.0000-1000-0015-1000_5G.xml.gz",
+ "hashMap":{
+ "location": "sftp://admin:admin@sftp:22/A20181002.0000-1000-0015-1000_5G.xml.gz",
+ "compression": "gzip",
+ "fileFormatType": "org.3GPP.32.435#measCollec",
+ "fileFormatVersion": "V10"
+ }
+ }
+ ]
+ }
+}
+} \ No newline at end of file
diff --git a/tests/usecases-5G-bulkpm/5G-bulkpm/assets/metadata.schema.json b/tests/usecases-5G-bulkpm/5G-bulkpm/assets/metadata.schema.json
new file mode 100644
index 00000000..a41b3544
--- /dev/null
+++ b/tests/usecases-5G-bulkpm/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/5G-bulkpm/resources/JsonValidatorLibrary.py b/tests/usecases-5G-bulkpm/5G-bulkpm/resources/JsonValidatorLibrary.py
new file mode 100644
index 00000000..ed376ff2
--- /dev/null
+++ b/tests/usecases-5G-bulkpm/5G-bulkpm/resources/JsonValidatorLibrary.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+
+import logging
+
+from jsonschema import validate, ValidationError, SchemaError
+from simplejson import load
+
+
+class JsonValidatorLibrary(object):
+
+ def __init__(self):
+ pass
+
+ @staticmethod
+ def validate(schema_path, json_path):
+ logging.info("Schema path: " + schema_path)
+ logging.info("JSON path: " + json_path)
+ schema = None
+ data = None
+ try:
+ schema = load(open(schema_path, 'r'))
+ data = load(open(json_path, '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/5G-bulkpm/resources/bulkpm_keywords.robot b/tests/usecases-5G-bulkpm/5G-bulkpm/resources/bulkpm_keywords.robot
new file mode 100644
index 00000000..9ef56c83
--- /dev/null
+++ b/tests/usecases-5G-bulkpm/5G-bulkpm/resources/bulkpm_keywords.robot
@@ -0,0 +1,39 @@
+ *** Settings ***
+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
+Library Collections
+Library String
+
+*** Variables ***
+
+*** Keywords ***
+
+Get Event Data From File
+ [Arguments] ${jsonfile}
+ ${data}= OperatingSystem.Get File ${jsonfile}
+ #Should Not Be_Equal ${data} None
+ [return] ${data}
+
+Publish Event To VES Collector
+ [Documentation] Send an event to VES Collector
+ [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata}
+ Log Creating session ${url}
+ ${session}= Create Session dcaegen2-d1 ${url}
+ ${resp}= Post Request dcaegen2-d1 ${evtpath} data=${evtdata} headers=${httpheaders}
+ #Log Received response from dcae ${resp.json()}
+ [return] ${resp}
+PostCall
+ [Arguments] ${url} ${data}
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
+ ${resp}= Evaluate requests.post('${url}',data='${data}', headers=${headers},verify=False) requests
+ [Return] ${resp}
+
+GetCall
+ [Arguments] ${url}
+ ${resp}= Evaluate requests.get('${url}') requests
+ [Return] ${resp}
diff --git a/tests/usecases-5G-bulkpm/5G-bulkpm/resources/xNFLibrary.py b/tests/usecases-5G-bulkpm/5G-bulkpm/resources/xNFLibrary.py
new file mode 100644
index 00000000..b70d8095
--- /dev/null
+++ b/tests/usecases-5G-bulkpm/5G-bulkpm/resources/xNFLibrary.py
@@ -0,0 +1,30 @@
+'''
+Created on Aug 18, 2017
+
+@author: sw6830
+'''
+import time
+import uuid
+
+from robot.api import logger
+
+
+class xNFLibrary(object):
+
+ def __init__(self):
+ pass
+
+ @staticmethod
+ def create_header_from_string(dict_str):
+ logger.info("Enter create_header_from_string: dictStr")
+ return dict(u.split("=") for u in dict_str.split(","))
+
+ @staticmethod
+ def Generate_UUID(self):
+ """generate a uuid"""
+ return uuid.uuid4()
+
+
+if __name__ == '__main__':
+ lib = xNFLibrary()
+ time.sleep(100000)