Library           OperatingSystem
 Library           String
 Library           JSONLibrary
+Resource          ../dcae/deployment.robot
+Resource          ../dcae/inventory.robot
+Resource          ../mr_interface.robot
+Resource          ../dr_interface.robot
+Resource          ../consul_interface.robot
 
 *** Variables ***
 ${INVENTORY_SERVER}                                 ${GLOBAL_INVENTORY_SERVER_PROTOCOL}://${GLOBAL_INVENTORY_SERVER_NAME}:${GLOBAL_INVENTORY_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
+${GET_RSA_KEY}                                      kubectl exec $(kubectl get pod -n onap | grep sftpserver | awk '{print $1}') -n onap -- ssh-keyscan -t rsa sftpserver > /tmp/known_hosts
+${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
+
 
-*** Keywords ***
-Undeploy Service
-    [Arguments]         ${server}                   ${endpoint}
-    ${session}=         Create Session                     deployment                 ${server}
-    ${resp}=            Delete Request              deployment                 ${endpoint}
-    [Return]            ${resp}
 
-Deployment Status
-    [Arguments]         ${server}                   ${endpoint}            ${deployment}      ${operationId}
-    ${session}=         Create Session              deployment-status      ${server}
-    ${resp}=            Get Request                 deployment-status      /${endpoint}/${deployment}/operation/${operationId}
-    ${status}           Set Variable                ${resp.json().get('status')}
-    Should Be Equal As Strings                      ${status}               succeeded
+
+*** Keywords ***
 
 
 Check Next Event From Topic
     ...  If there is no more messageses then it reports success and finish "Wait Until Keyword Succeeds  2 min  1 s  Check Next Event From Topic" step from "xNF PM File Validate" keyword
     ...  In other case it triggers "Get Next Event From Topic".
     ...  NOTE: Keyword "Get Next Event From Topic" will always fails in order to not finsh "Wait Until Keyword Succeeds  2 min  1 s  Check Next Event From Topic" step from "xNF PM File Validate" keyword
-    ${resp}=  Run MR Auth Get Request     ${MR_TOPIC_URL_PATH}     ${GLOBAL_DCAE_USERNAME}      ${GLOBAL_DCAE_PASSWORD}
-    Run keyword If  ${resp.text} == @{EMPTY}  Log  Event is empty! There is no more events on topic!
-    ...     ELSE   Get Next Event From Topic  ${resp}
+    ${resp}=        Run MR Auth Get Request         ${MR_TOPIC_URL_PATH}     ${GLOBAL_DCAE_USERNAME}      ${GLOBAL_DCAE_PASSWORD}
+    Run keyword If  ${resp.text} == @{EMPTY}        Log                         Event is empty! There is no more events on topic!
+    ...     ELSE    Get Next Event From Topic       ${resp}
 
 Get Next Event From Topic
     [Documentation]
     ...  This keyword adds new events from MR topic to list ${all_event_json_list} in a recursive way and sets ${all_event_json_list} as a suite variable in order to be able to add new items/evnts in a next iteration
     ...  NOTE: Keyword "Get Next Event From Topic" will always fails in order to not finish "Wait Until Keyword Succeeds  2 min  1 s  Check Next Event From Topic" step from "xNF PM File Validate" keyword
-    [Arguments]  ${resp}
-    ${resp_list}=  Set Variable   ${resp.json()}
-    Log  ${resp_list}
-    ${combained_list}=  Combine Lists  ${all_event_json_list}  ${resp_list}
-    ${all_event_json_list}=  Set Variable  ${combained_list}
-    Set Suite Variable         ${all_event_json_list}
+    [Arguments]                 ${resp}
+    ${resp_list}=               Set Variable        ${resp.json()}
+    Log                         ${resp_list}
+    ${combained_list}=          Combine Lists       ${all_event_json_list}      ${resp_list}
+    ${all_event_json_list}=     Set Variable        ${combained_list}
+    Set Suite Variable                 ${all_event_json_list}
     Fail
 
 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}" .
     ...  Only in custom mode it saves a response as a json file "${PM_FILE}-${timestamp}.json" located in "${expected_event_json_path}"
-    [Arguments]  ${bulk_pm_mode}  ${expected_pm_str}  ${expected_event_json_path}
-    Run Keyword If  '${bulk_pm_mode}' == 'custom'  Set Log Level  ${PM_LOG_LEVEL}
-    ${timestamp}=  Get Time  epoch
-    ${resp}=  Run MR Auth Get Request     ${MR_TOPIC_URL_PATH}     ${GLOBAL_DCAE_USERNAME}      ${GLOBAL_DCAE_PASSWORD}
-    Run keyword If  ${resp.text} == @{EMPTY}  Fail  msg=Event is empty!
-    ${all_event_json_list}=  Set Variable  ${resp.json()}
-    Set Suite Variable         ${all_event_json_list}
-    Wait Until Keyword Succeeds  2 min  5 sec  Check Next Event From Topic
-    ${all_event_json_string}=   Convert To String    ${all_event_json_list}
-    Should Contain   ${all_event_json_string}   ${expected_pm_str}
-    Run Keyword If  '${bulk_pm_mode}' == 'custom'   Print Evnets From Topic to JSON file  ${expected_event_json_path}  ${all_event_json_string}
-    Run Keyword If  '${bulk_pm_mode}' == 'custom'  Set Log Level  TRACE
-
+    [Arguments]                 ${bulk_pm_mode}                 ${expected_pm_str}              ${expected_event_json_path}
+    Run Keyword If              '${bulk_pm_mode}' == 'custom'   Set Log Level                   ${PM_LOG_LEVEL}
+    ${timestamp}=               Get Time                        epoch
+    ${resp}=                    Run MR Auth Get Request         ${MR_TOPIC_URL_PATH}            ${GLOBAL_DCAE_USERNAME}         ${GLOBAL_DCAE_PASSWORD}
+    Run keyword If              ${resp.text} == @{EMPTY}        Fail                            msg=Event is empty!
+    ${all_event_json_list}=     Set Variable                    ${resp.json()}
+    Set Suite Variable                 ${all_event_json_list}
+    Wait Until Keyword Succeeds  2 min                          5 sec                           Check Next Event From Topic
+    ${all_event_json_string}=   Convert To String               ${all_event_json_list}
+    Should Contain              ${all_event_json_string}        ${expected_pm_str}
+    Run Keyword If              '${bulk_pm_mode}' == 'custom'   Print Evnets From Topic to JSON file        ${expected_event_json_path}     ${all_event_json_string}
+    Run Keyword If              '${bulk_pm_mode}' == 'custom'   Set Log Level                               TRACE
 
 Print Evnets From Topic to JSON file
-     [Arguments]   ${expected_event_json_path}  ${all_event_json_string}
-     ${str}=  Replace String   ${all_event_json_string}   '{  {
-     ${str2}=  Replace String   ${str}      }'  }
-     ${all_event_json_string}=  Replace String   ${str2}   u{  {
-     ${json}=  To Json  ${all_event_json_string}   pretty_print=True
-     ${timestamp}=  Get Time  epoch
-     Create File  ${expected_event_json_path}/${PM_FILE}-${timestamp}.json  ${json}
-
+     [Arguments]                ${expected_event_json_path}         ${all_event_json_string}
+     ${str}=                    Replace String                      ${all_event_json_string}                '{          {
+     ${str2}=                   Replace String                      ${str}                                  }'          }
+     ${all_event_json_string}=  Replace String                      ${str2}                                 u{          {
+     ${json}=                   To Json                             ${all_event_json_string}                pretty_print=True
+     ${timestamp}=              Get Time                            epoch
+     Create File                ${expected_event_json_path}/${PM_FILE}-${timestamp}.json                    ${json}
 
 Topic Validate
     [Arguments]                         ${value}
     ${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
+    Send File Ready Event to VES Collector      ${pm_file}              ${file_format_type}             ${file_format_version}
+    Setting Global Variables
+    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
+    Log To Console                              Deploying VES collector with CMPv2 for bulkpm over https
+    Deploying VES collector with CMPv2 for bulkpm over https
+    Log To Console                              Deploying HTTPS server with correct CMPv2 certificates
+    Deploying HTTPS server with correct certificates
+    Log To Console                              Deploying HTTPS server with wrong CMPv2 certificates - wrong SAN-s
+    Deploying HTTPS server with wrong certificates - wrong SAN-s
+    Log To Console                              Deploying VES Client with CMPv2 certificates
+    Deploying VES Client with correct certificates
+    Log To Console                              Checking status of deployed applictions
+    Wait Until Keyword Succeeds                 5 min                                           20 sec                             Checking Status Of Deployed Applictions
 
 Usecase Teardown
-    Undeploy Service                    ${DEPLOYMENT_SERVER}                 /${DEPLOYMENT_ENDPOINT}/pmmapper
-    Undeploy Service                    ${DEPLOYMENT_SERVER}                 /${DEPLOYMENT_ENDPOINT}/sftpserver
-    Undeploy Service                    ${INVENTORY_SERVER}                  ${INVENTORY_ENDPOINT}/${serviceTypeId-Sftp}
-    Undeploy Service                    ${DEPLOYMENT_SERVER}                  /${DEPLOYMENT_ENDPOINT}/datafile
+    Disable Warnings
+    Wait Until Keyword Succeeds         2 min                      20 sec                       Undeploy Service With Check                    datafile
+    Wait Until Keyword Succeeds         2 min                      20 sec                       Undeploy Service With Check                    pmmapper
+    Wait Until Keyword Succeeds         2 min                      20 sec                       Undeploy Service With Check                   sftpserver
+    Delete Blueprint From Inventory     ${serviceTypeId-Sftp}
+    Wait Until Keyword Succeeds         2 min                      20 sec                       Undeploy Service With Check                    ves-collector-for-bulkpm-over-https
+    Wait Until Keyword Succeeds         2 min                      20 sec                       Undeploy Service With Check                    https-server-dep
+    Delete Blueprint From Inventory     ${serviceTypeId-Https}
+    Wait Until Keyword Succeeds         2 min                      20 sec                       Undeploy Service With Check                    https-server-wrong-sans-dep
+    Delete Blueprint From Inventory     ${serviceTypeId-Https-wrong-sans}
+    Wait Until Keyword Succeeds         2 min                      20 sec                       Undeploy Service With Check                    mongo-dep-5gbulkpm
+    Wait Until Keyword Succeeds         2 min                      20 sec                       Undeploy Service With Check                    ves-rest-client-dep
+    Delete Blueprint From Inventory     ${serviceTypeIdMongo}
+    Delete Blueprint From Inventory     ${serviceTypeIdVesClient}
+
+
+Undeploy Service With Check
+    [Arguments]                          ${deployment_name}
+    ${resp}                              Undeploy Service               ${deployment_name}
+    Should Not Be Equal As Strings       ${resp.status_code}            400
+
+
+Setting Global Variables
+    [Documentation]
+    ...  This test case checks suite if it is working in default or custom mode and sets proper variables depended on used mode.
+    ...  Default mode is based on a previous version of 5gbulkpm test case which it test PM file available in robot image.
+    ...  Custom mode is used only in xtesing. Can be executed only as k8s job described in https://gerrit.onap.org/r/gitweb?p=integration/xtesting.git;a=blob_plain;f=smoke-usecases-robot/README.md;hb=refs/heads/master
+    ...  Custom mode is used to validate custom PM files. All details how to provide custom PM files are described in documentation above.
+    ...  By default in custom mode all PM details are not logged to robot log files, so they are not send to community name: TEST_DB_URL http://testresults.opnfv.org/onap/api/v1/results
+    ${env_variables} =  Get Environment Variables
+    ${bulk_pm_mode}=   Get Variable Value  ${env_variables["BULK_PM_MODE"]}  default
+    ${pm_log_level}=   Get Variable Value  ${env_variables["PM_LOG_LEVEL"]}  NONE
+    ${test_variables} =  Create Dictionary
+    Run Keyword If   "${bulk_pm_mode}" == "custom"  Set To Dictionary  ${test_variables}   FILE_FORMAT_TYPE=${env_variables["FILE_FORMAT_TYPE"]}
+    ...                                                                                    FILE_FORMAT_VERSION=${env_variables["FILE_FORMAT_VERSION"]}
+    ...                                                                                    PM_FILE_PATH=${env_variables["PM_FILE_PATH"]}
+    ...                                                                                    EXPECTED_PM_STR=${env_variables["EXPECTED_PM_STR"]}
+    ...                                                                                    EXPECTED_EVENT_JSON_PATH=${env_variables["EXPECTED_EVENT_JSON_PATH"]}
+    ...        ELSE                                 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
+    ...                                                                                    EXPECTED_EVENT_JSON_PATH=none
+    Set Global Variable   ${GLOBAL_TEST_VARIABLES}  ${test_variables}
+    Set Global Variable  ${BULK_PM_MODE}  ${bulk_pm_mode}
+    Set Global Variable  ${PM_LOG_LEVEL}  ${pm_log_level}
 
 
 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}
     ${resp}=                            Post Request                        ves                             ${VES_LISTENER_PATH}          data=${VES_FILE_READY_NOTIFICATION}   headers=${headers}
     Should Be Equal As Strings          ${resp.status_code}                 202
 
+Send File Ready Event to VES Collector Over VES Client
+    [Arguments]                     ${pm_file}                  ${file_format_type}             ${file_format_version}    ${https_server_host}   ${http_reposnse_code}
+    Disable Warnings
+    ${pm_event}                     Create Dictionary           https_server_host=${https_server_host}  pm_file=${pm_file}   fileFormatType=${file_format_type}   fileFormatVersion=${file_format_version}
+    Templating.Create Environment   pm                          ${GLOBAL_TEMPLATE_FOLDER}
+    ${event}=                       Templating.Apply Template   pm                              ${pm_notification_event}   ${pm_event}
+    ${ves_client_endpoint}=         Set Variable                http://ves-client:5000
+    ${ves_url}=                     Set Variable                ${GLOBAL_DCAE_VES_HTTPS_PROTOCOL}://dcae-ves-collector-for-bulkpm-over-https:${GLOBAL_DCAE_VES_HTTPS_SERVER_PORT}/eventListener/v7
+    ${single_event}=                Create Dictionary           event=${event}                  ves_url=${ves_url}
+    Templating.Create Environment   ves                         ${GLOBAL_TEMPLATE_FOLDER}
+    ${data}=                        Templating.Apply Template   ves                             ${ves_client_single_event}   ${single_event}
+    ${session}=                     Create Session              ves_client                      ${ves_client_endpoint}
+    ${headers}=                     Create Dictionary           Accept=application/json         Content-Type=application/json
+    ${post_resp}=                   Post Request                ves_client                      /simulator/event      data=${data}        headers=${headers}
+    Log                             PM notification ${data}
+    Should Be Equal As Strings      ${post_resp.status_code}    ${http_reposnse_code}
+
 Upload PM Files to xNF SFTP Server
     [Arguments]                         ${pm_file_path}                   ${bulk_pm_mode}
     Open Connection                     sftpserver
     Put File                            ${pm_file_path}                    upload/${pm_file}
     [Return]  ${pm_file}
 
+Upload PM Files to xNF HTTPS Server
+    [Arguments]                         ${pm_file_path}                     ${bulk_pm_mode}                     ${https_server}
+    ${epoch}=                           Get Current Date                    result_format=epoch
+    ${pm_file} =  Run Keyword If        "${bulk_pm_mode}" == "custom"       Fetch From Right                   ${pm_file_path}               marker=/
+    ...                     ELSE                                            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
+    [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}
+    [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}
+    [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
+    ${resp}=                            Get Blueprint From Inventory       k8s-datafile
+    ${json}=                            Set Variable                       ${resp.json()}
+    ${serviceTypeId-Dfc}                Set Variable                       ${json['items'][0]['typeId']}
+    ${image}                            Get Regexp Matches                 ${json['items'][0]['blueprintTemplate']}             nexus3(.)*?(?=\\")
+    ${image}                            Replace String                     ${image}[0]      nexus3.onap.org:10001               ${NEXUS3}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Dfc}", "inputs": {"tag_version": "${image}", "external_cert_use_external_tls": true}}
+    Deploy Service                      ${deployment_data}                 datafile                                            4 minutes
+
+Deploying 3GPP PM Mapper
+    ${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}
+    ${resp}=                            Get Blueprint From Inventory       k8s-pm-mapper
+    ${json}=                            Set Variable                       ${resp.json()}
+    ${serviceTypeId-Pmmapper}           Set Variable                       ${json['items'][0]['typeId']}
+    ${image}                            Get Regexp Matches                 ${json['items'][0]['blueprintTemplate']}             nexus3(.)*?(?=\')
+    ${image}                            Replace String                     ${image}[0]      nexus3.onap.org:10001               ${NEXUS3}
+    ${deployment_data}=                 Set Variable                       {"inputs":{"client_password": "${GLOBAL_DCAE_PASSWORD}", "tag_version": "${image}"},"serviceTypeId": "${serviceTypeId-Pmmapper}"}
+    ${pmMapperOperationId}=             Deploy Service                      ${deployment_data}                 pmmapper                        check_deployment_status=false
+    Set Global Variable                 ${pmMapperOperationId}
+
+Deploying SFTP Server As xNF
+    ${serviceTypeId-Sftp}               Load Blueprint To Inventory        ${XNF_SFTP_BLUEPRINT_PATH}              sftp
+    Set Global Variable                 ${serviceTypeId-Sftp}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Sftp}"}
+    ${sftpServerOperationId}=           Deploy Service                      ${deployment_data}                 sftpserver                        check_deployment_status=false
+    Set Global Variable                 ${sftpServerOperationId}
+
+Deploying HTTPS server with correct certificates
+    ${serviceTypeId-Https}              Load Blueprint To Inventory        ${XNF_HTTPS_BLUEPRINT_PATH}              https
+    Set Global Variable                 ${serviceTypeId-Https}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Https}"}
+    ${resp}=                            Get Blueprint From Inventory       https
+    ${json}=                            Set Variable                       ${resp.json()}
+    ${image}                            Get Regexp Matches                 ${json['items'][0]['blueprintTemplate']}               nexus3(.)*?(?=\')
+    ${image}                            Replace String                     ${image}[0]      nexus3.onap.org:10001                 ${NEXUS3}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Https}", "inputs": {"tag_version": "${image}", "service_component_type": "https-server", "service_component_name_override": "https-server", "external_cert_sans": "https-server"}}
+    ${httpsServerOperationId}=          Deploy Service                      ${deployment_data}                 https-server-dep                  check_deployment_status=false
+    Set Global Variable                 ${httpsServerOperationId}
+
+Deploying HTTPS server with wrong certificates - wrong SAN-s
+    ${serviceTypeId-Https-wrong-sans}              Load Blueprint To Inventory        ${XNF_HTTPS_BLUEPRINT_PATH}              https-wrong-sans
+    Set Global Variable                 ${serviceTypeId-Https-wrong-sans}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Https-wrong-sans}"}
+    ${resp}=                            Get Blueprint From Inventory       https-wrong-sans
+    ${json}=                            Set Variable                       ${resp.json()}
+    ${image}                            Get Regexp Matches                 ${json['items'][0]['blueprintTemplate']}               nexus3(.)*?(?=\')
+    ${image}                            Replace String                     ${image}[0]      nexus3.onap.org:10001                 ${NEXUS3}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Https-wrong-sans}", "inputs": {"tag_version": "${image}", "service_component_type": "https-server-wrong-sans", "service_component_name_override": "https-server-wrong-sans", "external_cert_sans": "wrong-cert"}}
+    ${httpsServerWrongSansOperationId}=        Deploy Service                      ${deployment_data}                 https-server-wrong-sans-dep                   check_deployment_status=false
+    Set Global Variable                 ${httpsServerWrongSansOperationId}
+
+Deploying VES Client with correct certificates
+    ${serviceTypeIdMongo}               Load Blueprint To Inventory        ${MONGO_VES_CLIENT_BLUEPRINT_PATH}   mongo-5g-bulk-pm
+    ${serviceTypeIdVesClient}           Load Blueprint To Inventory        ${VES_CLIENT_BLUEPRINT_PATH}         ves-rest-client
+    Set Suite Variable                  ${serviceTypeIdMongo}
+    Set Suite Variable                  ${serviceTypeIdVesClient}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeIdMongo}", "inputs": {"service_component_type": "mongo-ves-client", "service_component_name_override": "mongo-ves-client"}}
+    Deploy Service                      ${deployment_data}                 mongo-dep-5gbulkpm                             2 minutes
+    ${resp}=                            Get Blueprint From Inventory       ves-rest-client
+    ${json}=                            Set Variable                       ${resp.json()}
+    ${image}                            Get Regexp Matches                 ${json['items'][0]['blueprintTemplate']}               nexus3(.)*?(?=\')
+    ${image}                            Replace String                     ${image}[0]      nexus3.onap.org:10001                 ${NEXUS3}
+    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeIdVesClient}", "inputs": {"tag_version": "${image}", "service_component_type": "ves-client", "service_component_name_override": "ves-client"}}
+    ${vesRestClientOperationId}=        Deploy Service                      ${deployment_data}                 ves-rest-client-dep                   check_deployment_status=false
+    Set Global Variable                 ${vesRestClientOperationId}
+
+Deploying VES collector with CMPv2 for bulkpm over https
+    ${resp}=                            Get Blueprint From Inventory       k8s-ves
+    ${json}=                            Set Variable                       ${resp.json()}
+    ${serviceTypeIdVes}                 Set Variable                       ${json['items'][0]['typeId']}
+    ${image}                            Get Regexp Matches                 ${json['items'][0]['blueprintTemplate']}             nexus3(.)*?(?=\")
+    ${image}                            Replace String                     ${image}[0]      nexus3.onap.org:10001               ${NEXUS3}
+    ${arguments}=                       Create Dictionary                  serviceTypeId=${serviceTypeIdVes}
+    Set To Dictionary                   ${arguments}                       image                                                ${image}
+    Set To Dictionary                   ${arguments}                       external_port_tls                                    32419
+    Set To Dictionary                   ${arguments}                       service_component_name_override                      dcae-ves-collector-for-bulkpm-over-https
+    Set To Dictionary                   ${arguments}                       external_cert_sans                                   dcae-ves-collector-for-bulkpm-over-https,ves-collector-cmpv2-cert,ves-cmpv2-cert
+    Templating.Create Environment       deployment                         ${GLOBAL_TEMPLATE_FOLDER}
+    ${deployment_data}=                 Templating.Apply Template          deployment                                           ${VES_INPUTS}            ${arguments}
+    ${vesCollectorForBulkpmOverHttpsOperationId}=  Deploy Service                      ${deployment_data}                 ves-collector-for-bulkpm-over-https                  check_deployment_status=false
+    Set Global Variable                 ${vesCollectorForBulkpmOverHttpsOperationId}
+
+
+Checking Status Of Deployed Applictions
+    ${statusDict}=                          Create Dictionary
+    ${status}                              ${value} =          Run Keyword And Ignore Error            Deployment Status                   pmmapper                                            ${pmMapperOperationId}
+    Set To Dictionary                       ${statusDict}       pmmapper                                ${status}
+    ${status}                              ${value} =          Run Keyword And Ignore Error            Deployment Status                   ves-rest-client-dep                                 ${vesRestClientOperationId}
+    Set To Dictionary                       ${statusDict}       ves-rest-client-dep                     ${status}
+    ${status}                              ${value} =          Run Keyword And Ignore Error            Deployment Status                   ves-collector-for-bulkpm-over-https                 ${vesCollectorForBulkpmOverHttpsOperationId}
+    Set To Dictionary                       ${statusDict}       ves-collector-for-bulkpm-over-https     ${status}
+    ${status}                              ${value} =          Run Keyword And Ignore Error            Deployment Status                   https-server-dep                                    ${httpsServerOperationId}
+    Set To Dictionary                       ${statusDict}       https-server-dep                        ${status}
+    ${status}                              ${value} =          Run Keyword And Ignore Error            Deployment Status                   https-server-wrong-sans-dep                         ${httpsServerWrongSansOperationId}
+    Set To Dictionary                       ${statusDict}       https-server-wrong-sans-dep             ${status}
+    Dictionary Should Not Contain Value     ${statusDict}       FAIL
+
+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}
+    ${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"]}    ${BULK_PM_MODE}
+    Set Global Variable                 ${PM_FILE}                              ${pm_file}
+
+Uploading PM Files to xNF HTTPS Server
+    [Arguments]                         ${https-server_host}
+    ${pm_file}=                         Upload PM Files to xNF HTTPS Server     ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]}    ${BULK_PM_MODE}     ${https-server_host}
+    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"]}
+
+Sending File Ready Event to VES Collector Over VES Client
+    [Arguments]  ${https-server_host}
+    Send File Ready Event to VES Collector Over VES Client  ${PM_FILE}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_TYPE"]}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_VERSION"]}    ${https-server_host}   202
+
+Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
+    Wait Until Keyword Succeeds         2 min                            5 sec            xNF PM File Validate   ${BULK_PM_MODE}   ${GLOBAL_TEST_VARIABLES["EXPECTED_PM_STR"]}  ${GLOBAL_TEST_VARIABLES["EXPECTED_EVENT_JSON_PATH"]}
+
+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
+
+Change DFC httpsHostnameVerify configuration in Consul
+    [Documentation]     Changes DFC httpsHostnameVerify config.
+    [Arguments]                     ${httpsHostnameVerify}
+    ${httpsHostnameVerify_conf}     Create Dictionary               httpsHostnameVerify=${httpsHostnameVerify}
+    Templating.Create Environment   pm                              ${GLOBAL_TEMPLATE_FOLDER}
+    ${event}=                       Templating.Apply Template       pm                              ${consul_change_event}      ${httpsHostnameVerify_conf}
+    ${rc}      ${container_name} =     Run and Return RC and Output    kubectl get pods -n onap | grep datafile-collector | awk '{print $1}' | grep -v NAME | awk -F'-' '{print $2}'
+    Should Be Equal As Integers        ${rc}                           0
+    ${resp}=                        Run Consul Put Request          /v1/kv/${container_name}-datafile-collector?dc=dc1          ${event}
+    Should Be Equal As Strings      ${resp.status_code}             200
+    ${rc} =                        Run and Return RC               kubectl delete pods -n onap $(kubectl get pods -n onap | grep datafile-collector | awk '{print $1}' | grep -v NAME)
+    Should Be Equal As Integers        ${rc}                           0
+    Wait Until Keyword Succeeds         60 sec          5 sec       Check DFC logs                  kubectl logs -n onap $(kubectl get pods -n onap | grep datafile-collector | awk '{print $1}' | grep -v NAME) ${container_name}-datafile-collector
 
 
 Library           ONAPLibrary.JSON
 Library           ONAPLibrary.Utilities
 Resource          ../../resources/usecases/5gbulkpm_interface.robot
-Resource          ../../resources/mr_interface.robot
-Resource          ../../resources/dr_interface.robot
-Suite Setup       Send File Ready Event to VES Collector   test  org.3GPP.32.435#measCollec  V10
+Suite Setup       Send File Ready Event to VES Collector and Deploy all DCAE Applications   test  org.3GPP.32.435#measCollec  V10
 Suite Teardown    Usecase Teardown
 
 *** Variables ***
-${INVENTORY_ENDPOINT}               /dcae-service-types
-${XNF_SFTP_BLUEPRINT_PATH}          ${EXECDIR}/robot/assets/usecases/5gbulkpm/k8s-sftp.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
-${GET_RSA_KEY}                      kubectl exec $(kubectl get pod -n onap | grep sftpserver | awk '{print $1}') -n onap -- ssh-keyscan -t rsa sftpserver > /tmp/known_hosts
-${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
+${DFC_ERROR_GREP_COMMAND_SANS}      kubectl logs $(kubectl get pods -n onap | grep datafile-collector | awk '{print $1}' | grep -v NAME) --all-containers -n onap --since=15s | grep "Certificate for .* subject alternative names: .*wrong-cert"
 
 *** Test Cases ***
 
-Setting Global Variables
+SFTP Server based bulk PM test, no SFTP Server know host veryfication on DFC side
+    [Tags]                              5gbulkpm                           5gbulkpm_sftp              5gbulkpm_cust_pm_validate
     [Documentation]
-    ...  This test case checks suite if it is working in default or custom mode and sets proper variables depended on used mode.
-    ...  Default mode is based on a previous version of 5gbulkpm test case which it test PM file available in robot image.
-    ...  Custom mode is used only in xtesing. Can be executed only as k8s job described in https://gerrit.onap.org/r/gitweb?p=integration/xtesting.git;a=blob_plain;f=smoke-usecases-robot/README.md;hb=refs/heads/master
-    ...  Custom mode is used to validate custom PM files. All details how to provide custom PM files are described in documentation above.
-    ...  By default in custom mode all PM details are not logged to robot log files, so they are not send to community name: TEST_DB_URL http://testresults.opnfv.org/onap/api/v1/results
-    [Tags]                              5gbulkpm                           5gbulkpm_checking_sftp_rsa_key
-    ${env_variables} =  Get Environment Variables
-    ${bulk_pm_mode}=   Get Variable Value  ${env_variables["BULK_PM_MODE"]}  default
-    ${pm_log_level}=   Get Variable Value  ${env_variables["PM_LOG_LEVEL"]}  NONE
-    ${test_variables} =  Create Dictionary
-    Run Keyword If   "${bulk_pm_mode}" == "custom"  Set To Dictionary  ${test_variables}   FILE_FORMAT_TYPE=${env_variables["FILE_FORMAT_TYPE"]}
-    ...                                                                                    FILE_FORMAT_VERSION=${env_variables["FILE_FORMAT_VERSION"]}
-    ...                                                                                    PM_FILE_PATH=${env_variables["PM_FILE_PATH"]}
-    ...                                                                                    EXPECTED_PM_STR=${env_variables["EXPECTED_PM_STR"]}
-    ...                                                                                    EXPECTED_EVENT_JSON_PATH=${env_variables["EXPECTED_EVENT_JSON_PATH"]}
-    ...        ELSE                                 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
-    ...                                                                                    EXPECTED_EVENT_JSON_PATH=none
-    Set Global Variable   ${GLOBAL_TEST_VARIABLES}  ${test_variables}
-    Set Global Variable  ${BULK_PM_MODE}  ${bulk_pm_mode}
-    Set Global Variable  ${PM_LOG_LEVEL}  ${pm_log_level}
-
-
-Deploying Data File Collector
-    [Tags]                              5gbulkpm                           5gbulkpm_checking_sftp_rsa_key
-    ${headers}=                         Create Dictionary                  content-type=application/json
-    ${session}=                         Create Session                     dfc                 ${INVENTORY_SERVER}
-    ${resp}=                            Get Request                        dfc                 ${INVENTORY_ENDPOINT}?typeName=k8s-datafile                      headers=${headers}
-    ${json}=                            Set Variable                       ${resp.json()}
-    ${serviceTypeId-Dfc}                Set Variable                       ${json['items'][0]['typeId']}
-    ${image}                            Get Regexp Matches                 ${json['items'][0]['blueprintTemplate']}            nexus3(.)*?(?=\\")
-    ${image}                            Replace String                     ${image}[0]      nexus3.onap.org:10001                 ${NEXUS3}
-    Set Global Variable                 ${serviceTypeId-Dfc}
-    ${deployment_data}=                 Set Variable                       {"serviceTypeId": "${serviceTypeId-Dfc}", "inputs": {"tag_version": "${image}"}}
-    ${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         5 minute                           20 sec            Deployment Status       ${DEPLOYMENT_SERVER}     ${DEPLOYMENT_ENDPOINT}     datafile     ${operationId}
-
-Deploying 3GPP PM Mapper
-    [Tags]                              5gbulkpm                           5gbulkpm_checking_sftp_rsa_key
-    ${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}
-    ${session}=                         Create Session                     pmmapper                 ${INVENTORY_SERVER}
-    ${resp}=                            Get Request                        pmmapper                 ${INVENTORY_ENDPOINT}?typeName=k8s-pm-mapper                     headers=${headers}
-    ${json}=                            Set Variable                       ${resp.json()}
-    ${serviceTypeId-Pmmapper}           Set Variable                       ${json['items'][0]['typeId']}
-    ${image}                            Get Regexp Matches                 ${json['items'][0]['blueprintTemplate']}            nexus3(.)*?(?=\')
-    ${image}                            Replace String                     ${image}[0]      nexus3.onap.org:10001                 ${NEXUS3}
-    Set Global Variable                 ${serviceTypeId-Pmmapper}
-    ${deployment_data}=                 Set Variable                       {"inputs":{"client_password": "${GLOBAL_DCAE_PASSWORD}", "tag_version": "${image}"},"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         6 minute                           10 sec            Deployment Status       ${DEPLOYMENT_SERVER}     ${DEPLOYMENT_ENDPOINT}     pmmapper     ${operationId}
-
-Deploying SFTP Server As xNF
-    [Tags]                              5gbulkpm                           5gbulkpm_checking_sftp_rsa_key
-    ${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         2 minute                           5 sec            Deployment Status       ${DEPLOYMENT_SERVER}     ${DEPLOYMENT_ENDPOINT}     sftpserver     ${operationId}
-
-
-Checking PERFORMANCE_MEASUREMENTS Topic In Message Router
-    [Tags]                              5gbulkpm                           5gbulkpm_checking_sftp_rsa_key
-    ${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
-
-Uploading PM Files to xNF SFTP Server After Services Deployed
-    [Tags]                              5gbulkpm                           5gbulkpm_checking_sftp_rsa_key
-    ${pm_file}=  Upload PM Files to xNF SFTP Server  ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]}  ${BULK_PM_MODE}
-    Set Global Variable  ${PM_FILE}  ${pm_file}
-
-DR Bulk PM Feed Check
-    [Tags]                              5gbulkpm                            5gbulkpm_checking_sftp_rsa_key
-    ${resp}=                            Run DR Get Request                  ${DR_SUB_CHECK_PATH}
-    Should Contain                      ${resp.text}                        bulk_pm_feed
-
-DR PM Mapper Subscriber Check
-    [Tags]                              5gbulkpm                            5gbulkpm_checking_sftp_rsa_key
-    ${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 After Services Deployed
-    [Tags]                              5gbulkpm                 5gbulkpm_checking_sftp_rsa_key
-    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 After Services Deployed
-    [Tags]                              5gbulkpm                            5gbulkpm_checking_sftp_rsa_key
-    Wait Until Keyword Succeeds         2 min                            5 sec            xNF PM File Validate   ${BULK_PM_MODE}   ${GLOBAL_TEST_VARIABLES["EXPECTED_PM_STR"]}  ${GLOBAL_TEST_VARIABLES["EXPECTED_EVENT_JSON_PATH"]}
-
-
-Setting KNOWN_HOSTS_FILE_PATH Environment Variable
-    [Tags]                             5gbulkpm_checking_sftp_rsa_key
-    ${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}
-    ${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 After KNOWN_HOSTS_FILE_PATH Env Variable Added
-    [Tags]                              5gbulkpm_checking_sftp_rsa_key
-    ${pm_file}=  Upload PM Files to xNF SFTP Server  ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]}  ${BULK_PM_MODE}
-    Set Global Variable  ${PM_FILE}  ${pm_file}
-
-Sending File Ready Event to VES Collector After KNOWN_HOSTS_FILE_PATH Env Variable Added
-    [Tags]                              5gbulkpm_checking_sftp_rsa_key
-    Send File Ready Event to VES Collector  ${PM_FILE}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_TYPE"]}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_VERSION"]}
+    ...  This test case triggers successful bulk pm upload from SFTP server without SFTP server host verification in DFC known host file.
+    ...  Known host verification is turned off on DFC
+    Uploading PM Files to xNF SFTP Server
+    Sending File Ready Event to VES Collector
+    Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
+
+SFTP Server based bulk PM test, successful SFTP Server known host verification on DFC side
+    [Tags]                              5gbulkpm                           5gbulkpm_sftp
+    [Documentation]
+    ...  This test case triggers successful bulk pm upload from SFTP server with SFTP server host verification in DFC known host file.
+    ...  Known host verification is turned on DFC and to know host is added SFTP server entry
+    Setting KNOWN_HOSTS_FILE_PATH Environment Variable in DFC
+    Uploading PM Files to xNF SFTP Server
+    Sending File Ready Event to VES Collector
+    Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
+    Checking DFC Logs After KNOWN_HOSTS_FILE_PATH Env Variable Added
+
+SFTP Server based bulk PM test, not successful SFTP Server know host verification on DFC side
+    [Tags]                              5gbulkpm                           5gbulkpm_sftp
+    [Documentation]
+    ...  This test case triggers unsuccessful bulk pm upload from SFTP server with SFTP server host verification in DFC known host file.
+    ...  Known host verification is turned on DFC and to know host is added wrong SFTP server entry
+    Changing SFTP Server RSA Key in DFC
+    Uploading PM Files to xNF SFTP Server
+    Sending File Ready Event to VES Collector
+    Checking DFC Logs After KNOWN_HOSTS_FILE_PATH Env Variable Added
+
+HTTPS Server based bulk PM test (correct server certificate - correct SANs), successful HTTPS server certificate verification on DFC side
+    [Tags]                              5gbulkpm                           5gbulkpm_https
+    [Documentation]
+    ...  This test case triggers successful bulk pm upload from HTTPS server using CMPv2 Certificate-based authentication
+    ...  Both HTTPS server and DFC have correct certs with correct SAN-s.
+    ...  DFC has turned on hostname verification option, verifies HTTPS server host name and downloads pm file from HTTPS server.
+    Change DFC httpsHostnameVerify configuration in Consul   true
+    Uploading PM Files to xNF HTTPS Server      https-server
+    Sending File Ready Event to VES Collector Over VES Client  https-server
+    Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
 
-Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic After KNOWN_HOSTS_FILE_PATH Env Variable Added
-    [Tags]                              5gbulkpm_checking_sftp_rsa_key
-    Wait Until Keyword Succeeds         2 min                            5 sec             xNF PM File Validate   ${BULK_PM_MODE}   ${GLOBAL_TEST_VARIABLES["EXPECTED_PM_STR"]}  ${GLOBAL_TEST_VARIABLES["EXPECTED_EVENT_JSON_PATH"]}
 
-Checking DFC Logs After KNOWN_HOSTS_FILE_PATH Env Variable Added
-    [Tags]                           5gbulkpm_checking_sftp_rsa_key
-    ${dfc_logs}=                     Run Given Command On DFC Container      ${CHECK_DFC_LOGS}
-    Should Not Contain               ${dfc_logs}                             ${EXPECTED_PRINT}
+HTTPS Server based bulk PM test (wrong server certificate - wrong SANs), unsuccessful validation on DFC side due to turned on host checking
+    [Tags]                              5gbulkpm                           5gbulkpm_https
+    [Documentation]
+    ...  This test case triggers unsuccessful bulk pm upload from HTTPS server using CMPv2 Certificate-based authentication
+    ...  HTTPS server has incorrect cert with wrong correct SAN-s. DFC has turned on hostname verification option.
+    ...  DFC verifies HTTPS server host name against SAN-s and closes connection.
+    Change DFC httpsHostnameVerify configuration in Consul   true
+    Uploading PM Files to xNF HTTPS Server      https-server-wrong-sans
+    Sending File Ready Event to VES Collector Over VES Client   https-server-wrong-sans
+    Wait Until Keyword Succeeds         60 sec               5 sec    Check DFC logs  ${DFC_ERROR_GREP_COMMAND_SANS}
 
-Changing SFTP Server RSA Key
-    [Tags]                            5gbulkpm_checking_sftp_rsa_key
-    ${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
 
-Uploading PM Files to xNF SFTP Server After SFTP Server RSA Key Changed
-    [Tags]                              5gbulkpm_checking_sftp_rsa_key
-    ${pm_file}=  Upload PM Files to xNF SFTP Server  ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]}  ${BULK_PM_MODE}
-    Set Global Variable  ${PM_FILE}  ${pm_file}
+HTTPS Server based bulk PM test (wrong server certificate - wrong SANs), successful validation on DFC side due to turned off host checking
+    [Tags]                              5gbulkpm                           5gbulkpm_https
+    [Documentation]
+    ...  This test case triggers successful bulk pm upload from HTTPS server using CMPv2 Certificate-based authentication
+    ...  HTTPS server has incorrect cert with wrong correct SAN-s. DFC has turned off hostname verification option.
+    ...  DFC does not verify HTTPS server host name against SAN-s and downloads pm file from HTTPS server.
+    Change DFC httpsHostnameVerify configuration in Consul   false
+    Uploading PM Files to xNF HTTPS Server      https-server-wrong-sans
+    Sending File Ready Event to VES Collector Over VES Client   https-server-wrong-sans
+    Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
 
-Sending File Ready Event to VES Collector After SFTP Server RSA Key Changed
-    [Tags]                              5gbulkpm_checking_sftp_rsa_key
-    Send File Ready Event to VES Collector  ${PM_FILE}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_TYPE"]}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_VERSION"]}
 
-Checking DFC Logs After SFTP Server RSA Key Changed
-    [Tags]                              5gbulkpm_checking_sftp_rsa_key
-    Wait Until Keyword Succeeds         5 min  30 sec            Check Given Print In DFC LOG  ${CHECK_DFC_LOGS}