[DCAEGEN2] AAI and Policy response handler suite upgrade
[integration/csit.git] / tests / dcaegen2-services-pmsh / testcases / pmsh.robot
1 *** Settings ***
2 Documentation     Testing PMSH functionality
3
4 Library           OperatingSystem
5 Library           RequestsLibrary
6 Library           String
7 Library           Process
8
9 Resource          ../../common.robot
10 Test Teardown     Delete All Sessions
11
12
13 *** Variables ***
14
15 ${PMSH_BASE_URL}                    https://${PMSH_IP}:8443
16 ${MR_BASE_URL}                      http://${MR_IP_ADDRESS}:3904
17 ${CBS_BASE_URL}                     https://${CBS_SIM_IP_ADDRESS}:10443
18 ${SUBSCRIPTION_ENDPOINT}            /subscription
19 ${POLICY_PUBLISH_MR_TOPIC}          /events/unauthenticated.PMSH_CL_INPUT
20 ${AAI_MR_TOPIC}                     /events/AAI_EVENT
21
22 ${MR_AAI_PNF_CREATED}                       %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/aai-pnf-create.json
23 ${MR_AAI_PNF_REMOVED}                       %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/aai-pnf-delete.json
24 ${MR_POLICY_RESPONSE_PNF_EXISTING}          %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/policy-sub-created-pnf-existing.json
25 ${CBS_EXPECTATION_ADMIN_STATE_UNLOCKED}     %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/cbs-expectation-unlocked-config.json
26 ${CREATE_SUBSCRIPTION_DATA}                 %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_subscription_request.json
27 ${CREATE_SUBSCRIPTION_BAD_DATA}             %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_subscription_bad_request.json
28 ${CREATE_SUBSCRIPTION_SCHEMA_ERROR_DATA}    %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_subscription_schema_error_request.json
29 ${ADMIN_STATE_LOCKED_PATTERN}       'administrativeState': 'LOCKED'
30 ${CLI_EXEC_GET_CBS_CONFIG_FIRST}    docker exec pmsh /bin/sh -c "grep -m 1 'PMSH config from CBS' /var/log/ONAP/dcaegen2/services/pmsh/application.log"
31
32 *** Test Cases ***
33
34 Verify Create Subscriptions API
35     [Tags]                          PMSH_07
36     [Documentation]                 Verify Create Subscription API
37     [Timeout]                       60 seconds
38     ${json_value}=                  json_from_file                  ${CREATE_SUBSCRIPTION_DATA}
39     ${resp}=                        PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
40     Should Be True                  ${resp.status_code} == 201
41      ${resp}=                       GetSubsCall    ${SUBSCRIPTION_ENDPOINT}   "/subs_01"
42     Should Be Equal As Strings      ${resp.json()[0]['subscription']['subscriptionName']}       subs_01
43
44 Verify database tables exist and are empty
45     [Tags]                          PMSH_02
46     [Documentation]                 Verify database has been created and is empty
47     [Timeout]                       10 seconds
48     ${resp}=                        GetSubsCall    ${SUBSCRIPTION_ENDPOINT}     ""
49     Should Be True                  ${resp.status_code} == 200
50     Should Contain                  ${resp.text}                     []
51
52 Verify PNF detected in AAI when administrative state unlocked
53     [Tags]                          PMSH_03
54     [Documentation]                 Verify PNF detected when administrative state unlocked
55     [Timeout]                       60 seconds
56     SetAdministrativeStateToUnlocked
57     Sleep                           31             Allow PMSH time to pick up changes in CBS config
58     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
59     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
60     Should Be Equal As Strings      ${resp.json()['administrativeState']}       UNLOCKED
61     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfName']}            pnf-existing
62     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfMgStatus']}      PENDING_CREATE
63
64 Verify Policy response on MR is handled
65     [Tags]                          PMSH_04
66     [Documentation]                 Verify policy response on MR is handled
67     [Timeout]                       60 seconds
68     SimulatePolicyResponse          ${MR_POLICY_RESPONSE_PNF_EXISTING}
69     Sleep                           31 seconds      Ensure Policy response on MR is picked up
70     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
71     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
72     Should Be Equal As Strings      ${resp.json()['administrativeState']}       UNLOCKED
73     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfName']}            pnf-existing
74     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfMgStatus']}     CREATED
75
76 Verify AAI event on MR detailing new PNF being detected is handled
77     [Tags]                          PMSH_05
78     [Documentation]                 Verify PNF created AAI event on MR is handled
79     [Timeout]                       60 seconds
80     SimulateNewPNF                  ${MR_AAI_PNF_CREATED}
81     Sleep                           31 seconds      Ensure AAI event on MR is picked up
82     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
83     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
84     Should Be Equal As Strings      ${resp.json()['administrativeState']}       UNLOCKED
85     Should Be Equal As Strings      ${resp.json()['networkFunctions'][1]['nfName']}            pnf_newly_discovered
86     Should Be Equal As Strings      ${resp.json()['networkFunctions'][1]['nfMgStatus']}      PENDING_CREATE
87
88 Verify AAI event on MR detailing PNF being deleted is handled
89     [Tags]                          PMSH_06
90     [Documentation]                 Verify PNF deleted AAI event on MR is handled
91     [Timeout]                       60 seconds
92     SimulateDeletedPNF              ${MR_AAI_PNF_REMOVED}
93     Sleep                           31 seconds      Ensure AAI event on MR is picked up
94     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
95     Should Not Contain              ${resp.text}    pnf_newly_discovered
96
97 Verify Create Subscription API for duplicate subscription Id
98     [Tags]                          PMSH_08
99     [Documentation]                 Verify Create Subscription API
100     [Timeout]                       60 seconds
101     ${json_value}=                  json_from_file                  ${CREATE_SUBSCRIPTION_DATA}
102     ${resp}=                        PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
103     Should Be True                  ${resp.status_code} == 409
104     Should Contain                  ${resp.json()}      subscription Name: subs_01 already exists.
105
106 Verify Create Subscription API for schema error
107     [Tags]                          PMSH_09
108     [Documentation]                 Verify Create Subscription API
109     [Timeout]                       60 seconds
110     ${json_value}=                  json_from_file                  ${CREATE_SUBSCRIPTION_SCHEMA_ERROR_DATA}
111     ${resp}=                        PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
112     Should Be True                  ${resp.status_code} == 400
113     Should Contain                  ${resp.json()['detail']}      'administrativeState' is a required property - 'subscription.measurementGroups.0.measurementGroup'
114
115 Verify Create Subscription API for filter values missing
116     [Tags]                          PMSH_10
117     [Documentation]                 Verify Create Subscription API
118     [Timeout]                       60 seconds
119     ${json_value}=                  json_from_file                  ${CREATE_SUBSCRIPTION_BAD_DATA}
120     ${resp}=                        PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
121     Should Be True                  ${resp.status_code} == 400
122     Should Contain                  ${resp.json()}      At least one filter within nfFilter must not be empty
123
124 *** Keywords ***
125
126 SetAdministrativeStateToUnlocked
127     ${data}=            Get Data From File      ${CBS_EXPECTATION_ADMIN_STATE_UNLOCKED}
128     Create Session      cbs_sim_session   ${CBS_BASE_URL}    verify=false
129     ${resp}=            PUT On Session    cbs_sim_session    url=/clear  data={"path": "/service_component_all/.*"}
130     Should Be True      ${resp.status_code} == 200
131     Sleep               2                 Allow CBS time to set expectation
132     ${resp} =           PUT On Session    cbs_sim_session    url=/expectation     data=${data}
133     Should Be True      ${resp.status_code} == 201
134
135
136 SimulatePolicyResponse
137     [Arguments]                     ${expected_contents}
138     ${json_value}=                  json_from_file                  ${expected_contents}
139     ${resp}=                                            PostMrCall                                  ${POLICY_PUBLISH_MR_TOPIC}     ${json_value}
140     log                                                 ${resp.text}
141     Should Be Equal As Strings          ${resp.status_code}             200
142     ${count}=                           Evaluate                                        $resp.json().get('count')
143     log                                                         'JSON Response Code:'${resp}
144
145 SimulateNewPNF
146     [Arguments]                     ${expected_contents}
147     ${json_value}=                  json_from_file                  ${expected_contents}
148     ${resp}=                                            PostMrCall                                      ${AAI_MR_TOPIC}      ${json_value}
149     log                                                 ${resp.text}
150     Should Be Equal As Strings          ${resp.status_code}             200
151     ${count}=                           Evaluate                                        $resp.json().get('count')
152     log                                                         'JSON Response Code:'${resp}
153
154 SimulateDeletedPNF
155     [Arguments]                     ${expected_contents}
156     ${json_value}=                  json_from_file                  ${expected_contents}
157     ${resp}=                                            PostMrCall                                      ${AAI_MR_TOPIC}      ${json_value}
158     log                                                 ${resp.text}
159     Should Be Equal As Strings          ${resp.status_code}             200
160     ${count}=                           Evaluate                                        $resp.json().get('count')
161     log                                                         'JSON Response Code:'${resp}
162
163 PostMrCall
164     [Arguments]     ${url}     ${data}
165     Create Session  mr_sim_session       ${MR_BASE_URL}    verify=false
166     ${headers}=     Create Dictionary    Accept=application/json     Content-Type=application/json
167     ${resp}=        POST On Session      mr_sim_session    url=${url}    json=${data}     headers=${headers}
168     [Return]        ${resp}
169
170 GetSubsCall
171     [Arguments]     ${url}      ${url_path_param}
172     Create Session  pmsh_session      ${PMSH_BASE_URL}    verify=false
173     ${resp}=        GET On Session    pmsh_session        url=${url}    data={"path": {url_path_param}}
174     [Return]        ${resp}
175
176 GetMeasGrpCall
177     [Arguments]     ${url}
178     Create Session  pmsh_session      ${PMSH_BASE_URL}    verify=false
179     ${resp}=        GET On Session    pmsh_session        url=${url}
180     [Return]        ${resp}
181
182 PostSubscriptionCall
183     [Arguments]     ${url}     ${data}
184     Create Session  pmsh_sub_session       ${PMSH_BASE_URL}    verify=false
185     ${headers}=     Create Dictionary    Accept=application/json     Content-Type=application/json
186     ${resp}=        POST On Session      pmsh_sub_session    url=${url}    json=${data}     headers=${headers}  expected_status=anything
187     [Return]        ${resp}