2 Documentation Testing PMSH functionality
4 Library OperatingSystem
5 Library RequestsLibrary
9 Resource ../../common.robot
10 Test Teardown Delete All Sessions
15 ${PMSH_BASE_URL} https://${PMSH_IP}:8443
16 ${MR_SIM_BASE_URL} http://${MR_SIM_IP_ADDRESS}:3904
17 ${SUBSCRIPTION_ENDPOINT} /subscription
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 ${CREATE_MSG_GRP_DATA} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_msg_grp.json
31 Verify Get subscriptions with Network Functions None
33 [Documentation] Verify Get all subscriptions when there are no defined subscriptions
35 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
36 Should Be True ${resp.status_code} == 200
37 Should Contain ${resp.text} []
39 Verify Create Subscriptions API
41 [Documentation] Verify Create Subscription API
43 ${json_value}= json_from_file ${CREATE_SUBSCRIPTION_DATA}
44 ${resp}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
45 Should Be True ${resp.status_code} == 201
46 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} "/subs_01"
47 Should Be Equal As Strings ${resp.json()[0]['subscription']['subscriptionName']} subs_01
49 Verify database tables exist and are empty
51 [Documentation] Verify database has been created and is empty
53 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
54 Should Be True ${resp.status_code} == 200
55 Should Contain ${resp.text} []
57 Verify PNF detected in AAI when administrative state unlocked
59 [Documentation] Verify PNF detected when administrative state unlocked
61 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
62 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
63 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
64 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
65 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} PENDING_CREATE
67 Verify Policy response on MR is handled
69 [Documentation] Verify policy response on MR is handled
71 AddCreatePolicyResponeToMrSim
72 Sleep 31 seconds Ensure Policy response on MR is picked up
74 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
75 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
76 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
77 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
78 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} CREATED
80 Verify AAI event on MR detailing new PNF being detected is handled
82 [Documentation] Verify PNF created AAI event on MR is handled
85 Sleep 25 seconds Give sim time to set expectation
87 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
88 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
89 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
90 Should Be Equal As Strings ${resp.json()['networkFunctions'][1]['nfName']} pnf_newly_discovered
91 Should Be Equal As Strings ${resp.json()['networkFunctions'][1]['nfMgStatus']} PENDING_CREATE
93 Verify AAI event on MR detailing PNF being deleted is handled
95 [Documentation] Verify PNF deleted AAI event on MR is handled
98 Sleep 21 seconds Ensure AAI event on MR is picked up
100 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
101 Should Not Contain ${resp.text} pnf_newly_discovered
103 Verify Create Subscription API for duplicate subscription Id
105 [Documentation] Verify Create Subscription API for duplicate subscription Id
107 ${json_value}= json_from_file ${CREATE_SUBSCRIPTION_DATA}
108 ${resp}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
109 Should Be True ${resp.status_code} == 409
110 Should Contain ${resp.json()} subscription Name: subs_01 already exists.
112 Verify Create Subscription API for schema error
114 [Documentation] Verify Create Subscription API
116 ${json_value}= json_from_file ${CREATE_SUBSCRIPTION_SCHEMA_ERROR_DATA}
117 ${resp}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
118 Should Be True ${resp.status_code} == 400
119 Should Contain ${resp.json()['detail']} 'administrativeState' is a required property - 'subscription.measurementGroups.0.measurementGroup'
121 Verify Create Subscription API for filter values missing
123 [Documentation] Verify Create Subscription API
125 ${json_value}= json_from_file ${CREATE_SUBSCRIPTION_BAD_DATA}
126 ${resp}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
127 Should Be True ${resp.status_code} == 400
128 Should Contain ${resp.json()} At least one filter within nfFilter must not be empty
130 Verify Get Measurement Group with Network Functions
132 [Documentation] Verify Get Measurement Group with Network Functions by using MGName and SubName
134 ${resp}= GetMeasGrpWithNFSCall /subscription/subs_01/measurementGroups/msg_grp_01
135 ${nf_length}= Get length ${resp.json()['networkFunctions']}
136 Should Be True ${resp.status_code} == 200
137 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
138 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_01
139 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
140 Should be equal as numbers ${nf_length} 1
142 Verify Get single subscription with Network Functions
144 [Documentation] Verify Get single subscription with Network Functions by using subscription name
146 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT}/subs_01 ""
147 ${nf_length}= Get length ${resp.json()['subscription']['nfs']}
148 Should Be True ${resp.status_code} == 200
149 Should Be Equal As Strings ${resp.json()['subscription']['subscriptionName']} subs_01
150 Should Be Equal As Strings ${resp.json()['subscription']['nfs'][0]} pnf-existing
151 Should Be Equal As Strings ${resp.json()['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']} msg_grp_02
152 Should be equal as numbers ${nf_length} 1
154 Verify Get single subscription with Network Functions None
156 [Documentation] Verify Get single subscription with Network Functions when there is no defined subscription
158 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT}/sub_none ""
159 Should Be True ${resp.status_code} == 404
160 Should Be Equal As Strings ${resp.json()['error']} Subscription was not defined with the name : sub_none
162 Verify Update Measurement Group admin status from Unlocked to Locking
164 [Documentation] Verify Update Measurement Group admin status from Unlocked to Locking
166 ${json_string}= Set Variable {"administrativeState": "LOCKED"}
167 ${json}= evaluate json.loads('''${json_string}''') json
168 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_01/adminState ${json}
169 Should Be True ${resp.status_code} == 200
170 Should Contain ${resp.json()} Successfully updated admin state
171 ${resp}= GetMeasGrpWithNFSCall /subscription/subs_01/measurementGroups/msg_grp_01
172 ${nf_length}= Get length ${resp.json()['networkFunctions']}
173 Should Be True ${resp.status_code} == 200
174 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
175 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_01
176 Should Be Equal As Strings ${resp.json()['administrativeState']} LOCKING
177 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
178 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} PENDING_DELETE
179 Should be equal as numbers ${nf_length} 1
181 Verify Update Measurement Group admin status with locking in progress
183 [Documentation] Verify Update Measurement Group admin status with locking in progress
185 ${json_string}= Set Variable {"administrativeState": "LOCKED"}
186 ${json}= evaluate json.loads('''${json_string}''') json
187 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_01/adminState ${json}
188 Should Be True ${resp.status_code} == 409
189 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
191 Verify Measurement Group admin status update from Locking to Locked
193 [Documentation] Verify Measurement Group admin status update from Locking to Locked
195 AddDeletePolicyResponeToMrSim
196 Sleep 31 seconds Ensure Policy response on MR is picked up
198 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
199 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_01
200 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
201 Should Be Equal As Strings ${resp.json()['administrativeState']} LOCKED
202 ${nf_length}= Get length ${resp.json()['networkFunctions']}
203 Should be equal as numbers ${nf_length} 0
205 Verify Update Measurement Group admin status to unlocked
207 [Documentation] Verify Update Measurement Group admin status to unlocked with no Network Functions in Subscription
209 ${json_string}= Set Variable {"administrativeState": "UNLOCKED"}
210 ${json}= evaluate json.loads('''${json_string}''') json
211 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_01/adminState ${json}
212 Should Be True ${resp.status_code} == 200
213 Should Contain ${resp.json()} Successfully updated admin state
214 ${resp}= GetMeasGrpWithNFSCall /subscription/subs_01/measurementGroups/msg_grp_01
215 ${nf_length}= Get length ${resp.json()['networkFunctions']}
216 Should Be True ${resp.status_code} == 200
217 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
218 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_01
219 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
220 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
221 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} PENDING_CREATE
222 Should be equal as numbers ${nf_length} 1
224 Verify Update Measurement Group admin status from Locked to Unlocked with Network function present in subscription
226 [Documentation] Verify Update Measurement Group admin status from Locked to Unlocked with Network function present in subscription
228 ${json_string}= Set Variable {"administrativeState": "UNLOCKED"}
229 ${json}= evaluate json.loads('''${json_string}''') json
230 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_02/adminState ${json}
231 Should Be True ${resp.status_code} == 200
232 Should Contain ${resp.json()} Successfully updated admin state
233 ${resp}= GetMeasGrpWithNFSCall /subscription/subs_01/measurementGroups/msg_grp_02
234 ${nf_length}= Get length ${resp.json()['networkFunctions']}
235 Should Be True ${resp.status_code} == 200
236 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
237 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_02
238 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
239 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
240 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} PENDING_CREATE
241 Should be equal as numbers ${nf_length} 1
243 Verify Update Measurement Group admin status with no change
245 [Documentation] Verify Update Measurement Group admin status with no change
247 ${json_string}= Set Variable {"administrativeState": "UNLOCKED"}
248 ${json}= evaluate json.loads('''${json_string}''') json
249 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_01/adminState ${json}
250 Should Be True ${resp.status_code} == 400
251 Should Contain ${resp.json()} Measurement group is already in UNLOCKED state for sub name: subs_01 and meas group name: msg_grp_01
253 Verify Update Measurement Group admin status for invalid measurement group
255 [Documentation] Verify Update Measurement Group admin status for invalid measurement group
257 ${json_string}= Set Variable {"administrativeState": "LOCKED"}
258 ${json}= evaluate json.loads('''${json_string}''') json
259 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_11/adminState ${json}
260 Should Be True ${resp.status_code} == 400
261 Should Contain ${resp.json()} Requested measurement group not available for admin status update
263 Verify Get subscriptions with Network Functions
265 [Documentation] Verify Get subscriptions with Network Functions
267 ${json_value}= json_from_file ${CREATE_SECOND_SUBSCRIPTION_DATA}
268 ${resp_post}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
269 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
270 ${nf_length_first}= Get length ${resp.json()[0]['subscription']['nfs']}
271 ${nf_length_second}= Get length ${resp.json()[1]['subscription']['nfs']}
272 Should Be True ${resp.status_code} == 200
273 Should Be Equal As Strings ${resp.json()[0]['subscription']['subscriptionName']} subs_01
274 Should Be Equal As Strings ${resp.json()[0]['subscription']['nfs'][0]} pnf-existing
275 Should Be Equal As Strings ${resp.json()[0]['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']} msg_grp_02
276 Should be equal as numbers ${nf_length_first} 1
277 Should Be Equal As Strings ${resp.json()[1]['subscription']['subscriptionName']} subs_02
278 Should Be Equal As Strings ${resp.json()[1]['subscription']['nfs'][0]} pnf-existing
279 Should Be Equal As Strings ${resp.json()[1]['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']} msg_grp_04
280 Should be equal as numbers ${nf_length_second} 1
282 Verify Delete Measurement Group with Administrative State unlocked
284 [Documentation] Verify Delete Measurement Group with Administrative State unlocked
286 ${json_string}= Set Variable {"administrativeState": "UNLOCKED"}
287 ${json}= evaluate json.loads('''${json_string}''') json
288 PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_02/adminState ${json}
289 ${resp}= DeleteMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_02
290 Should Be True ${resp.status_code} == 409
292 Verify Delete Measurement Group with incorrect Measurement Group name server error
294 [Documentation] Verify Delete Measurement Group with incorrect Measurement Group Name
296 ${resp}= DeleteMeasGrpCall /subscription/subs_01/measurementGroups/nonexistent
297 Should Be True ${resp.status_code} == 500
299 Verify Create Measurement Group successful
301 [Documentation] Verify Create Measurement Group successful
303 ${json_value}= json_from_file ${CREATE_MSG_GRP_DATA}
304 ${resp}= PostMsgGrpCall /subscription/subs_01/measurementGroups/msg_grp_05 ${json_value}
305 Should Be True ${resp.status_code} == 201
307 Verify Create Measurement Group unsuccessful
309 [Documentation] Verify Create Measurement Group successful
311 ${json_value}= json_from_file ${CREATE_MSG_GRP_DATA}
312 ${resp}= PostMsgGrpCall /subscription/subs_01/measurementGroups/msg_grp_05 ${json_value}
313 Should Be True ${resp.status_code} == 409
315 Verify Delete Measurement Group successful
317 [Documentation] Verify Delete Measurement Group successful
319 ${resp}= DeleteMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_05
320 Should Be True ${resp.status_code} == 204
324 AddCreatePolicyResponeToMrSim
325 ${data}= Get Data From File ${MR_POLICY_RESPONSE_PNF_EXISTING}
326 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
327 ${resp}= PUT On Session mr_sim_session url=/clear data={"id" : "pmsh_cl_input_event"}
328 Should Be True ${resp.status_code} == 200
329 Sleep 2 Allow MR_SIM time to set expectation
330 ${resp} = PUT On Session mr_sim_session url=/expectation data=${data}
331 Should Be True ${resp.status_code} == 201
333 AddDeletePolicyResponeToMrSim
334 ${data}= Get Data From File ${MR_POLICY_RESPONSE_PNF_DELETED}
335 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
336 ${resp}= PUT On Session mr_sim_session url=/clear data={"id" : "pmsh_cl_input_event"}
337 Should Be True ${resp.status_code} == 200
338 Sleep 2 Allow MR_SIM time to set expectation
339 ${resp} = PUT On Session mr_sim_session url=/expectation data=${data}
340 Should Be True ${resp.status_code} == 201
343 ${data}= Get Data From File ${MR_AAI_PNF_CREATED}
344 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
345 ${resp}= PUT On Session mr_sim_session url=/clear data={"id" : "mr_aai_event"}
346 Should Be True ${resp.status_code} == 200
347 Sleep 2 Allow MR_SIM time to set expectation
348 ${resp} = PUT On Session mr_sim_session url=/expectation data=${data}
349 Should Be True ${resp.status_code} == 201
351 RemoveNewPnfFromMrSim
352 ${data}= Get Data From File ${MR_AAI_PNF_REMOVED}
353 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
354 ${resp}= PUT On Session mr_sim_session url=/clear data={"id" : "mr_aai_event"}
355 Should Be True ${resp.status_code} == 200
356 Sleep 2 Allow MR_SIM time to set expectation
357 ${resp} = PUT On Session mr_sim_session url=/expectation data=${data}
358 Should Be True ${resp.status_code} == 201
361 ${data}= Get Data From File ${MR_SIM_RESET}
362 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
363 ${resp}= PUT On Session mr_sim_session url=/reset
364 Should Be True ${resp.status_code} == 200
365 ${resp}= PUT On Session mr_sim_session url=/expectation data=${data}
366 Should Be True ${resp.status_code} == 201
369 [Arguments] ${url} ${url_path_param}
370 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
371 ${resp}= GET On Session pmsh_session url=${url} data={"path": {url_path_param}} expected_status=any
376 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
377 ${resp}= GET On Session pmsh_session url=${url}
380 GetMeasGrpWithNFSCall
382 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
383 ${resp}= GET On Session pmsh_session url=${url}
388 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
389 ${resp}= DELETE On Session pmsh_session url=${url} expected_status=anything
393 [Arguments] ${url} ${data}
394 Create Session pmsh_sub_session ${PMSH_BASE_URL} verify=false
395 ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
396 ${resp}= POST On Session pmsh_sub_session url=${url} json=${data} headers=${headers} expected_status=anything
400 [Arguments] ${url} ${data}
401 Create Session pmsh_sub_session ${PMSH_BASE_URL} verify=false
402 ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
403 ${resp}= POST On Session pmsh_sub_session url=${url} json=${data} headers=${headers} expected_status=anything
407 [Arguments] ${url} ${data}
408 Create Session pmsh_sub_session ${PMSH_BASE_URL} verify=false
409 ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
410 ${resp}= PUT On Session pmsh_sub_session url=${url} json=${data} headers=${headers} expected_status=anything