9648ef8dee5dfd0ce965c8baee8545847115c9ab
[dcaegen2/services/pm-mapper.git] / csit / tests / filesprocessingconfigpmmapper / filesprocessingconfigpmmapper.robot
1 *** Settings ***
2 Documentation     Testing PM Mapper functionality
3 Library           Collections
4 Library           OperatingSystem
5 Library           RequestsLibrary
6 Library           Process
7 Library           String
8 Library           libraries/DockerContainerManager.py
9 Library           libraries/LogReader.py
10
11 *** Variables ***
12
13 ${ASSETS_PATH}                           %{WORKSPACE}/tests/filesprocessingconfigpmmapper/assets
14 ${NR_VALID_METADATA_PATH}                ${ASSETS_PATH}/valid_metadata.json
15 ${CLI_EXEC_CLI_PM_LOG_CLEAR}             docker exec pmmapper /bin/sh -c "echo -n "" > /var/log/ONAP/dcaegen2/services/pm-mapper/pm-mapper_output.log"
16 ${PUBLISH_NODE_URL}                      https://${DR_NODE_IP}:8443/publish/1
17 ${CLI_EXEC_LOGS_LIST}                    docker exec datarouter-node /bin/sh -c "ls /opt/app/datartr/logs"
18 ${DOCKER_CLIENT_IMAGE}                   nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pm-mapper:latest
19 ${CLIENT_CONTAINER_NAME}                 pmmapper
20 ${FILE_PATH}                             ${ASSETS_PATH}/ABigFile.xml
21 ${CONFIG_ENVS_1_1}                       ${ASSETS_PATH}/config_1_1.env
22 ${CONFIG_ENVS_4_1}                       ${ASSETS_PATH}/config_4_1.env
23 ${CONFIG_ENVS_10_1}                      ${ASSETS_PATH}/config_10_1.env
24 ${CONFIG_ENVS_1_10}                      ${ASSETS_PATH}/config_1_10.env
25
26 *** Test Cases ***
27
28 Verify that PM Mapper rejects 6-9 messages when limitRate is 1 and threads count is 1
29     [Tags]                          FILES_PROCESSING_CONFIG_PM_MAPPER_1
30     [Documentation]                 Verify that PM Mapper rejects 6-9/10 messages. Configuration: limitRate=1, threadsCount=1
31     [Timeout]                       15 minute
32
33     RestartPmmapper                 ${CONFIG_ENVS_1_1}
34
35     ${testname}=                    Set Variable                    Afirst-
36
37     SendFilesToDatarouter           ${testname}
38     ${alllogs}=                     GetLogsOutput
39     ${filtered_logs}=               GetFilteredLogs                 ${alllogs}                                    ${testname}
40     ${dropped_nr}=                  GetDroppedNumber                ${filtered_logs}
41
42     Sleep                           40s
43     ${isCorrectDroppedCount}=       Evaluate  ${5} < ${dropped_nr} < ${10}
44     SavePmMapperLogsAndDroppedCount  config_1_1  ${dropped_nr}
45     Should Be True                  ${isCorrectDroppedCount}  Pm-mapper drop: ${dropped_nr} messages. Expected drop count: 6-9
46     ClearLogs
47
48 Verify that PM Mapper rejects 0 messages when limitRate is 10 and threads count is 1
49     [Tags]                          FILES_PROCESSING_CONFIG_PM_MAPPER_2
50     [Documentation]                 Verify that PM Mapper rejects 0/10 messages. Configuration: limitRate=10, threadsCount=1
51     [Timeout]                       25 minute
52
53     RestartPmmapper                 ${CONFIG_ENVS_10_1}
54
55     ${testname}=                    Set Variable                    Athird-
56
57     SendFilesToDatarouter           ${testname}
58     ${alllogs}=                     GetLogsOutput
59     ${filtered_logs}=               GetFilteredLogs                 ${alllogs}                                    ${testname}
60     ${dropped_nr}=                  GetDroppedNumber                ${filtered_logs}
61
62     Sleep                           15s
63     SavePmMapperLogsAndDroppedCount  config_10_1  ${dropped_nr}
64     Should Be Equal As Numbers      ${dropped_nr}   0   Pm-mapper drop: ${dropped_nr} messages. Expected drop count: 0
65     ClearLogs
66
67 Verify that PM Mapper rejects 0 messages when limitRate is 1 and threads count is 10
68     [Tags]                          FILES_PROCESSING_CONFIG_PM_MAPPER_3
69     [Documentation]                 Verify that PM Mapper rejects 0/10 messages. Configuration: limitRate=1, threadsCount=10
70     [Timeout]                       25 minute
71
72     RestartPmmapper                 ${CONFIG_ENVS_1_10}
73
74     ${testname}=                    Set Variable                    Afourth-
75
76     SendFilesToDatarouter           ${testname}
77     ${alllogs}=                     GetLogsOutput
78     ${filtered_logs}=               GetFilteredLogs                 ${alllogs}                                    ${testname}
79     ${dropped_nr}=                  GetDroppedNumber                ${filtered_logs}
80
81     Sleep                           15s
82     SavePmMapperLogsAndDroppedCount  config_1_10  ${dropped_nr}
83     Should Be Equal As Numbers      ${dropped_nr}   0   Pm-mapper drop: ${dropped_nr} messages. Expected drop count: 0
84     ClearLogs
85
86 *** Keywords ***
87
88 SendFilesToDatarouter
89     [Arguments]                     ${testnr}
90     FOR                             ${i}                             IN RANGE                     10
91                                     SendToDatarouter                 ${FILE_PATH}                 ${NR_VALID_METADATA_PATH}                 X-ONAP-RequestID=${i}        ${testnr}         ${i}
92     END
93     Sleep                           20s
94
95 SendToDatarouter
96     [Arguments]                     ${filepath}                      ${metadatapath}            ${request_id}            ${testnr}      ${i}
97     ${pmdata}=                      Get File                         ${filepath}
98     ${metatdata}                    Get File                         ${metadatapath}
99     ${newFilename}                  Catenate                         SEPARATOR=                 ${testnr}               ${i}               .xml
100     ${resp}=                        PutCall                          ${PUBLISH_NODE_URL}/${newFilename}        ${request_id}    ${pmdata}    ${metatdata.replace("\n","")}    pmmapper
101     VerifyResponse                  ${resp.status_code}              204
102
103 PutCall
104     [Arguments]                     ${url}                           ${request_id}              ${data}            ${meta}          ${user}
105     ${headers}=                     Create Dictionary                X-ONAP-RequestID=${request_id}                X-DMAAP-DR-META=${meta}    Content-Type=application/octet-stream     X-DMAAP-DR-ON-BEHALF-OF=${user}    Authorization=Basic cG1tYXBwZXI6cG1tYXBwZXI=
106     ${resp}=                        Evaluate                         requests.put('${url}', data="""${data}""", headers=${headers}, verify=False, allow_redirects=False)    requests
107     [Return]                        ${resp}
108
109 VerifyResponse
110     [Arguments]                     ${actual_response_value}         ${expected_response_value}
111     Should Be Equal As Strings      ${actual_response_value}         ${expected_response_value}
112
113 ClearLogs
114     Run Process                     ${CLI_EXEC_CLI_PM_LOG_CLEAR}                     shell=yes
115
116 GetLogsOutput
117     ${filesString}=                   Run Process                      ${CLI_EXEC_LOGS_LIST}                     shell=yes
118     ${filesList}=                     Get Log Files List               ${filesString.stdout}
119     ${output}=                        Set Variable                     ${EMPTY}
120     FOR                               ${file}                          IN                                        @{filesList}
121                                       ${file_path}=                    Catenate                                  SEPARATOR=    "cat /opt/app/datartr/logs/      ${file}       "
122                                       ${exec}=                         Catenate                                  docker exec datarouter-node /bin/sh -c      ${file_path}
123                                       ${single_file}=                  Run Process                               ${exec}         shell=yes
124                                       ${output}=                       Catenate                                  SEPARATOR=\n         ${output}                  ${single_file.stdout}
125     END
126     [Return]                          ${output}
127
128 GetFilteredLogs
129     [Arguments]                       ${all_logs}                      ${testname}
130     ${filtered_logs}=                 Filter Unique                    ${all_logs}                               ${testname}
131     [Return]                          ${filtered_logs}
132
133 GetDroppedNumber
134     [Arguments]                       ${logs_output}
135     ${number}=                        Get Number Of Dropped Messages  ${logs_output}
136     [Return]                          ${number}
137
138 RestartPmmapper
139     [Arguments]                       ${envs}
140     Remove Container                  ${CLIENT_CONTAINER_NAME}
141     Sleep                             5s
142     Run Pmmapper Container            ${DOCKER_CLIENT_IMAGE}      ${CLIENT_CONTAINER_NAME}        ${envs}        ${DR_NODE_IP}          ${NODE_IP}
143     Sleep                             15s
144
145 SavePmMapperLogsAndDroppedCount
146     [Arguments]                       ${test_name}                ${dropped_count}
147     Run Process                      echo "Dropped: ${dropped_count}" > %{WORKSPACE}/archives/${test_name}_dropped_count.log  shell=yes
148     Run Process                      docker logs ${CLIENT_CONTAINER_NAME} > %{WORKSPACE}/archives/${test_name}_pm_mapper_container_logs.log  shell=yes
149