2 Documentation The main interface for interacting with 5G Bulkpm.
3 Library RequestsLibrary
4 Library OperatingSystem
7 Resource ../dmaap/mr_interface.robot
8 Resource ../dmaap/dr_interface.robot
9 Resource ../dmaap/bc_interface.robot
10 Resource ../consul_interface.robot
11 Resource ../chart_museum.robot
14 ${INVENTORY_SERVER} ${GLOBAL_INVENTORY_SERVER_PROTOCOL}://${GLOBAL_INVENTORY_SERVER_NAME}:${GLOBAL_INVENTORY_SERVER_PORT}
15 ${DEPLOYMENT_SERVER} ${GLOBAL_DEPLOYMENT_HANDLER_SERVER_PROTOCOL}://${GLOBAL_DEPLOYMENT_HANDLER_SERVER_NAME}:${GLOBAL_DEPLOYMENT_HANDLER_SERVER_PORT}
16 ${DR_ENDPOINT} ${GLOBAL_DMAAP_DR_PROV_SERVER_PROTOCOL}://${GLOBAL_INJECTED_DMAAP_DR_PROV_IP_ADDR}:${GLOBAL_DMAAP_DR_PROV_SERVER_PORT}
17 ${DMAAP_BC_SERVER} ${GLOBAL_BC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_BC_IP_ADDR}:${GLOBAL_BC_HTTPS_SERVER_PORT}
18 ${VES_HEALTH_CHECK_PATH} ${GLOBAL_DCAE_VES_HTTPS_PROTOCOL}://${GLOBAL_INJECTED_DCAE_VES_HOST}:${GLOBAL_DCAE_VES_HTTPS_SERVER_PORT}
19 ${MR_PUBLISH_TEMPLATE} mr/mr_publish.jinja
20 ${INVENTORY_ENDPOINT} /dcae-service-types
21 ${XNF_SFTP_BLUEPRINT_PATH} ${EXECDIR}/robot/assets/usecases/5gbulkpm/k8s-sftp.yaml
22 ${XNF_HTTPS_BLUEPRINT_PATH} ${EXECDIR}/robot/assets/usecases/5gbulkpm/k8s-https.yaml
23 ${BLUEPRINT_TEMPLATE_PATH} ${EXECDIR}/robot/assets/usecases/5gbulkpm/blueprintTemplate.json
24 ${DEPLOYMENT_ENDPOINT} dcae-deployments
25 ${MR_TOPIC_CHECK_PATH} /topics
26 ${DR_SUB_CHECK_PATH} /internal/prov
27 ${MR_TOPIC_URL_PATH} /events/unauthenticated.PERFORMANCE_MEASUREMENTS/CG1/C1
28 ${MR_TOPIC_URL_PATH_FOR_POST} /events/unauthenticated.PERFORMANCE_MEASUREMENTS
29 ${DMAAP_BC_MR_CLIENT_PATH} /webapi/mr_clients
30 ${DMAAP_BC_MR_CLUSTER_PATH} /webapi/mr_clusters
31 ${PMMAPPER_HEALTH_CHECK_PATH} /healthcheck
32 ${JSON_DATA_FILE} ${EXECDIR}/robot/assets/usecases/5gbulkpm/Notification.json
33 ${VES_LISTENER_PATH} /eventListener/v7
34 ${PMMAPPER_SUB_ROLE_DATA} ${EXECDIR}/robot/assets/usecases/5gbulkpm/sub.json
35 ${PMMAPPER_MR_CLUSTER_DATA} ${EXECDIR}/robot/assets/usecases/5gbulkpm/mr_clusters.json
36 ${NEXUS3} ${GLOBAL_INJECTED_NEXUS_DOCKER_REPO}
37 ${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
38 ${CHECK_ENV_SET} kubectl set env pod/$(kubectl get pod -n onap | grep datafile | awk '{print $1}') --list -n onap
39 ${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
40 ${CHECK_DFC_LOGS} kubectl logs $(kubectl get pod -n onap | grep datafile | awk '{print $1}') -n onap --tail=10
41 ${CHECK_ALL_DFC_LOGS} kubectl logs $(kubectl get pod -n onap | grep datafile | awk '{print $1}') -n onap --all-containers
42 ${CHECK_ALL_PMMAPPER_LOGS} kubectl logs $(kubectl get pod -n onap | grep pm-mapper | awk '{print $1}') -n onap --all-containers
43 ${EXPECTED_PRINT} StrictHostKeyChecking is enabled but environment variable KNOWN_HOSTS_FILE_PATH is not set or points to not existing file
44 ${MONGO_BLUEPRINT_PATH} ${EXECDIR}/robot/assets/cmpv2/k8s-mongo.yaml
45 ${PNF_SIMULATOR_BLUEPRINT_PATH} ${EXECDIR}/robot/assets/cmpv2/k8s-pnf-simulator.yaml
46 ${MONGO_VES_CLIENT_BLUEPRINT_PATH} ${EXECDIR}/robot/assets/cmpv2/k8s-mongo-ves-client.yaml
47 ${VES_CLIENT_BLUEPRINT_PATH} ${EXECDIR}/robot/assets/cmpv2/k8s-ves-client.yaml
48 ${VES_INPUTS} deployment/VesTlsCmpv2Inputs.jinja
49 ${pm_notification_event} dfc/notification.jinja
50 ${consul_change_event} dfc/consul.jinja
51 ${ves_client_single_event}= ves/pnf_simulator_single_event.jinja
52 ${SFTP_HELM_CHARTS} ${EXECDIR}/robot/assets/helm/sftp
53 ${HTTPS_SERVER_HELM_CHARTS} ${EXECDIR}/robot/assets/helm/pm-https-server
54 ${HELM_RELEASE} kubectl --namespace onap get pods | sed 's/ .*//' | grep robot | sed 's/-.*//'
60 ... This keyword gathers all events from message router topic and validates if in recived data is present an expected string: "${expected_pm_str}" .
61 [Arguments] ${expected_pm_str}
62 ${timestamp}= Get Time epoch
63 ${resp}= Run MR Auth Get Request ${MR_TOPIC_URL_PATH} ${GLOBAL_DCAE_USERNAME} ${GLOBAL_DCAE_PASSWORD}
64 Should Contain ${resp.text} ${expected_pm_str}
68 ${timestamp}= Get Current Date
69 ${dict}= Create Dictionary timestamp=${timestamp}
70 Templating.Create Environment mr ${GLOBAL_TEMPLATE_FOLDER}
71 ${data}= Templating.Apply Template mr ${MR_PUBLISH_TEMPLATE} ${dict}
72 ${resp}= Run MR Auth Post Request (User And Pass) ${MR_TOPIC_URL_PATH_FOR_POST} ${GLOBAL_DCAE_USERNAME} ${GLOBAL_DCAE_PASSWORD} ${data}
73 Should Be Equal As Strings ${resp.status_code} 200
74 ${resp}= Run MR Auth Get Request ${MR_TOPIC_URL_PATH} ${GLOBAL_DCAE_USERNAME} ${GLOBAL_DCAE_PASSWORD}
75 Should Contain ${resp.text} ${value}
77 Send File Ready Event to VES Collector and Deploy all DCAE Applications
78 [Arguments] ${pm_file} ${file_format_type} ${file_format_version}
80 Setting Global Variables
81 Send File Ready Event to VES Collector ${pm_file} ${file_format_type} ${file_format_version}
82 Add chart repository chart-museum http://chart-museum:80 onapinitializer demo123456!
83 Log To Console Deploying Data File Collector
84 Deploying Data File Collector
85 Log To Console Deploying 3GPP PM Mapper
86 Deploying 3GPP PM Mapper
87 Log To Console Deploying SFTP Server As xNF
88 Deploying SFTP Server As xNF
89 Log To Console Deploying HTTPS Server with correct CMPv2 certificates as xNF
90 Deploying HTTPS server with correct certificates
91 Log To Console Deploying HTTPS Server with wrong subject alternatives in CMPv2 certificates as xNF
92 Deploying HTTPS server with wrong certificates - wrong SAN-s
94 DR PM Mapper Subscriber Check
98 Get all logs from PM Mapper
99 Get all logs from Data File Collector
100 Uninstall helm charts ${ONAP_HELM_RELEASE}-dcae-datafile-collector
101 Uninstall helm charts ${ONAP_HELM_RELEASE}-dcae-pm-mapper
102 Uninstall helm charts ${ONAP_HELM_RELEASE}-sftp
103 Uninstall helm charts ${ONAP_HELM_RELEASE}-pm-https-server-correct-sans
104 Uninstall helm charts ${ONAP_HELM_RELEASE}-pm-https-server-wrong-sans
106 Setting Global Variables
107 ${test_variables} = Create Dictionary
108 Set To Dictionary ${test_variables} FILE_FORMAT_TYPE=org.3GPP.32.435#measCollec
109 ... FILE_FORMAT_VERSION=V10
110 ... PM_FILE_PATH=${EXECDIR}/robot/assets/usecases/5gbulkpm/pmfiles/A20181002.0000-1000-0015-1000_5G.xml.gz
111 ... EXPECTED_PM_STR=perf3gpp_RnNode-Ericsson_pmMeasResult
112 Set Global Variable ${GLOBAL_TEST_VARIABLES} ${test_variables}
113 ${command_output} = Run And Return Rc And Output ${HELM_RELEASE}
114 Should Be Equal As Integers ${command_output[0]} 0
115 Set Global Variable ${ONAP_HELM_RELEASE} ${command_output[1]}
117 Send File Ready Event to VES Collector
118 [Arguments] ${pm_file} ${file_format_type} ${file_format_version}
120 ${headers}= Create Dictionary content-type=application/json
121 ${fileready}= OperatingSystem.Get File ${JSON_DATA_FILE}
122 ${auth}= Create List ${GLOBAL_DCAE_VES_USERNAME} ${GLOBAL_DCAE_VES_PASSWORD}
123 ${session}= Create Session ves ${VES_HEALTH_CHECK_PATH} auth=${auth}
124 ${resp}= Post Request ves ${VES_LISTENER_PATH} data=${fileready} headers=${headers}
125 Should Be Equal As Strings ${resp.status_code} 202
126 ${VES_FILE_READY_NOTIFICATION} Set Variable {"event":{"commonEventHeader":{"version":"4.0.1","vesEventListenerVersion":"7.0.1","domain":"notification","eventName":"Noti_RnNode-Ericsson_FileReady","eventId":"FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1","lastEpochMicrosec":8745745764578,"priority":"Normal","reportingEntityName":"otenb5309","sequence":0,"sourceName":"oteNB5309","startEpochMicrosec":8745745764578,"timeZoneOffset":"UTC+05.30"},"notificationFields":{"changeIdentifier":"PM_MEAS_FILES","changeType":"FileReady","notificationFieldsVersion":"2.0","arrayOfNamedHashMap":[{"name":"${pm_file}","hashMap":{"location":"sftp://bulkpm:bulkpm@${ONAP_HELM_RELEASE}-sftp:22/upload/${pm_file}","compression":"gzip","fileFormatType":"${file_format_type}","fileFormatVersion":"${file_format_version}"}}]}}}
127 ${resp}= Post Request ves ${VES_LISTENER_PATH} data=${VES_FILE_READY_NOTIFICATION} headers=${headers}
128 Should Be Equal As Strings ${resp.status_code} 202
130 Upload PM Files to xNF SFTP Server
131 [Arguments] ${pm_file_path}
132 Open Connection ${ONAP_HELM_RELEASE}-sftp
134 ${epoch}= Get Current Date result_format=epoch
135 ${pm_file}= Set Variable A${epoch}.xml.gz
136 Put File ${pm_file_path} upload/${pm_file}
139 Check Given Print In DFC Log
140 [Arguments] ${check_dfc_logs}
141 ${dfc_logs}= Run Given Command On DFC Container ${CHECK_DFC_LOGS}
142 Should Contain ${dfc_logs} HostKey has been changed
144 Run Given Command On DFC Container
145 [Arguments] ${user_command}
146 ${run_command} = Run And Return Rc And Output ${user_command}
147 Should Be Equal As Integers ${run_command[0]} 0
148 ${command_output} = Set Variable ${run_command[1]}
149 ${regexp_matches} = Get Regexp Matches ${command_output} .*(\\s|\\[)+(.+-datafile-collector).* 2
150 ${matches_length} = Get length ${regexp_matches}
151 ${log} = Run Keyword If "${matches_length}"!='0' Get DFC log by container name ${command_output} ${regexp_matches}
152 ... ELSE Set Variable ${command_output}
155 Get DFC log by container name
156 [Arguments] ${command_output} ${regexp_matches}
157 ${dfc_container_name} = Set Variable ${regexp_matches[0]}
158 ${new_command} = Set Variable ${user_command} ${dfc_container_name}
159 ${command_output} = Run And Return Rc And Output ${new_command}
160 Should Be Equal As Integers ${run_command[0]} 0
161 ${log} = Set Variable ${run_command[1]}
164 Check Known Hosts In Env
165 [Arguments] ${CHECK_KNOWN_HOSTS}
166 ${check} = Run And Return Rc And Output ${CHECK_KNOWN_HOSTS}
167 Should Be Equal As Integers ${check[0]} 0
168 ${env} = Set Variable ${check[1]}
169 ${string_matches} = Get Lines Containing String ${env} KNOWN_HOSTS_FILE_PATH=/home/datafile/.ssh/known_host case_insensitive=True
170 ${output} = Should Not Be Empty ${string_matches}
173 Deploying Data File Collector
174 Install helm charts chart-museum dcae-datafile-collector ${ONAP_HELM_RELEASE}-dcae-datafile-collector 6m --set useCmpv2Certificates=true --set global.cmpv2Enabled=true --set masterPasswordOverride=test --set global.centralizedLoggingEnabled=false --debug
176 Deploying 3GPP PM Mapper
177 ${override} = Set Variable --set global.centralizedLoggingEnabled=false --debug
178 Install helm charts chart-museum dcae-pm-mapper ${ONAP_HELM_RELEASE}-dcae-pm-mapper 6m set_values_override=${override}
180 Deploying SFTP Server As xNF
181 ${override} = Set Variable --set fullnameOverride=${ONAP_HELM_RELEASE}-sftp --debug
182 Install helm charts from folder ${SFTP_HELM_CHARTS} ${ONAP_HELM_RELEASE}-sftp 6m set_values_override=${override}
184 Deploying HTTPS server with correct certificates
185 ${name} = Set Variable ${ONAP_HELM_RELEASE}-pm-https-server-correct-sans
186 ${override} = Set Variable --set fullnameOverride=${name} --set nameOverride=${name} --set certificates.name=${name} --set certificates.commonName=${name} --set certificates.dnsNames={${name}} --debug
187 Install helm charts from folder ${HTTPS_SERVER_HELM_CHARTS} ${name} set_values_override=${override}
189 Deploying HTTPS server with wrong certificates - wrong SAN-s
190 ${name} = Set Variable ${ONAP_HELM_RELEASE}-pm-https-server-wrong-sans
191 ${override} = Set Variable --set fullnameOverride=${name} --set nameOverride=${name} --set certificates.name=${name} --set certificates.commonName=wrong-sans-1 --set certificates.dnsNames={wrong-sans-2} --debug
192 Install helm charts from folder ${HTTPS_SERVER_HELM_CHARTS} ${name} set_values_override=${override}
194 DR Bulk PM Feed Check
195 ${resp}= Run DR Get Request ${DR_SUB_CHECK_PATH}
196 Should Contain ${resp.text} bulk_pm_feed
198 DR PM Mapper Subscriber Check
199 ${resp}= Run DR Get Request ${DR_SUB_CHECK_PATH}
200 Should Contain ${resp.text} http://dcae-pm-mapper:8081/delivery
202 Setting KNOWN_HOSTS_FILE_PATH Environment Variable in DFC
203 ${rc}= Run and Return RC ${SET_KNOWN_HOSTS_FILE_PATH}
204 Should Be Equal As Integers ${rc} 0
205 Wait Until Keyword Succeeds 7 min 10s Check Known Hosts In Env ${CHECK_ENV_SET}
206 ${GET_RSA_KEY}= Set Variable kubectl exec $(kubectl get pod -n onap | grep ${ONAP_HELM_RELEASE}-sftp | awk '{print $1}') -n onap -- ssh-keyscan -t rsa ${ONAP_HELM_RELEASE}-sftp > /tmp/known_hosts
207 ${rc}= Run and Return RC ${GET_RSA_KEY}
208 Should Be Equal As Integers ${rc} 0
209 ${rc}= Run and Return RC ${COPY_RSA_KEY}
210 Should Be Equal As Integers ${rc} 0
212 Uploading PM Files to xNF SFTP Server
213 ${pm_file}= Upload PM Files to xNF SFTP Server ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]}
214 Set Global Variable ${PM_FILE} ${pm_file}
216 Sending File Ready Event to VES Collector
217 Send File Ready Event to VES Collector ${PM_FILE} ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_TYPE"]} ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_VERSION"]}
219 Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
220 Wait Until Keyword Succeeds 2 min 5 sec xNF PM File Validate ${GLOBAL_TEST_VARIABLES["EXPECTED_PM_STR"]}
222 Changing SFTP Server RSA Key in DFC
223 ${get_known_hosts_file}= OperatingSystem.Get File /tmp/known_hosts
224 ${change_rsa_key}= Replace String ${get_known_hosts_file} A a
225 Create File /tmp/known_hosts ${change_rsa_key}
226 ${rc}= Run and Return RC ${COPY_RSA_KEY}
227 Should Be Equal As Integers ${rc} 0
229 Checking DFC Logs After KNOWN_HOSTS_FILE_PATH Env Variable Added
230 ${dfc_logs}= Run Given Command On DFC Container ${CHECK_DFC_LOGS}
231 Should Not Contain ${dfc_logs} ${EXPECTED_PRINT}
233 Get all logs from PM Mapper
234 ${pmmapper_logs}= Check logs ${CHECK_ALL_PMMAPPER_LOGS}
237 Get all logs from Data File Collector
238 ${pmmapper_logs}= Check logs ${CHECK_ALL_DFC_LOGS}
241 Checking DFC Logs After SFTP Server RSA Key Changed
242 Wait Until Keyword Succeeds 5 min 30 sec Check Given Print In DFC LOG ${CHECK_DFC_LOGS}
245 [Arguments] ${LOG_CHECK}
246 ${rc} = Run And Return Rc And Output ${LOG_CHECK}
247 Should Be Equal As Integers ${rc[0]} 0
250 Change DFC httpsHostnameVerify configuration in Consul
251 [Documentation] Changes DFC httpsHostnameVerify config.
252 [Arguments] ${httpsHostnameVerify}
253 ${httpsHostnameVerify_conf} Create Dictionary httpsHostnameVerify=${httpsHostnameVerify}
254 Templating.Create Environment pm ${GLOBAL_TEMPLATE_FOLDER}
255 ${event}= Templating.Apply Template pm ${consul_change_event} ${httpsHostnameVerify_conf}
256 ${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}'
257 Should Be Equal As Integers ${rc} 0
258 ${resp}= Run Consul Put Request /v1/kv/${container_name}-datafile-collector?raw=1 ${event}
259 Should Be Equal As Strings ${resp.status_code} 200
260 ${rc} = Run and Return RC kubectl delete pods -n onap $(kubectl get pods -n onap | grep datafile-collector | awk '{print $1}' | grep -v NAME)
261 Should Be Equal As Integers ${rc} 0
262 Wait Until Keyword Succeeds 360 sec 15 sec Check logs kubectl logs -n onap $(kubectl get pods -n onap | grep datafile-collector | awk '{print $1}' | grep -v NAME) ${container_name}-datafile-collector
264 Sending File Ready Event to VES Collector for HTTPS Server
265 [Arguments] ${https-server_host}
266 Send File Ready Event to VES Collector for HTTPS Server ${PM_FILE} ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_TYPE"]} ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_VERSION"]} ${https-server_host}
268 Send File Ready Event to VES Collector for HTTPS Server
269 [Arguments] ${pm_file} ${file_format_type} ${file_format_version} ${https_server_host}
271 ${pm_event} Create Dictionary https_server_host=${https_server_host} pm_file=${pm_file} fileFormatType=${file_format_type} fileFormatVersion=${file_format_version}
272 Templating.Create Environment pm ${GLOBAL_TEMPLATE_FOLDER}
273 ${VES_FILE_READY_NOTIFICATION}= Templating.Apply Template pm ${pm_notification_event} ${pm_event}
274 ${headers}= Create Dictionary content-type=application/json
275 ${auth}= Create List ${GLOBAL_DCAE_VES_USERNAME} ${GLOBAL_DCAE_VES_PASSWORD}
276 ${session}= Create Session ves ${VES_HEALTH_CHECK_PATH} auth=${auth}
277 ${resp}= Post Request ves ${VES_LISTENER_PATH} data=${VES_FILE_READY_NOTIFICATION} headers=${headers}
278 Should Be Equal As Strings ${resp.status_code} 202
281 Uploading PM Files to xNF HTTPS Server
282 [Arguments] ${https-server_host}
283 ${pm_file}= Upload PM Files to xNF HTTPS Server ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]} ${https-server_host}
284 Set Global Variable ${PM_FILE} ${pm_file}
286 Upload PM Files to xNF HTTPS Server
287 [Arguments] ${pm_file_path} ${https_server}
288 ${epoch}= Get Current Date result_format=epoch
289 ${pm_file} = Set Variable A${epoch}.xml.gz
290 Copy File ${pm_file_path} tmp/${pm_file}
291 ${fileData}= Get Binary File tmp/${pm_file}
292 ${file_part}= Create List ${pm_file} ${fileData} application/octet-stream
293 ${fileParts}= Create Dictionary
294 Set to Dictionary ${fileParts} uploaded_file=${file_part}
295 ${auth}= Create List demo demo123456!
296 ${session}= Create Session https http://${https_server}:80 auth=${auth}
297 ${resp}= Post Request https /upload.php files=${fileParts}
298 Should Be Equal As Strings ${resp.status_code} 200