[ROBOT] Clean up 5gbulkpm
[testsuite.git] / robot / resources / usecases / 5gbulkpm_helm_interface.robot
1 *** Settings ***
2 Documentation     The main interface for interacting with 5G Bulkpm.
3 Library               RequestsLibrary
4 Library           OperatingSystem
5 Library           String
6 Library           JSONLibrary
7 Resource          ../dmaap/dr_interface.robot
8 Resource          ../consul_interface.robot
9 Resource          ../chart_museum.robot
10 Resource          ../strimzi_kafka.robot
11
12 *** Variables ***
13 ${DR_ENDPOINT}                                      ${GLOBAL_DMAAP_DR_PROV_SERVER_PROTOCOL}://${GLOBAL_INJECTED_DMAAP_DR_PROV_IP_ADDR}:${GLOBAL_DMAAP_DR_PROV_SERVER_PORT}
14 ${VES_HEALTH_CHECK_PATH}                            ${GLOBAL_DCAE_VES_HTTPS_PROTOCOL}://${GLOBAL_INJECTED_DCAE_VES_HOST}:${GLOBAL_DCAE_VES_HTTPS_SERVER_PORT}
15 ${DR_SUB_CHECK_PATH}                                /internal/prov
16 ${JSON_DATA_FILE}                                   ${EXECDIR}/robot/assets/usecases/5gbulkpm/Notification.json
17 ${VES_LISTENER_PATH}                                /eventListener/v7
18 ${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
19 ${DR_NODE_FECTH_PROV}                               kubectl exec $(kubectl get pods -n onap | grep dmaap-dr-node | awk '{print $1}' | grep -v NAME) -n onap -- curl http://localhost:8080/internal/fetchProv
20 ${CHECK_ENV_SET}                                    kubectl set env pod/$(kubectl get pod -n onap | grep datafile | awk '{print $1}') -c dcae-datafile-collector --list -n onap
21 ${COPY_RSA_KEY}                                     kubectl cp /tmp/known_hosts $(kubectl get pod -n onap | grep datafile | awk '{print $1}'):/home/datafile/.ssh/known_hosts -c dcae-datafile-collector -n onap
22 ${CHECK_DFC_LOGS}                                   kubectl logs $(kubectl get pod -n onap | grep datafile | awk '{print $1}') -c dcae-datafile-collector -n onap --tail=10
23 ${CHECK_ALL_DFC_LOGS}                               kubectl logs $(kubectl get pod -n onap | grep datafile | awk '{print $1}') -n onap --all-containers
24 ${CHECK_ALL_PMMAPPER_LOGS}                          kubectl logs $(kubectl get pod -n onap | grep pm-mapper | awk '{print $1}') -n onap --all-containers
25 ${EXPECTED_PRINT}                                   StrictHostKeyChecking is enabled but environment variable KNOWN_HOSTS_FILE_PATH is not set or points to not existing file
26 ${pm_notification_event}                            dfc/notification.jinja
27 ${consul_change_event}                              dfc/consul.jinja
28 ${SFTP_HELM_CHARTS}                                 ${EXECDIR}/robot/assets/helm/sftp
29 ${HTTPS_SERVER_HELM_CHARTS}                         ${EXECDIR}/robot/assets/helm/pm-https-server
30 ${HELM_RELEASE}                                     kubectl --namespace onap get pods | sed 's/ .*//' | grep robot | sed 's/-.*//'
31
32 *** Keywords ***
33 xNF PM File Validate
34     [Documentation]
35     ...  This keyword gets the last event from the PM topic and validates if the expected string is present: "${expected_pm_str}" .
36     [Arguments]                 ${expected_pm_str}
37     ${bytes} =  Encode String To Bytes           ${expected_pm_str}          UTF-8
38     ${msg}=  Run Keyword        Get Last Message From Topic    ${GLOBAL_KAFKA_BOOTSTRAP_SERVICE}    unauthenticated.PERFORMANCE_MEASUREMENTS   ${GLOBAL_KAFKA_USER}
39     Should Contain              ${msg}                    ${bytes}
40
41
42 Send File Ready Event to VES Collector and Deploy all DCAE Applications
43     [Arguments]                                 ${pm_file}              ${file_format_type}             ${file_format_version}
44     Disable Warnings
45     Setting Global Variables
46     DR Node Fetch Prov
47     Sleep     10s
48     Send File Ready Event to VES Collector      ${pm_file}              ${file_format_type}             ${file_format_version}
49     Add OOM test chart repository               onap-testing                  https://nexus3.onap.org/repository/onap-helm-testing/
50     Add chart repository                        chart-museum                  http://chart-museum:80      onapinitializer      demo123456!
51     Log To Console                              Deploying SFTP Server As xNF
52     Deploying SFTP Server As xNF
53 #    Log To Console                              Deploying HTTPS Server with correct CMPv2 certificates as xNF
54 #    Deploying HTTPS server with correct certificates
55     DR PM Mapper Subscriber Check
56
57 Usecase Teardown
58     Disable Warnings
59     Get all logs from PM Mapper
60     Get all logs from Data File Collector
61     Uninstall helm charts               ${ONAP_HELM_RELEASE}-sftp
62 #    Uninstall helm charts               ${ONAP_HELM_RELEASE}-pm-https-server-correct-sans
63
64 Setting Global Variables
65     ${test_variables} =  Create Dictionary
66     Set To Dictionary  ${test_variables}   FILE_FORMAT_TYPE=org.3GPP.32.435#measCollec
67     ...                                    FILE_FORMAT_VERSION=V10
68     ...                                    PM_FILE_PATH=${EXECDIR}/robot/assets/usecases/5gbulkpm/pmfiles/A20181002.0000-1000-0015-1000_5G.xml.gz
69     ...                                    EXPECTED_PM_STR=perf3gpp_RnNode-Ericsson_pmMeasResult
70     Set Global Variable   ${GLOBAL_TEST_VARIABLES}  ${test_variables}
71     ${command_output} =                 Run And Return Rc And Output        ${HELM_RELEASE}
72     Should Be Equal As Integers         ${command_output[0]}                0
73     Set Global Variable   ${ONAP_HELM_RELEASE}   ${command_output[1]}
74
75 Send File Ready Event to VES Collector
76     [Arguments]                         ${pm_file}                          ${file_format_type}             ${file_format_version}
77     Disable Warnings
78     ${headers}=                         Create Dictionary                   content-type=application/json
79     ${fileready}=                       OperatingSystem.Get File            ${JSON_DATA_FILE}
80     ${auth}=                            Create List                         ${GLOBAL_DCAE_VES_USERNAME}     ${GLOBAL_DCAE_VES_PASSWORD}
81     ${session}=                         Create Session                      ves                             ${VES_HEALTH_CHECK_PATH}      auth=${auth}
82     ${resp}=                            Post Request                        ves                             ${VES_LISTENER_PATH}          data=${fileready}   headers=${headers}
83     Should Be Equal As Strings          ${resp.status_code}                 202
84     ${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}"}}]}}}
85     ${resp}=                            Post Request                        ves                             ${VES_LISTENER_PATH}          data=${VES_FILE_READY_NOTIFICATION}   headers=${headers}
86     Should Be Equal As Strings          ${resp.status_code}                 202
87
88 Upload PM Files to xNF SFTP Server
89     [Arguments]                         ${pm_file_path}
90     Open Connection                     ${ONAP_HELM_RELEASE}-sftp
91     Login                               bulkpm                             bulkpm
92     ${epoch}=                           Get Current Date                   result_format=epoch
93     ${pm_file}=                         Set Variable                        A${epoch}.xml.gz
94     Put File                            ${pm_file_path}                    upload/${pm_file}
95     [Return]  ${pm_file}
96
97 Check Given Print In DFC Log
98     [Arguments]                         ${check_dfc_logs}
99     ${dfc_logs}=                        Run Given Command On DFC Container                                      ${CHECK_DFC_LOGS}
100     Should Contain                      ${dfc_logs}                                                             HostKey has been changed
101
102 Run Given Command On DFC Container
103     [Arguments]                         ${user_command}
104     ${run_command} =                    Run And Return Rc And Output        ${user_command}
105     Should Be Equal As Integers         ${run_command[0]}                   0
106     ${command_output} =                 Set Variable                        ${run_command[1]}
107     ${regexp_matches} =                 Get Regexp Matches                  ${command_output}                   .*(\\s|\\[)+(.+-datafile-collector).*  2
108     ${matches_length} =                 Get length                          ${regexp_matches}
109     ${log} =                            Run Keyword If   "${matches_length}"!='0'  Get DFC log by container name   ${command_output}  ${regexp_matches}
110                                         ...  ELSE   Set Variable   ${command_output}
111     [Return]                            ${log}
112
113 Get DFC log by container name
114     [Arguments]                         ${command_output}                   ${regexp_matches}
115     ${dfc_container_name} =             Set Variable                        ${regexp_matches[0]}
116     ${new_command} =                    Set Variable                        ${user_command} ${dfc_container_name}
117     ${command_output} =                 Run And Return Rc And Output        ${new_command}
118     Should Be Equal As Integers         ${run_command[0]}                   0
119     ${log} =                            Set Variable                        ${run_command[1]}
120     [Return]                            ${log}
121
122 Check Known Hosts In Env
123     [Arguments]                         ${CHECK_KNOWN_HOSTS}
124     ${check} =                          Run And Return Rc And Output        ${CHECK_KNOWN_HOSTS}
125     Should Be Equal As Integers         ${check[0]}                         0
126     ${env} =                            Set Variable                        ${check[1]}
127     ${string_matches} =                 Get Lines Containing String         ${env}                              KNOWN_HOSTS_FILE_PATH=/home/datafile/.ssh/known_host  case_insensitive=True
128     ${output} =                         Should Not Be Empty                 ${string_matches}
129     [Return]                            ${output}
130
131 Deploying Data File Collector
132     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
133
134 Deploying 3GPP PM Mapper
135     ${override} =                       Set Variable                       --set global.centralizedLoggingEnabled=false --debug
136     Install helm charts                 chart-museum                       dcae-pm-mapper         ${ONAP_HELM_RELEASE}-dcae-pm-mapper             6m   set_values_override=${override}
137
138 Deploying SFTP Server As xNF
139     ${override} =                       Set Variable                       --set fullnameOverride=${ONAP_HELM_RELEASE}-sftp --debug
140     Install helm charts from folder     ${SFTP_HELM_CHARTS}                ${ONAP_HELM_RELEASE}-sftp                 6m  set_values_override=${override}
141
142 Deploying HTTPS server with correct certificates
143     ${name} =                           Set Variable                       ${ONAP_HELM_RELEASE}-pm-https-server-correct-sans
144     ${override} =                       Set Variable                       --set fullnameOverride=${name} --set nameOverride=${name} --set certificates.name=${name} --set certificates.commonName=${name} --set certificates.dnsNames={${name}} --debug
145     Install helm charts from folder     ${HTTPS_SERVER_HELM_CHARTS}        ${name}                 set_values_override=${override}
146
147 Deploying HTTPS server with wrong certificates - wrong SAN-s
148     ${name} =                           Set Variable                       ${ONAP_HELM_RELEASE}-pm-https-server-wrong-sans
149     ${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
150     Install helm charts from folder     ${HTTPS_SERVER_HELM_CHARTS}        ${name}                 set_values_override=${override}
151
152 DR Node Fetch Prov
153     ${rc}=                              Run and Return RC                   ${DR_NODE_FECTH_PROV}
154     Should Be Equal As Integers         ${rc}                               0
155
156
157 DR PM Mapper Subscriber Check
158     ${resp}=                            Run DR Get Request                  ${DR_SUB_CHECK_PATH}
159     Should Contain                      ${resp.text}                        http://dcae-pm-mapper:8081/delivery
160
161 Setting KNOWN_HOSTS_FILE_PATH Environment Variable in DFC
162     ${rc}=                             Run and Return RC                   ${SET_KNOWN_HOSTS_FILE_PATH}
163     Should Be Equal As Integers        ${rc}                               0
164     Wait Until Keyword Succeeds        7 min                               10s               Check Known Hosts In Env             ${CHECK_ENV_SET}
165     ${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
166     ${rc}=                             Run and Return RC                   ${GET_RSA_KEY}
167     Should Be Equal As Integers        ${rc}                               0
168     ${rc}=                             Run and Return RC                   ${COPY_RSA_KEY}
169     Should Be Equal As Integers        ${rc}                               0
170
171 Uploading PM Files to xNF SFTP Server
172     ${pm_file}=                         Upload PM Files to xNF SFTP Server      ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]}
173     Set Global Variable                 ${PM_FILE}                              ${pm_file}
174
175 Sending File Ready Event to VES Collector
176     Send File Ready Event to VES Collector  ${PM_FILE}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_TYPE"]}  ${GLOBAL_TEST_VARIABLES["FILE_FORMAT_VERSION"]}
177
178 Verifying 3GPP Perf VES Content On PERFORMANCE_MEASUREMENTS Topic
179     Wait Until Keyword Succeeds         2 min                            5 sec            xNF PM File Validate   ${GLOBAL_TEST_VARIABLES["EXPECTED_PM_STR"]}
180
181 Changing SFTP Server RSA Key in DFC
182     ${get_known_hosts_file}=          OperatingSystem.Get File  /tmp/known_hosts
183     ${change_rsa_key}=                Replace String            ${get_known_hosts_file}        A  a
184     Create File                       /tmp/known_hosts          ${change_rsa_key}
185     ${rc}=                            Run and Return RC         ${COPY_RSA_KEY}
186     Should Be Equal As Integers       ${rc}                     0
187
188 Checking DFC Logs After KNOWN_HOSTS_FILE_PATH Env Variable Added
189     ${dfc_logs}=                     Run Given Command On DFC Container      ${CHECK_DFC_LOGS}
190     Should Not Contain               ${dfc_logs}                             ${EXPECTED_PRINT}
191
192 Get all logs from PM Mapper
193     ${pmmapper_logs}=                Check logs      ${CHECK_ALL_PMMAPPER_LOGS}
194     Log                              ${pmmapper_logs}
195
196 Get all logs from Data File Collector
197     ${pmmapper_logs}=                Check logs      ${CHECK_ALL_DFC_LOGS}
198     Log                              ${pmmapper_logs}
199
200 Checking DFC Logs After SFTP Server RSA Key Changed
201     Wait Until Keyword Succeeds         5 min  30 sec            Check Given Print In DFC LOG  ${CHECK_DFC_LOGS}
202
203 Check logs
204     [Arguments]  ${LOG_CHECK}
205     ${rc} =                                    Run And Return Rc And Output                    ${LOG_CHECK}
206     Should Be Equal As Integers                ${rc[0]}                               0
207     [Return]                                   ${rc[1]}
208
209 Change DFC httpsHostnameVerify configuration in Consul
210     [Documentation]     Changes DFC httpsHostnameVerify config.
211     [Arguments]                     ${httpsHostnameVerify}
212     ${httpsHostnameVerify_conf}     Create Dictionary               httpsHostnameVerify=${httpsHostnameVerify}
213     Templating.Create Environment   pm                              ${GLOBAL_TEMPLATE_FOLDER}
214     ${event}=                       Templating.Apply Template       pm                              ${consul_change_event}      ${httpsHostnameVerify_conf}
215     ${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}'
216     Should Be Equal As Integers   ${rc}                           0
217     ${resp}=                        Run Consul Put Request          /v1/kv/${container_name}-datafile-collector?raw=1          ${event}
218     Should Be Equal As Strings      ${resp.status_code}             200
219     ${rc} =                       Run and Return RC               kubectl delete pods -n onap $(kubectl get pods -n onap | grep datafile-collector | awk '{print $1}' | grep -v NAME)
220     Should Be Equal As Integers   ${rc}                           0
221     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
222
223 Sending File Ready Event to VES Collector for HTTPS Server
224     [Arguments]  ${https-server_host}
225     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}
226
227 Send File Ready Event to VES Collector for HTTPS Server
228     [Arguments]                         ${pm_file}                          ${file_format_type}             ${file_format_version}     ${https_server_host}
229     Disable Warnings
230     ${pm_event}                         Create Dictionary                   https_server_host=${https_server_host}  pm_file=${pm_file}   fileFormatType=${file_format_type}   fileFormatVersion=${file_format_version}
231     Templating.Create Environment       pm                                  ${GLOBAL_TEMPLATE_FOLDER}
232     ${VES_FILE_READY_NOTIFICATION}=     Templating.Apply Template           pm                              ${pm_notification_event}   ${pm_event}
233     ${headers}=                         Create Dictionary                   content-type=application/json
234     ${auth}=                            Create List                         ${GLOBAL_DCAE_VES_USERNAME}     ${GLOBAL_DCAE_VES_PASSWORD}
235     ${session}=                         Create Session                      ves                             ${VES_HEALTH_CHECK_PATH}      auth=${auth}
236     ${resp}=                            Post Request                        ves                             ${VES_LISTENER_PATH}          data=${VES_FILE_READY_NOTIFICATION}   headers=${headers}
237     Should Be Equal As Strings          ${resp.status_code}                 202
238
239
240 Uploading PM Files to xNF HTTPS Server
241     [Arguments]                         ${https-server_host}
242     ${pm_file}=                         Upload PM Files to xNF HTTPS Server     ${GLOBAL_TEST_VARIABLES["PM_FILE_PATH"]}    ${https-server_host}
243     Set Global Variable                 ${PM_FILE}                              ${pm_file}
244
245 Upload PM Files to xNF HTTPS Server
246     [Arguments]                         ${pm_file_path}                     ${https_server}
247     ${epoch}=                           Get Current Date                    result_format=epoch
248     ${pm_file} =                        Set Variable                        A${epoch}.xml.gz
249     Copy File                           ${pm_file_path}                     tmp/${pm_file}
250     ${fileData}=                        Get Binary File                     tmp/${pm_file}
251     ${file_part}=                       Create List                         ${pm_file}                         ${fileData}                   application/octet-stream
252     ${fileParts}=                       Create Dictionary
253     Set to Dictionary                   ${fileParts}                        uploaded_file=${file_part}
254     ${auth}=                            Create List                         demo                                demo123456!
255     ${session}=                         Create Session                      https                               http://${https_server}:80   auth=${auth}
256     ${resp}=                            Post Request                        https                               /upload.php                 files=${fileParts}
257     Should Be Equal As Strings          ${resp.status_code}                 200
258     [Return]                            ${pm_file}