[ROBOT] ADD BULKPM test cases that use helm based component services

Signed-off-by: Krzysztof Kuzmicki <krzysztof.kuzmicki@nokia.com>
Issue-ID: INT-1895
Change-Id: I32389f4f0cd0d2e9fb7b73b99554a4722c4687d0
diff --git a/robot/resources/usecases/5gbulkpm_helm_interface.robot b/robot/resources/usecases/5gbulkpm_helm_interface.robot
new file mode 100644
index 0000000..6707767
--- /dev/null
+++ b/robot/resources/usecases/5gbulkpm_helm_interface.robot
@@ -0,0 +1,237 @@
+*** Settings ***
+Documentation	  The main interface for interacting with 5G Bulkpm.
+Library 	      RequestsLibrary
+Library           OperatingSystem
+Library           String
+Library           JSONLibrary
+Resource          ../mr_interface.robot
+Resource          ../dr_interface.robot
+Resource          ../consul_interface.robot
+Resource          ../chart_museum.robot
+
+*** Variables ***
+${INVENTORY_SERVER}                                 ${GLOBAL_INVENTORY_SERVER_PROTOCOL}://${GLOBAL_INVENTORY_SERVER_NAME}:${GLOBAL_INVENTORY_SERVER_PORT}
+${DEPLOYMENT_SERVER}                                ${GLOBAL_DEPLOYMENT_HANDLER_SERVER_PROTOCOL}://${GLOBAL_DEPLOYMENT_HANDLER_SERVER_NAME}:${GLOBAL_DEPLOYMENT_HANDLER_SERVER_PORT}
+${DR_ENDPOINT}                                      ${GLOBAL_DMAAP_DR_PROV_SERVER_PROTOCOL}://${GLOBAL_INJECTED_DMAAP_DR_PROV_IP_ADDR}:${GLOBAL_DMAAP_DR_PROV_SERVER_PORT}
+${DMAAP_BC_SERVER}                                  ${GLOBAL_BC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_BC_IP_ADDR}:${GLOBAL_BC_HTTPS_SERVER_PORT}
+${VES_HEALTH_CHECK_PATH}                            ${GLOBAL_DCAE_VES_HTTPS_PROTOCOL}://${GLOBAL_INJECTED_DCAE_VES_HOST}:${GLOBAL_DCAE_VES_HTTPS_SERVER_PORT}
+${MR_PUBLISH_TEMPLATE}                              mr/mr_publish.jinja
+${INVENTORY_ENDPOINT}                               /dcae-service-types
+${XNF_SFTP_BLUEPRINT_PATH}                          ${EXECDIR}/robot/assets/usecases/5gbulkpm/k8s-sftp.yaml
+${XNF_HTTPS_BLUEPRINT_PATH}                          ${EXECDIR}/robot/assets/usecases/5gbulkpm/k8s-https.yaml
+${BLUEPRINT_TEMPLATE_PATH}                          ${EXECDIR}/robot/assets/usecases/5gbulkpm/blueprintTemplate.json
+${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
+${MR_TOPIC_URL_PATH_FOR_POST}                       /events/org.onap.dmaap.mr.PERFORMANCE_MEASUREMENTS
+${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
+${NEXUS3}                                           ${GLOBAL_INJECTED_NEXUS_DOCKER_REPO}
+${SET_KNOWN_HOSTS_FILE_PATH}                        kubectl set env deployment/$(kubectl get deployment -n onap | grep datafile | awk '{print $1}') KNOWN_HOSTS_FILE_PATH=/home/datafile/.ssh/known_hosts -n onap
+${CHECK_ENV_SET}                                    kubectl set env pod/$(kubectl get pod -n onap | grep datafile | awk '{print $1}') --list -n onap
+${COPY_RSA_KEY}                                     kubectl cp /tmp/known_hosts $(kubectl get pod -n onap | grep datafile | awk '{print $1}'):/home/datafile/.ssh/known_hosts -n onap
+${CHECK_DFC_LOGS}                                   kubectl logs $(kubectl get pod -n onap | grep datafile | awk '{print $1}') -n onap --tail=4
+${EXPECTED_PRINT}                                   StrictHostKeyChecking is enabled but environment variable KNOWN_HOSTS_FILE_PATH is not set or points to not existing file
+${MONGO_BLUEPRINT_PATH}                             ${EXECDIR}/robot/assets/cmpv2/k8s-mongo.yaml
+${PNF_SIMULATOR_BLUEPRINT_PATH}                     ${EXECDIR}/robot/assets/cmpv2/k8s-pnf-simulator.yaml
+${MONGO_VES_CLIENT_BLUEPRINT_PATH}                  ${EXECDIR}/robot/assets/cmpv2/k8s-mongo-ves-client.yaml
+${VES_CLIENT_BLUEPRINT_PATH}                        ${EXECDIR}/robot/assets/cmpv2/k8s-ves-client.yaml
+${VES_INPUTS}                                       deployment/VesTlsCmpv2Inputs.jinja
+${pm_notification_event}                            dfc/notification.jinja
+${consul_change_event}                              dfc/consul.jinja
+${ves_client_single_event}=                         ves/pnf_simulator_single_event.jinja
+${SFTP_HELM_CHARTS}                                 ${EXECDIR}/robot/assets/helm/sftp
+${HELM_RELEASE}                                     kubectl --namespace onap get pods | sed 's/ .*//' | grep robot | sed 's/-.*//'
+
+*** Keywords ***
+
+xNF PM File Validate
+    [Documentation]
+    ...  This keyword gathers all events from message router topic and validates if in recived data is present an expected string: "${expected_pm_str}" .
+    [Arguments]                 ${expected_pm_str}
+    ${timestamp}=               Get Time                        epoch
+    ${resp}=                    Run MR Auth Get Request         ${MR_TOPIC_URL_PATH}            ${GLOBAL_DCAE_USERNAME}         ${GLOBAL_DCAE_PASSWORD}
+    Should Contain              ${resp.text}                  ${expected_pm_str}
+
+Topic Validate
+    [Arguments]                         ${value}
+    ${timestamp}=                       Get Current Date
+    ${dict}=                            Create Dictionary                           timestamp=${timestamp}
+    Templating.Create Environment       mr                                          ${GLOBAL_TEMPLATE_FOLDER}
+    ${data}=                            Templating.Apply Template                   mr                                  ${MR_PUBLISH_TEMPLATE}              ${dict}
+    ${resp}=                            Run MR Auth Post Request (User And Pass)    ${MR_TOPIC_URL_PATH_FOR_POST}       ${GLOBAL_DCAE_USERNAME}             ${GLOBAL_DCAE_PASSWORD}       ${data}
+    Should Be Equal As Strings          ${resp.status_code}                         200
+    ${resp}=                            Run MR Auth Get Request                     ${MR_TOPIC_URL_PATH}                ${GLOBAL_DCAE_USERNAME}             ${GLOBAL_DCAE_PASSWORD}
+    Should Contain                      ${resp.text}                                ${value}
+
+Send File Ready Event to VES Collector and Deploy all DCAE Applications
+    [Arguments]                                 ${pm_file}              ${file_format_type}             ${file_format_version}
+    Disable Warnings
+    Setting Global Variables
+    Send File Ready Event to VES Collector      ${pm_file}              ${file_format_type}             ${file_format_version}
+    Add chart repository                        chart-museum                  http://chart-museum:80      onapinitializer      demo123456!
+    Log To Console                              Deploying Data File Collector
+    Deploying Data File Collector
+    Log To Console                              Deploying 3GPP PM Mapper
+    Deploying 3GPP PM Mapper
+    Log To Console                              Deploying SFTP Server As xNF
+    Deploying SFTP Server As xNF
+    Checking PERFORMANCE_MEASUREMENTS Topic In Message Router
+    DR Bulk PM Feed Check
+    DR PM Mapper Subscriber Check
+
+Usecase Teardown
+    Disable Warnings
+    Uninstall helm charts               ${ONAP_HELM_RELEASE}-dfc
+    Uninstall helm charts               ${ONAP_HELM_RELEASE}-pmmapper
+    Uninstall helm charts               ${ONAP_HELM_RELEASE}-sftp
+
+Setting Global Variables
+    ${test_variables} =  Create Dictionary
+    Set To Dictionary  ${test_variables}   FILE_FORMAT_TYPE=org.3GPP.32.435#measCollec
+    ...                                    FILE_FORMAT_VERSION=V10
+    ...                                    PM_FILE_PATH=${EXECDIR}/robot/assets/usecases/5gbulkpm/pmfiles/A20181002.0000-1000-0015-1000_5G.xml.gz
+    ...                                    EXPECTED_PM_STR=perf3gpp_RnNode-Ericsson_pmMeasResult
+    Set Global Variable   ${GLOBAL_TEST_VARIABLES}  ${test_variables}
+    ${command_output} =                 Run And Return Rc And Output        ${HELM_RELEASE}
+    Should Be Equal As Integers         ${command_output[0]}                0
+    Set Global Variable   ${ONAP_HELM_RELEASE}   ${command_output[1]}
+
+Send File Ready Event to VES Collector
+    [Arguments]                         ${pm_file}                          ${file_format_type}             ${file_format_version}
+    Disable Warnings
+    ${headers}=                         Create Dictionary                   content-type=application/json
+    ${fileready}=                       OperatingSystem.Get File            ${JSON_DATA_FILE}
+    ${auth}=                            Create List                         ${GLOBAL_DCAE_VES_USERNAME}     ${GLOBAL_DCAE_VES_PASSWORD}
+    ${session}=                         Create Session                      ves                             ${VES_HEALTH_CHECK_PATH}      auth=${auth}
+    ${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":"${pm_file}","hashMap":{"location":"sftp://bulkpm:bulkpm@${ONAP_HELM_RELEASE}-sftp:22/upload/${pm_file}","compression":"gzip","fileFormatType":"${file_format_type}","fileFormatVersion":"${file_format_version}"}}]}}}
+    ${resp}=                            Post Request                        ves                             ${VES_LISTENER_PATH}          data=${VES_FILE_READY_NOTIFICATION}   headers=${headers}
+    Should Be Equal As Strings          ${resp.status_code}                 202
+
+Upload PM Files to xNF SFTP Server
+    [Arguments]                         ${pm_file_path}
+    Open Connection                     ${ONAP_HELM_RELEASE}-sftp
+    Login                               bulkpm                             bulkpm
+    ${epoch}=                           Get Current Date                   result_format=epoch
+    ${pm_file}=                         Set Variable                        A${epoch}.xml.gz
+    Put File                            ${pm_file_path}                    upload/${pm_file}
+    [Return]  ${pm_file}
+
+Upload PM Files to xNF HTTPS Server
+    [Arguments]                         ${pm_file_path}                     ${https_server}
+    ${epoch}=                           Get Current Date                    result_format=epoch
+    Set Variable                       A${epoch}.xml.gz
+    Copy File                           ${pm_file_path}                     tmp/${pm_file}
+    ${fileData}=                        Get Binary File                     tmp/${pm_file}
+    ${file_part}=                       Create List                         ${pm_file}                         ${fileData}                   application/octet-stream
+    ${fileParts}=                       Create Dictionary
+    Set to Dictionary                   ${fileParts}                        uploaded_file=${file_part}
+    ${auth}=                            Create List                         demo                                demo123456!
+    ${session}=                         Create Session                      https                               http://${https_server}:80   auth=${auth}
+    ${resp}=                            Post Request                        https                               /upload.php                 files=${fileParts}
+    Should Be Equal As Strings          ${resp.status_code}                 200
+    [Return]                            ${pm_file}
+
+Check Given Print In DFC Log
+    [Arguments]                         ${check_dfc_logs}
+    ${dfc_logs}=                        Run Given Command On DFC Container                                      ${CHECK_DFC_LOGS}
+    Should Contain                      ${dfc_logs}                                                             HostKey has been changed
+
+Run Given Command On DFC Container
+    [Arguments]                         ${user_command}
+    ${run_command} =                    Run And Return Rc And Output        ${user_command}
+    ${command_output} =                 Set Variable                        ${run_command[1]}
+    ${regexp_matches} =                 Get Regexp Matches                  ${command_output}                   .*(\\s|\\[)+(.+-datafile-collector).*  2
+    ${dfc_container_name} =             Set Variable                        ${regexp_matches[0]}
+    ${new_command} =                    Set Variable                        ${user_command} ${dfc_container_name}
+    ${command_output} =                 Run And Return Rc And Output        ${new_command}
+    Should Be Equal As Integers         ${command_output[0]}                0
+    ${log} =                            Set Variable                        ${command_output[1]}
+    [Return]                            ${log}
+
+Check Known Hosts In Env
+    [Arguments]                         ${CHECK_KNOWN_HOSTS}
+    ${check} =                          Run And Return Rc And Output        ${CHECK_KNOWN_HOSTS}
+    Should Be Equal As Integers         ${check[0]}                         0
+    ${env} =                            Set Variable                        ${check[1]}
+    ${string_matches} =                 Get Lines Containing String         ${env}                              KNOWN_HOSTS_FILE_PATH=/home/datafile/.ssh/known_host  case_insensitive=True
+    ${output} =                         Should Not Be Empty                 ${string_matches}
+    [Return]                            ${output}
+
+Deploying Data File Collector
+    Install helm charts                 chart-museum                       dcae-datafile-collector         ${ONAP_HELM_RELEASE}-dfc          3 min
+
+Deploying 3GPP PM Mapper
+    Install helm charts                 chart-museum                       dcae-pm-mapper         ${ONAP_HELM_RELEASE}-pmmapper             3 min
+
+Deploying SFTP Server As xNF
+    ${override} =                       Set Variable                       --set fullnameOverride=${ONAP_HELM_RELEASE}-sftp
+    Install helm charts from folder     ${SFTP_HELM_CHARTS}                ${ONAP_HELM_RELEASE}-sftp                 set_values_override=${override}
+
+Checking PERFORMANCE_MEASUREMENTS Topic In Message Router
+    ${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}
+    Wait Until Keyword Succeeds         5 minute                           5 sec                            Topic Validate                  success
+    ${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
+
+DR Bulk PM Feed Check
+    ${resp}=                            Run DR Get Request                  ${DR_SUB_CHECK_PATH}
+    Should Contain                      ${resp.text}                        bulk_pm_feed
+
+DR PM Mapper Subscriber Check
+    ${resp}=                            Run DR Get Request                  ${DR_SUB_CHECK_PATH}
+    Should Contain                      ${resp.text}                        https://dcae-pm-mapper:8443/delivery
+
+Setting KNOWN_HOSTS_FILE_PATH Environment Variable in DFC
+    ${rc}=                             Run and Return RC                   ${SET_KNOWN_HOSTS_FILE_PATH}
+    Should Be Equal As Integers        ${rc}                               0
+    Wait Until Keyword Succeeds        5 min                               10s               Check Known Hosts In Env             ${CHECK_ENV_SET}
+    ${GET_RSA_KEY}=                    Set Variable                        kubectl exec $(kubectl get pod -n onap | grep ${ONAP_HELM_RELEASE}-sftp | awk '{print $1}') -n onap -- ssh-keyscan -t rsa ${ONAP_HELM_RELEASE}-sftp > /tmp/known_hosts
+    ${rc}=                             Run and Return RC                   ${GET_RSA_KEY}
+    Should Be Equal As Integers        ${rc}                               0
+    ${rc}=                             Run and Return RC                   ${COPY_RSA_KEY}
+    Should Be Equal As Integers        ${rc}                               0
+
+Uploading PM Files to xNF SFTP Server
+    ${pm_file}=                         Upload PM Files to xNF SFTP Server      ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]}
+    Set Global Variable                 ${PM_FILE}                              ${pm_file}
+
+Sending File Ready Event to VES Collector
+    Send File Ready Event to VES Collector  ${PM_FILE}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_TYPE"]}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_VERSION"]}
+
+Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
+    Wait Until Keyword Succeeds         2 min                            5 sec            xNF PM File Validate   ${GLOBAL_TEST_VARIABLES["EXPECTED_PM_STR"]}
+
+Changing SFTP Server RSA Key in DFC
+    ${get_known_hosts_file}=          OperatingSystem.Get File  /tmp/known_hosts
+    ${change_rsa_key}=                Replace String            ${get_known_hosts_file}        A  a
+    Create File                       /tmp/known_hosts          ${change_rsa_key}
+    ${rc}=                            Run and Return RC         ${COPY_RSA_KEY}
+    Should Be Equal As Integers       ${rc}                     0
+
+Checking DFC Logs After KNOWN_HOSTS_FILE_PATH Env Variable Added
+    ${dfc_logs}=                     Run Given Command On DFC Container      ${CHECK_DFC_LOGS}
+    Should Not Contain               ${dfc_logs}                             ${EXPECTED_PRINT}
+
+Checking DFC Logs After SFTP Server RSA Key Changed
+    Wait Until Keyword Succeeds         5 min  30 sec            Check Given Print In DFC LOG  ${CHECK_DFC_LOGS}
+
+Check DFC logs
+    [Arguments]  ${DFC_LOG_CHECK}
+    ${rc} =                                    Run and Return RC                   ${DFC_LOG_CHECK}
+    Should Be Equal As Integers                ${rc}                               0