Add Bulk PM "Data Plane" Usecase Testcase Robot Automation

Change-Id: If7ec8c953f0ad61c427d6533f235b3cf61b9fffc
Issue-ID: INT-1375
Signed-off-by: rajendrajaiswal <rajendra.jaiswal@ericsson.com>
diff --git a/robot/testsuites/usecases/5gbulkpm.robot b/robot/testsuites/usecases/5gbulkpm.robot
new file mode 100644
index 0000000..9b9c8c4
--- /dev/null
+++ b/robot/testsuites/usecases/5gbulkpm.robot
@@ -0,0 +1,145 @@
+*** Settings ***
+Documentation     5G Bulk PM Usecase functionality
+
+Library           RequestsLibrary
+Library           OperatingSystem
+Library           Collections
+Library           String
+Library           DateTime
+Library           SSHLibrary
+Library           JSONLibrary
+Library           Process
+Library           ONAPLibrary.JSON
+Library           ONAPLibrary.Utilities
+Resource          ../resources/usecases/5gbulkpm_interface.robot
+Resource          ../resources/mr_interface.robot
+Resource          ../resources/dr_interface.robot
+Suite Teardown    Usecase Teardown
+
+*** Variables ***
+${INVENTORY_ENDPOINT}               /dcae-service-types
+${DFC_BLUEPRINT_PATH}               ${EXECDIR}/robot/assets/usecases/5gbulkpm//k8s-datafile.yaml
+${PMMAPPER_BLUEPRINT_PATH}          ${EXECDIR}/robot/assets/usecases/5gbulkpm//k8s-pm-mapper.yaml
+${XNF_SFTP_BLUEPRINT_PATH}          ${EXECDIR}/robot/assets/usecases/5gbulkpm/k8s-sftp.yaml
+${BLUEPRINT_TEMPLATE_PATH}          ${EXECDIR}/robot/assets/usecases/5gbulkpm/blueprintTemplate.json
+${FTP_FILE_PATH}                    ${EXECDIR}/robot/assets/usecases/5gbulkpm/pmfiles/A20181002.0000-1000-0015-1000_5G.xml.gz
+${DEPLOYMENT_ENDPOINT}              dcae-deployments
+${MR_TOPIC_CHECK_PATH}              /topics
+${DR_SUB_CHECK_PATH}                /internal/prov
+${MR_TOPIC_URL_PATH}                /events/org.onap.dmaap.mr.PERFORMANCE_MEASUREMENTS/CG1/C1
+${DMAAP_BC_MR_CLIENT_PATH}          /webapi/mr_clients
+${DMAAP_BC_MR_CLUSTER_PATH}         /webapi/mr_clusters
+${PMMAPPER_HEALTH_CHECK_PATH}       /healthcheck
+${JSON_DATA_FILE}                   ${EXECDIR}/robot/assets/usecases/5gbulkpm/Notification.json
+${VES_LISTENER_PATH}                /eventListener/v7
+${PMMAPPER_SUB_ROLE_DATA}           ${EXECDIR}/robot/assets/usecases/5gbulkpm/sub.json
+${PMMAPPER_MR_CLUSTER_DATA}         ${EXECDIR}/robot/assets/usecases/5gbulkpm/mr_clusters.json
+
+*** Test Cases ***
+
+Deploying Data File Collector
+    [Tags]                              5gbulkpm
+    ${blueprint}=                       OperatingSystem.Get File           ${DFC_BLUEPRINT_PATH}
+    ${templatejson}=                    Load JSON From File                ${BLUEPRINT_TEMPLATE_PATH}
+    ${templatejson}=                    Update Value To Json               ${templatejson}                            blueprintTemplate             ${blueprint}
+    ${templatejson}=                    Update Value To Json               ${templatejson}                            typeName                      datafile
+    ${json_data}                        Convert JSON To String             ${templatejson}
+    ${headers}=                         Create Dictionary                  content-type=application/json
+    ${session}=                         Create Session                     dfc                 ${INVENTORY_SERVER}
+    ${resp}=                            Post Request                       dfc                 ${INVENTORY_ENDPOINT}          data=${json_data}             headers=${headers}
+    ${serviceTypeId-Dfc}                Set Variable                       ${resp.json().get('typeId')}
+    Set Global Variable                 ${serviceTypeId-Dfc}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Dfc}"}
+    ${session}=                         Create Session                     deployment-dfc                 ${DEPLOYMENT_SERVER}
+    ${resp}=                            Put Request                        deployment-dfc                 /${DEPLOYMENT_ENDPOINT}/datafile         data=${deployment_data}     headers=${headers}
+    ${operationLink}                    Set Variable                       ${resp.json().get('links').get('status')}
+    ${operationId}                      Fetch From Right                   ${operationLink}                /
+    Wait Until Keyword Succeeds         3 minute                           20 sec            Deployment Status       ${DEPLOYMENT_SERVER}     ${DEPLOYMENT_ENDPOINT}     datafile     ${operationId}
+
+Deploying 3GPP PM Mapper
+    [Tags]                              5gbulkpm
+    ${clusterdata}=                     OperatingSystem.Get File           ${PMMAPPER_MR_CLUSTER_DATA}
+    ${headers}=                         Create Dictionary                  content-type=application/json
+    ${session}=                         Create Session                     dmaapbc                 ${DMAAP_BC_SERVER}
+    ${resp}=                            Post Request                       dmaapbc                 ${DMAAP_BC_MR_CLUSTER_PATH}          data=${clusterdata}   headers=${headers}
+    ${blueprint}=                       OperatingSystem.Get File           ${PMMAPPER_BLUEPRINT_PATH}
+    ${templatejson}=                    Load JSON From File                ${BLUEPRINT_TEMPLATE_PATH}
+    ${templatejson}=                    Update Value To Json               ${templatejson}                            blueprintTemplate             ${blueprint}
+    ${templatejson}=                    Update Value To Json               ${templatejson}                            typeName                      pmmapper
+    ${json_data}                        Convert JSON To String             ${templatejson}
+    ${session}=                         Create Session                     pmmapper                 ${INVENTORY_SERVER}
+    ${resp}=                            Post Request                       pmmapper                 ${INVENTORY_ENDPOINT}          data=${json_data}             headers=${headers}
+    ${serviceTypeId-Pmmapper}           Set Variable                       ${resp.json().get('typeId')}
+    Set Global Variable                 ${serviceTypeId-Pmmapper}
+    ${deployment_data}=                 Set Variable                       {"inputs":{"client_password": "${GLOBAL_DCAE_PASSWORD}"},"serviceTypeId": "${serviceTypeId-Pmmapper}"}
+    ${session}=                         Create Session                     deployment-pmmapper                 ${DEPLOYMENT_SERVER}
+    ${resp}=                            Put Request                        deployment-pmmapper                 /${DEPLOYMENT_ENDPOINT}/pmmapper         data=${deployment_data}     headers=${headers}
+    ${operationLink}                    Set Variable                       ${resp.json().get('links').get('status')}
+    ${operationId}                      Fetch From Right                   ${operationLink}                /
+    Wait Until Keyword Succeeds         2 minute                           10 sec            Deployment Status       ${DEPLOYMENT_SERVER}     ${DEPLOYMENT_ENDPOINT}     pmmapper     ${operationId}
+
+Deploying SFTP Server As xNF
+    [Tags]                              5gbulkpm
+    ${blueprint}=                       OperatingSystem.Get File           ${XNF_SFTP_BLUEPRINT_PATH}
+    ${templatejson}=                    Load JSON From File                ${BLUEPRINT_TEMPLATE_PATH}
+    ${templatejson}=                    Update Value To Json               ${templatejson}                            blueprintTemplate             ${blueprint}
+    ${templatejson}=                    Update Value To Json               ${templatejson}                            typeName                      sftpserver
+    ${json_data}                        Convert JSON To String             ${templatejson}
+    ${headers}=                         Create Dictionary                  content-type=application/json
+    ${session}=                         Create Session                     sftp                 ${INVENTORY_SERVER}
+    ${resp}=                            Post Request                       sftp                 ${INVENTORY_ENDPOINT}          data=${json_data}             headers=${headers}
+    ${serviceTypeId-Sftp}=              Set Variable                       ${resp.json().get('typeId')}
+    Set Global Variable                 ${serviceTypeId-Sftp}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Sftp}"}
+    ${session}=                         Create Session                     deployment-sftpserver                 ${DEPLOYMENT_SERVER}
+    ${resp}=                            Put Request                        deployment-sftpserver                 /${DEPLOYMENT_ENDPOINT}/sftpserver         data=${deployment_data}     headers=${headers}
+    ${operationLink}=                   Set Variable                       ${resp.json().get('links').get('status')}
+    ${operationId}                      Fetch From Right                   ${operationLink}                /
+    Wait Until Keyword Succeeds         1 minute                           5 sec            Deployment Status       ${DEPLOYMENT_SERVER}     ${DEPLOYMENT_ENDPOINT}     sftpserver     ${operationId}
+
+
+Checking PERFORMANCE_MEASUREMENTS Topic In Message Router
+    [Tags]                              5gbulkpm
+    ${headers}=                         Create Dictionary                  content-type=application/json
+    ${subdata}=                         OperatingSystem.Get File           ${PMMAPPER_SUB_ROLE_DATA}
+    ${session}=                         Create Session                     dmaapbc                 ${DMAAP_BC_SERVER}
+    ${resp}=                            Post Request                       dmaapbc                 ${DMAAP_BC_MR_CLIENT_PATH}          data=${subdata}   headers=${headers}
+    ${resp}=                            Run MR Get Request                 ${MR_TOPIC_CHECK_PATH}
+    Should Be Equal As Strings          ${resp.status_code}                200
+    ${topics}=                          Set Variable                       ${resp.json().get('topics')}
+    List Should Contain Value           ${topics}                          org.onap.dmaap.mr.PERFORMANCE_MEASUREMENTS
+    ${resp}=                            Run MR Auth Get Request            ${MR_TOPIC_URL_PATH}     ${GLOBAL_DCAE_USERNAME}      ${GLOBAL_DCAE_PASSWORD}
+    Should Be Equal As Strings          ${resp.status_code}                200
+
+Upload PM Files to xNF SFTP Server
+    [Tags]                              5gbulkpm
+    Open Connection                     sftpserver
+    Login                               bulkpm                             bulkpm
+    ${epoch}=                           Get Current Date                   result_format=epoch
+    Set Global Variable                 ${epoch}
+    Put File                            ${FTP_FILE_PATH}                   upload/A${epoch}.xml.gz
+
+DR Bulk PM Feed Check
+    [Tags]                              5gbulkpm
+    ${resp}=                            Run DR Get Request                  ${DR_SUB_CHECK_PATH}
+    Should Contain                      ${resp.text}                        bulk_pm_feed
+
+DR PM Mapper Subscriber Check
+    [Tags]                              5gbulkpm
+    ${resp}=                            Run DR Get Request                  ${DR_SUB_CHECK_PATH}
+    Should Contain                      ${resp.text}                        https://dcae-pm-mapper:8443/delivery
+
+Sending File Ready Event to VES Collector
+    [Tags]                              5gbulkpm
+    ${headers}=                         Create Dictionary                   content-type=application/json
+    ${fileready}=                       OperatingSystem.Get File            ${JSON_DATA_FILE}
+    ${session}=                         Create Session                      ves                         ${VES_HEALTH_CHECK_PATH}
+    ${resp}=                            Post Request                        ves                         ${VES_LISTENER_PATH}          data=${fileready}   headers=${headers}
+    Should Be Equal As Strings          ${resp.status_code}                 202
+    ${VES_FILE_READY_NOTIFICATION}      Set Variable                        {"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":"A${epoch}.xml.gz","hashMap":{"location":"sftp://bulkpm:bulkpm@sftpserver:22/upload/A${epoch}.xml.gz","compression":"gzip","fileFormatType":"org.3GPP.32.435#measCollec","fileFormatVersion":"V10"}}]}}}
+    ${resp}=                            Post Request                        ves                         ${VES_LISTENER_PATH}          data=${VES_FILE_READY_NOTIFICATION}   headers=${headers}
+    Should Be Equal As Strings          ${resp.status_code}                 202
+
+Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
+    [Tags]                              5gbulkpm
+    Wait Until Keyword Succeeds         1 minute                            5 sec            xNF PM File Validate      perf3gpp_RnNode-Ericsson_pmMeasResult