530268bfc9b06c3213da93f3e82a3ffc51402ce0
[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_SIM_BASE_URL}                  http://${MR_SIM_IP_ADDRESS}:3904
17 ${SUBSCRIPTION_ENDPOINT}            /subscription
18
19 ${MR_SIM_RESET}                             %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/mr-sim-reset.json
20 ${MR_AAI_PNF_CREATED}                       %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/aai-pnf-create.json
21 ${MR_AAI_PNF_REMOVED}                       %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/aai-pnf-delete.json
22 ${MR_POLICY_RESPONSE_PNF_EXISTING}          %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/policy-sub-created-pnf-existing.json
23 ${MR_POLICY_RESPONSE_PNF_DELETED}           %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/policy-sub-deleted-pnf-existing.json
24 ${CREATE_SUBSCRIPTION_DATA}                 %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_subscription_request.json
25 ${CREATE_SECOND_SUBSCRIPTION_DATA}          %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_second_subscription_request.json
26 ${CREATE_SUBSCRIPTION_BAD_DATA}             %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_subscription_bad_request.json
27 ${CREATE_SUBSCRIPTION_SCHEMA_ERROR_DATA}    %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_subscription_schema_error_request.json
28
29 *** Test Cases ***
30 Verify Get subscriptions with Network Functions None
31     [Tags]                          PMSH_01
32     [Documentation]                 Verify Get all subscriptions when there are no defined subscriptions
33     [Timeout]                       10 seconds
34     ${resp}=                        GetSubsCall    ${SUBSCRIPTION_ENDPOINT}     ""
35     Should Be True                  ${resp.status_code} == 200
36     Should Contain                  ${resp.text}                     []
37
38 Verify Create Subscriptions API
39     [Tags]                          PMSH_07
40     [Documentation]                 Verify Create Subscription API
41     [Timeout]                       60 seconds
42     ${json_value}=                  json_from_file                  ${CREATE_SUBSCRIPTION_DATA}
43     ${resp}=                        PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
44     Should Be True                  ${resp.status_code} == 201
45      ${resp}=                       GetSubsCall    ${SUBSCRIPTION_ENDPOINT}   "/subs_01"
46     Should Be Equal As Strings      ${resp.json()[0]['subscription']['subscriptionName']}       subs_01
47
48 Verify database tables exist and are empty
49     [Tags]                          PMSH_02
50     [Documentation]                 Verify database has been created and is empty
51     [Timeout]                       10 seconds
52     ${resp}=                        GetSubsCall    ${SUBSCRIPTION_ENDPOINT}     ""
53     Should Be True                  ${resp.status_code} == 200
54     Should Contain                  ${resp.text}                     []
55
56 Verify PNF detected in AAI when administrative state unlocked
57     [Tags]                          PMSH_03
58     [Documentation]                 Verify PNF detected when administrative state unlocked
59     [Timeout]                       60 seconds
60     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
61     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
62     Should Be Equal As Strings      ${resp.json()['administrativeState']}       UNLOCKED
63     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfName']}            pnf-existing
64     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfMgStatus']}      PENDING_CREATE
65
66 Verify Policy response on MR is handled
67     [Tags]                          PMSH_04
68     [Documentation]                 Verify policy response on MR is handled
69     [Timeout]                       60 seconds
70     AddCreatePolicyResponeToMrSim
71     Sleep                           31 seconds      Ensure Policy response on MR is picked up
72     ResetMrSim
73     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
74     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
75     Should Be Equal As Strings      ${resp.json()['administrativeState']}       UNLOCKED
76     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfName']}            pnf-existing
77     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfMgStatus']}     CREATED
78
79 Verify AAI event on MR detailing new PNF being detected is handled
80     [Tags]                          PMSH_05
81     [Documentation]                 Verify PNF created AAI event on MR is handled
82     [Timeout]                       60 seconds
83     AddNewPnfToMrSim
84     Sleep                           25 seconds     Give sim time to set expectation
85     ResetMrSim
86     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
87     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
88     Should Be Equal As Strings      ${resp.json()['administrativeState']}       UNLOCKED
89     Should Be Equal As Strings      ${resp.json()['networkFunctions'][1]['nfName']}            pnf_newly_discovered
90     Should Be Equal As Strings      ${resp.json()['networkFunctions'][1]['nfMgStatus']}      PENDING_CREATE
91
92 Verify AAI event on MR detailing PNF being deleted is handled
93     [Tags]                          PMSH_06
94     [Documentation]                 Verify PNF deleted AAI event on MR is handled
95     [Timeout]                       60 seconds
96     RemoveNewPnfFromMrSim
97     Sleep                           21 seconds      Ensure AAI event on MR is picked up
98     ResetMrSim
99     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
100     Should Not Contain              ${resp.text}    pnf_newly_discovered
101
102 Verify Create Subscription API for duplicate subscription Id
103     [Tags]                          PMSH_08
104     [Documentation]                 Verify Create Subscription API for duplicate subscription Id
105     [Timeout]                       60 seconds
106     ${json_value}=                  json_from_file                  ${CREATE_SUBSCRIPTION_DATA}
107     ${resp}=                        PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
108     Should Be True                  ${resp.status_code} == 409
109     Should Contain                  ${resp.json()}      subscription Name: subs_01 already exists.
110
111 Verify Create Subscription API for schema error
112     [Tags]                          PMSH_09
113     [Documentation]                 Verify Create Subscription API
114     [Timeout]                       60 seconds
115     ${json_value}=                  json_from_file                  ${CREATE_SUBSCRIPTION_SCHEMA_ERROR_DATA}
116     ${resp}=                        PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
117     Should Be True                  ${resp.status_code} == 400
118     Should Contain                  ${resp.json()['detail']}      'administrativeState' is a required property - 'subscription.measurementGroups.0.measurementGroup'
119
120 Verify Create Subscription API for filter values missing
121     [Tags]                          PMSH_10
122     [Documentation]                 Verify Create Subscription API
123     [Timeout]                       60 seconds
124     ${json_value}=                  json_from_file                  ${CREATE_SUBSCRIPTION_BAD_DATA}
125     ${resp}=                        PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
126     Should Be True                  ${resp.status_code} == 400
127     Should Contain                  ${resp.json()}      At least one filter within nfFilter must not be empty
128
129 Verify Get Measurement Group with Network Functions
130     [Tags]                          PMSH_11
131     [Documentation]                 Verify Get Measurement Group with Network Functions by using MGName and SubName
132     [Timeout]                       60 seconds
133     ${resp}=                        GetMeasGrpWithNFSCall     /subscription/subs_01/measurementGroups/msg_grp_01
134     ${nf_length}=                   Get length  ${resp.json()['networkFunctions']}
135     Should Be True                  ${resp.status_code} == 200
136     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
137     Should Be Equal As Strings      ${resp.json()['measurementGroupName']}      msg_grp_01
138     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfName']}      pnf-existing
139     Should be equal as numbers      ${nf_length}  1
140
141 Verify Get single subscription with Network Functions
142     [Tags]                          PMSH_12
143     [Documentation]                 Verify Get single subscription with Network Functions by using subscription name
144     [Timeout]                       60 seconds
145     ${resp}=                        GetSubsCall    ${SUBSCRIPTION_ENDPOINT}/subs_01  ""
146     ${nf_length}=                   Get length  ${resp.json()['subscription']['nfs']}
147     Should Be True                  ${resp.status_code} == 200
148     Should Be Equal As Strings      ${resp.json()['subscription']['subscriptionName']}      subs_01
149     Should Be Equal As Strings      ${resp.json()['subscription']['nfs'][0]}      pnf-existing
150         Should Be Equal As Strings      ${resp.json()['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']}  msg_grp_02
151     Should be equal as numbers      ${nf_length}  1
152
153 Verify Get single subscription with Network Functions None
154     [Tags]                          PMSH_13
155     [Documentation]                 Verify Get single subscription with Network Functions when there is no defined subscription
156     [Timeout]                       60 seconds
157     ${resp}=                        GetSubsCall    ${SUBSCRIPTION_ENDPOINT}/sub_none  ""
158     Should Be True                  ${resp.status_code} == 404
159     Should Be Equal As Strings      ${resp.json()['error']}     Subscription was not defined with the name : sub_none
160
161 Verify Update Measurement Group admin status from Unlocked to Locking
162     [Tags]                          PMSH_14
163     [Documentation]                 Verify Update Measurement Group admin status from Unlocked to Locking
164     [Timeout]                       60 seconds
165     ${json_string}=                 Set Variable    {"administrativeState": "LOCKED"}
166     ${json}=                        evaluate        json.loads('''${json_string}''')    json
167     ${resp}=                        PutMsgGrpStatusCall     /subscription/subs_01/measurementGroups/msg_grp_01/adminState   ${json}
168     Should Be True                  ${resp.status_code} == 200
169     Should Contain                  ${resp.json()}      Successfully updated admin state
170     ${resp}=                        GetMeasGrpWithNFSCall     /subscription/subs_01/measurementGroups/msg_grp_01
171     ${nf_length}=                   Get length  ${resp.json()['networkFunctions']}
172     Should Be True                  ${resp.status_code} == 200
173     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
174     Should Be Equal As Strings      ${resp.json()['measurementGroupName']}      msg_grp_01
175     Should Be Equal As Strings      ${resp.json()['administrativeState']}       LOCKING
176     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfName']}      pnf-existing
177     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfMgStatus']}      PENDING_DELETE
178     Should be equal as numbers      ${nf_length}  1
179
180 Verify Update Measurement Group admin status with locking in progress
181     [Tags]                          PMSH_15
182     [Documentation]                 Verify Update Measurement Group admin status with locking in progress
183     [Timeout]                       60 seconds
184     ${json_string}=                 Set Variable    {"administrativeState": "LOCKED"}
185     ${json}=                        evaluate        json.loads('''${json_string}''')    json
186     ${resp}=                        PutMsgGrpStatusCall     /subscription/subs_01/measurementGroups/msg_grp_01/adminState   ${json}
187     Should Be True                  ${resp.status_code} == 409
188     Should Contain                  ${resp.json()}  Cannot update admin status as Locked request is in progress for sub name: subs_01  and meas group name: msg_grp_01
189
190 Verify Measurement Group admin status update from Locking to Locked
191     [Tags]                          PMSH_16
192     [Documentation]                 Verify Measurement Group admin status update from Locking to Locked
193     [Timeout]                       60 seconds
194     AddDeletePolicyResponeToMrSim
195     Sleep                           31 seconds      Ensure Policy response on MR is picked up
196     ResetMrSim
197     ${resp}=                        GetMeasGrpCall    /subscription/subs_01/measurementGroups/msg_grp_01
198     Should Be Equal As Strings      ${resp.json()['measurementGroupName']}      msg_grp_01
199     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
200     Should Be Equal As Strings      ${resp.json()['administrativeState']}       LOCKED
201     ${nf_length}=                   Get length  ${resp.json()['networkFunctions']}
202     Should be equal as numbers      ${nf_length}  0
203
204 Verify Update Measurement Group admin status to unlocked
205     [Tags]                          PMSH_17
206     [Documentation]                 Verify Update Measurement Group admin status to unlocked with no Network Functions in Subscription
207     [Timeout]                       60 seconds
208     ${json_string}=                 Set Variable    {"administrativeState": "UNLOCKED"}
209     ${json}=                        evaluate        json.loads('''${json_string}''')    json
210     ${resp}=                        PutMsgGrpStatusCall     /subscription/subs_01/measurementGroups/msg_grp_01/adminState   ${json}
211     Should Be True                  ${resp.status_code} == 200
212     Should Contain                  ${resp.json()}      Successfully updated admin state
213     ${resp}=                        GetMeasGrpWithNFSCall     /subscription/subs_01/measurementGroups/msg_grp_01
214     ${nf_length}=                   Get length  ${resp.json()['networkFunctions']}
215     Should Be True                  ${resp.status_code} == 200
216     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
217     Should Be Equal As Strings      ${resp.json()['measurementGroupName']}      msg_grp_01
218     Should Be Equal As Strings      ${resp.json()['administrativeState']}       UNLOCKED
219     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfName']}      pnf-existing
220     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfMgStatus']}      PENDING_CREATE
221     Should be equal as numbers      ${nf_length}  1
222
223 Verify Update Measurement Group admin status from Locked to Unlocked with Network function present in subscription
224     [Tags]                          PMSH_18
225     [Documentation]                 Verify Update Measurement Group admin status from Locked to Unlocked with Network function present in subscription
226     [Timeout]                       60 seconds
227     ${json_string}=                 Set Variable    {"administrativeState": "UNLOCKED"}
228     ${json}=                        evaluate        json.loads('''${json_string}''')    json
229     ${resp}=                        PutMsgGrpStatusCall     /subscription/subs_01/measurementGroups/msg_grp_02/adminState   ${json}
230     Should Be True                  ${resp.status_code} == 200
231     Should Contain                  ${resp.json()}      Successfully updated admin state
232     ${resp}=                        GetMeasGrpWithNFSCall     /subscription/subs_01/measurementGroups/msg_grp_02
233     ${nf_length}=                   Get length  ${resp.json()['networkFunctions']}
234     Should Be True                  ${resp.status_code} == 200
235     Should Be Equal As Strings      ${resp.json()['subscriptionName']}      subs_01
236     Should Be Equal As Strings      ${resp.json()['measurementGroupName']}      msg_grp_02
237     Should Be Equal As Strings      ${resp.json()['administrativeState']}       UNLOCKED
238     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfName']}      pnf-existing
239     Should Be Equal As Strings      ${resp.json()['networkFunctions'][0]['nfMgStatus']}      PENDING_CREATE
240     Should be equal as numbers      ${nf_length}  1
241
242 Verify Update Measurement Group admin status with no change
243     [Tags]                          PMSH_19
244     [Documentation]                 Verify Update Measurement Group admin status with no change
245     [Timeout]                       60 seconds
246     ${json_string}=                 Set Variable    {"administrativeState": "UNLOCKED"}
247     ${json}=                        evaluate        json.loads('''${json_string}''')    json
248     ${resp}=                        PutMsgGrpStatusCall     /subscription/subs_01/measurementGroups/msg_grp_01/adminState   ${json}
249     Should Be True                  ${resp.status_code} == 400
250     Should Contain                  ${resp.json()}  Measurement group is already in UNLOCKED state for sub name: subs_01  and meas group name: msg_grp_01
251
252 Verify Update Measurement Group admin status for invalid measurement group
253     [Tags]                          PMSH_20
254     [Documentation]                 Verify Update Measurement Group admin status for invalid measurement group
255     [Timeout]                       60 seconds
256     ${json_string}=                 Set Variable    {"administrativeState": "LOCKED"}
257     ${json}=                        evaluate        json.loads('''${json_string}''')    json
258     ${resp}=                        PutMsgGrpStatusCall     /subscription/subs_01/measurementGroups/msg_grp_11/adminState   ${json}
259     Should Be True                  ${resp.status_code} == 400
260     Should Contain                  ${resp.json()}  Requested measurement group not available for admin status update
261
262 Verify Get subscriptions with Network Functions
263     [Tags]                          PMSH_21
264     [Documentation]                 Verify Get subscriptions with Network Functions
265     [Timeout]                       60 seconds
266     ${json_value}=                  json_from_file                  ${CREATE_SECOND_SUBSCRIPTION_DATA}
267     ${resp_post}=                   PostSubscriptionCall     ${SUBSCRIPTION_ENDPOINT}   ${json_value}
268     ${resp}=                        GetSubsCall    ${SUBSCRIPTION_ENDPOINT}  ""
269     ${nf_length_first}=             Get length  ${resp.json()[0]['subscription']['nfs']}
270     ${nf_length_second}=            Get length  ${resp.json()[1]['subscription']['nfs']}
271     Should Be True                  ${resp.status_code} == 200
272     Should Be Equal As Strings      ${resp.json()[0]['subscription']['subscriptionName']}      subs_01
273     Should Be Equal As Strings      ${resp.json()[0]['subscription']['nfs'][0]}      pnf-existing
274         Should Be Equal As Strings      ${resp.json()[0]['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']}  msg_grp_02
275     Should be equal as numbers      ${nf_length_first}  1
276     Should Be Equal As Strings      ${resp.json()[1]['subscription']['subscriptionName']}      subs_02
277     Should Be Equal As Strings      ${resp.json()[1]['subscription']['nfs'][0]}      pnf-existing
278         Should Be Equal As Strings      ${resp.json()[1]['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']}  msg_grp_04
279     Should be equal as numbers      ${nf_length_second}  1
280
281 *** Keywords ***
282
283 AddCreatePolicyResponeToMrSim
284     ${data}=            Get Data From File      ${MR_POLICY_RESPONSE_PNF_EXISTING}
285     Create Session      mr_sim_session   ${MR_SIM_BASE_URL}    verify=false
286     ${resp}=            PUT On Session    mr_sim_session    url=/clear  data={"id" : "pmsh_cl_input_event"}
287     Should Be True      ${resp.status_code} == 200
288     Sleep               2                 Allow MR_SIM time to set expectation
289     ${resp} =           PUT On Session    mr_sim_session    url=/expectation     data=${data}
290     Should Be True      ${resp.status_code} == 201
291
292 AddDeletePolicyResponeToMrSim
293     ${data}=            Get Data From File      ${MR_POLICY_RESPONSE_PNF_DELETED}
294     Create Session      mr_sim_session   ${MR_SIM_BASE_URL}    verify=false
295     ${resp}=            PUT On Session    mr_sim_session    url=/clear  data={"id" : "pmsh_cl_input_event"}
296     Should Be True      ${resp.status_code} == 200
297     Sleep               2                 Allow MR_SIM time to set expectation
298     ${resp} =           PUT On Session    mr_sim_session    url=/expectation     data=${data}
299     Should Be True      ${resp.status_code} == 201
300
301 AddNewPnfToMrSim
302     ${data}=            Get Data From File      ${MR_AAI_PNF_CREATED}
303     Create Session      mr_sim_session   ${MR_SIM_BASE_URL}    verify=false
304     ${resp}=            PUT On Session    mr_sim_session    url=/clear  data={"id" : "mr_aai_event"}
305     Should Be True      ${resp.status_code} == 200
306     Sleep               2                 Allow MR_SIM time to set expectation
307     ${resp} =           PUT On Session    mr_sim_session    url=/expectation     data=${data}
308     Should Be True      ${resp.status_code} == 201
309
310 RemoveNewPnfFromMrSim
311     ${data}=            Get Data From File      ${MR_AAI_PNF_REMOVED}
312     Create Session      mr_sim_session   ${MR_SIM_BASE_URL}    verify=false
313     ${resp}=            PUT On Session    mr_sim_session    url=/clear  data={"id" : "mr_aai_event"}
314     Should Be True      ${resp.status_code} == 200
315     Sleep               2                 Allow MR_SIM time to set expectation
316     ${resp} =           PUT On Session    mr_sim_session    url=/expectation     data=${data}
317     Should Be True      ${resp.status_code} == 201
318
319 ResetMrSim
320     ${data}=            Get Data From File      ${MR_SIM_RESET}
321     Create Session      mr_sim_session   ${MR_SIM_BASE_URL}    verify=false
322     ${resp}=            PUT On Session    mr_sim_session    url=/reset
323     Should Be True      ${resp.status_code} == 200
324     ${resp}=            PUT On Session    mr_sim_session    url=/expectation     data=${data}
325     Should Be True      ${resp.status_code} == 201
326
327 GetSubsCall
328     [Arguments]     ${url}      ${url_path_param}
329     Create Session  pmsh_session      ${PMSH_BASE_URL}    verify=false
330     ${resp}=        GET On Session    pmsh_session        url=${url}    data={"path": {url_path_param}}    expected_status=any
331     [Return]        ${resp}
332
333 GetMeasGrpCall
334     [Arguments]     ${url}
335     Create Session  pmsh_session      ${PMSH_BASE_URL}    verify=false
336     ${resp}=        GET On Session    pmsh_session        url=${url}
337     [Return]        ${resp}
338
339 GetMeasGrpWithNFSCall
340     [Arguments]     ${url}
341     Create Session  pmsh_session      ${PMSH_BASE_URL}    verify=false
342     ${resp}=        GET On Session    pmsh_session        url=${url}
343     [Return]        ${resp}
344
345 PostSubscriptionCall
346     [Arguments]     ${url}     ${data}
347     Create Session  pmsh_sub_session       ${PMSH_BASE_URL}    verify=false
348     ${headers}=     Create Dictionary    Accept=application/json     Content-Type=application/json
349     ${resp}=        POST On Session      pmsh_sub_session    url=${url}    json=${data}     headers=${headers}  expected_status=anything
350     [Return]        ${resp}
351
352 PutMsgGrpStatusCall
353     [Arguments]     ${url}     ${data}
354     Create Session  pmsh_sub_session       ${PMSH_BASE_URL}    verify=false
355     ${headers}=     Create Dictionary    Accept=application/json     Content-Type=application/json
356     ${resp}=        PUT On Session      pmsh_sub_session    url=${url}    json=${data}     headers=${headers}  expected_status=anything
357     [Return]        ${resp}