diff options
Diffstat (limited to 'robot')
-rw-r--r-- | robot/assets/cmpv2/k8s-pnf-simulator.yaml | 10 | ||||
-rw-r--r-- | robot/assets/templates/dfc/consul.jinja | 31 | ||||
-rw-r--r-- | robot/assets/templates/dfc/notification.jinja | 34 | ||||
-rw-r--r-- | robot/assets/usecases/5gbulkpm/k8s-https.yaml | 78 | ||||
-rw-r--r-- | robot/resources/dcae/deployment.robot | 10 | ||||
-rw-r--r-- | robot/resources/usecases/5gbulkpm_interface.robot | 431 | ||||
-rw-r--r-- | robot/testsuites/usecases/5gbulkpm.robot | 249 |
7 files changed, 585 insertions, 258 deletions
diff --git a/robot/assets/cmpv2/k8s-pnf-simulator.yaml b/robot/assets/cmpv2/k8s-pnf-simulator.yaml index 1916ba95..89e838b9 100644 --- a/robot/assets/cmpv2/k8s-pnf-simulator.yaml +++ b/robot/assets/cmpv2/k8s-pnf-simulator.yaml @@ -33,6 +33,12 @@ inputs: type: boolean description: Flag to indicate external tls enable/disable. default: true + service_component_type: + type: string + default: "pnf-simulator" + service_component_name_override: + type: string + default: "pnf-simulator" node_templates: pnf-simulator: type: dcae.nodes.ContainerizedServiceComponent @@ -45,8 +51,8 @@ node_templates: ports: - '5000:0' properties: - service_component_type: pnf-simulator - service_component_name_override: pnf-simulator + service_component_type: { get_input: service_component_type } + service_component_name_override: { get_input: service_component_name_override } image: { get_input: tag_version } replicas: { get_input: replicas } always_pull_image: true diff --git a/robot/assets/templates/dfc/consul.jinja b/robot/assets/templates/dfc/consul.jinja new file mode 100644 index 00000000..f630f976 --- /dev/null +++ b/robot/assets/templates/dfc/consul.jinja @@ -0,0 +1,31 @@ +{ + "service_calls": [], + "streams_publishes": { + "PM_MEAS_FILES": { + "dmaap_info": "<<feed0>>", + "type": "data_router" + } + }, + "dmaap.certificateConfig.keyCert": "/opt/app/datafile/etc/cert/cert.p12", + "dmaap.certificateConfig.keyPasswordPath": "/opt/app/datafile/etc/cert/p12.pass", + "dmaap.certificateConfig.trustedCa": "/opt/app/datafile/etc/cert/trust.jks", + "dmaap.certificateConfig.trustedCaPasswordPath": "/opt/app/datafile/etc/cert/trust.pass", + "dmaap.security.enableDmaapCertAuth": true, + "dmaap.certificateConfig.httpsHostnameVerify": {{httpsHostnameVerify}}, + "dmaap.security.keyStorePasswordPath": "/opt/app/datafile/etc/cert/jks.pass", + "dmaap.security.keyStorePath": "/opt/app/datafile/etc/cert/cert.jks", + "dmaap.security.trustStorePasswordPath": "/opt/app/datafile/etc/cert/trust.pass", + "dmaap.security.trustStorePath": "/opt/app/datafile/etc/cert/trust.jks", + "dmaap.dmaapConsumerConfiguration.consumerGroup": "OpenDcae-c12", + "dmaap.dmaapConsumerConfiguration.consumerId": "C12", + "dmaap.dmaapConsumerConfiguration.timeoutMs": -1, + "sftp.security.strictHostKeyChecking": true, + "streams_subscribes": { + "dmaap_subscriber": { + "type": "message_router", + "dmaap_info": { + "topic_url": "https://message-router:3905/events/unauthenticated.VES_NOTIFICATION_OUTPUT" + } + } + } +}
\ No newline at end of file diff --git a/robot/assets/templates/dfc/notification.jinja b/robot/assets/templates/dfc/notification.jinja new file mode 100644 index 00000000..83396c29 --- /dev/null +++ b/robot/assets/templates/dfc/notification.jinja @@ -0,0 +1,34 @@ +{ + "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": "NOK6061ZW3", + "sequence": 0, + "sourceName": "NOK6061ZW3", + "startEpochMicrosec": 8745745764578, + "timeZoneOffset": "UTC+05.30" + }, + "notificationFields": { + "changeIdentifier": "PM_MEAS_FILES", + "changeType": "FileReady", + "notificationFieldsVersion": "2.0", + "arrayOfNamedHashMap": [ + { + "name": "{{pm_file}}", + "hashMap": { + "location": "https://{{https_server_host}}:443/{{pm_file}}", + "compression": "gzip", + "fileFormatType": "{{fileFormatType}}", + "fileFormatVersion": "{{fileFormatVersion}}" + } + } + ] + } + } +}
\ No newline at end of file diff --git a/robot/assets/usecases/5gbulkpm/k8s-https.yaml b/robot/assets/usecases/5gbulkpm/k8s-https.yaml new file mode 100644 index 00000000..ac1d69a1 --- /dev/null +++ b/robot/assets/usecases/5gbulkpm/k8s-https.yaml @@ -0,0 +1,78 @@ +tosca_definitions_version: cloudify_dsl_1_3 +imports: + - 'http://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml' + - 'plugin:k8splugin?version=>=3.4.2,<4.0.0' +inputs: + tag_version: + type: string + description: Docker image to be used + default: 'nexus3.onap.org:10001/onap/org.onap.integration.nfsimulator.pmhttpsserver:latest' + replicas: + type: integer + description: Number of instances + default: 1 + external_cert_cert_type: + type: string + description: Output type + default: 'PEM' + external_cert_ca_name: + type: string + description: Name of Certificate Authority configured on CertService side. + default: 'RA' + external_cert_common_name: + type: string + description: Common name which should be present in certificate. + default: 'https-server' + external_cert_sans: + type: string + description: 'List of Subject Alternative Names (SANs) which should be present + in certificate. Delimiter - , Should contain common_name value and other FQDNs + under which given component is accessible.' + default: 'https-server' + external_cert_use_external_tls: + type: boolean + description: Flag to indicate external tls enable/disable. + default: true + service_component_type: + type: string + default: "https-server" + service_component_name_override: + type: string + default: "https-server" + enable_tls: + type: boolean + default: false +node_templates: + httpsserver: + type: dcae.nodes.ContainerizedServiceComponent + interfaces: + cloudify.interfaces.lifecycle: + start: + inputs: + ports: + - '80:0' + - '8080:0' + - '443:0' + properties: + service_component_type: { get_input: service_component_type } + service_component_name_override: { get_input: service_component_name_override } + image: { get_input: tag_version } + replicas: { get_input: replicas } + always_pull_image: true + tls_info: + cert_directory: '/etc/apache2/certs/' + use_tls: + get_input: enable_tls + external_cert: + external_cert_directory: '/etc/apache2/certs/' + use_external_tls: + get_input: external_cert_use_external_tls + cert_type: + get_input: external_cert_cert_type + ca_name: + get_input: external_cert_ca_name + external_certificate_parameters: + common_name: + get_input: external_cert_common_name + sans: + get_input: external_cert_sans diff --git a/robot/resources/dcae/deployment.robot b/robot/resources/dcae/deployment.robot index 30a5efce..4c8098cd 100644 --- a/robot/resources/dcae/deployment.robot +++ b/robot/resources/dcae/deployment.robot @@ -10,7 +10,7 @@ ${DEPLOYMENT_ENDPOINT} dcae-deployments *** Keywords *** Deploy Service - [Arguments] ${inputs} ${deployment_name} ${wait_time}=5 minute + [Arguments] ${inputs} ${deployment_name} ${wait_time}=5 minute ${check_deployment_status}=true Disable Warnings ${headers}= Create Dictionary content-type=application/json ${deployment_data}= Set Variable ${inputs} @@ -18,7 +18,12 @@ Deploy Service ${resp}= Put Request deployment_session /${DEPLOYMENT_ENDPOINT}/${deployment_name} data=${deployment_data} headers=${headers} ${operationLink} Set Variable ${resp.json().get('links').get('status')} ${operationId} Fetch From Right ${operationLink} / - Wait Until Keyword Succeeds ${wait_time} 20 sec Deployment Status ${deployment_name} ${operationId} + Run Keyword If "${check_deployment_status}"=="true" Check Deployment Status ${deployment_name} ${operationId} ${wait_time} + [Return] ${operationId} + +Check Deployment Status + [Arguments] ${deployment_name} ${operationId} ${wait_time} + Wait Until Keyword Succeeds ${wait_time} 20 sec Deployment Status ${deployment_name} ${operationId} Deployment Status [Arguments] ${deployment_name} ${operationId} @@ -27,6 +32,7 @@ Deployment Status ${resp}= Get Request deployment_session /${DEPLOYMENT_ENDPOINT}/${deployment_name}/operation/${operationId} ${status} Set Variable ${resp.json().get('status')} Should Be Equal As Strings ${status} succeeded + [Return] ${status} Undeploy Service [Arguments] ${deployment_name} diff --git a/robot/resources/usecases/5gbulkpm_interface.robot b/robot/resources/usecases/5gbulkpm_interface.robot index 0818c9bb..0dfd804b 100644 --- a/robot/resources/usecases/5gbulkpm_interface.robot +++ b/robot/resources/usecases/5gbulkpm_interface.robot @@ -4,6 +4,11 @@ Library RequestsLibrary 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} @@ -12,20 +17,40 @@ ${DR_ENDPOINT} ${GLOBAL_DMAAP_DR_PROV_SERVE ${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 +${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 @@ -34,49 +59,47 @@ 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} @@ -89,16 +112,76 @@ Topic Validate ${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 + Undeploy Service sftpserver + Undeploy Service ${serviceTypeId-Sftp} + Undeploy Service datafile + Undeploy Service pmmapper + Undeploy Service mongo-dep + Undeploy Service ves-rest-client-dep + Undeploy Service ves-collector-for-bulkpm-over-https + Delete Blueprint From Inventory ${serviceTypeIdMongo} + Delete Blueprint From Inventory ${serviceTypeIdVesClient} + Undeploy Service https-server-dep + Delete Blueprint From Inventory ${serviceTypeId-Https} + Undeploy Service https-server-wrong-sans-dep + Delete Blueprint From Inventory ${serviceTypeId-Https-wrong-sans} + +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} @@ -109,6 +192,23 @@ Send File Ready Event to VES Collector ${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 @@ -119,29 +219,228 @@ Upload PM Files to xNF SFTP Server 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_BLUEPRINT_PATH} mongo + ${serviceTypeIdVesClient} Load Blueprint To Inventory ${PNF_SIMULATOR_BLUEPRINT_PATH} ves-rest-client + Set Suite Variable ${serviceTypeIdMongo} + Set Suite Variable ${serviceTypeIdVesClient} + ${deployment_data}= Set Variable {"serviceTypeId": "${serviceTypeIdMongo}"} + Deploy Service ${deployment_data} mongo-dep 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 + diff --git a/robot/testsuites/usecases/5gbulkpm.robot b/robot/testsuites/usecases/5gbulkpm.robot index 483dd03a..21603dc0 100644 --- a/robot/testsuites/usecases/5gbulkpm.robot +++ b/robot/testsuites/usecases/5gbulkpm.robot @@ -12,204 +12,77 @@ 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 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} |