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 ${CBS_BASE_URL} https://${CBS_SIM_IP_ADDRESS}:10443
18 ${SUBSCRIPTION_ENDPOINT} /subscription
20 ${MR_SIM_RESET} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/mr-sim-reset.json
21 ${MR_AAI_PNF_CREATED} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/aai-pnf-create.json
22 ${MR_AAI_PNF_REMOVED} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/aai-pnf-delete.json
23 ${MR_POLICY_RESPONSE_PNF_EXISTING} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/policy-sub-created-pnf-existing.json
24 ${MR_POLICY_RESPONSE_PNF_DELETED} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/policy-sub-deleted-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_SECOND_SUBSCRIPTION_DATA} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_second_subscription_request.json
28 ${CREATE_SUBSCRIPTION_BAD_DATA} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_subscription_bad_request.json
29 ${CREATE_SUBSCRIPTION_SCHEMA_ERROR_DATA} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/create_subscription_schema_error_request.json
32 Verify Get subscriptions with Network Functions None
34 [Documentation] Verify Get all subscriptions when there are no defined subscriptions
36 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
37 Should Be True ${resp.status_code} == 200
38 Should Contain ${resp.text} []
40 Verify Create Subscriptions API
42 [Documentation] Verify Create Subscription API
44 ${json_value}= json_from_file ${CREATE_SUBSCRIPTION_DATA}
45 ${resp}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
46 Should Be True ${resp.status_code} == 201
47 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} "/subs_01"
48 Should Be Equal As Strings ${resp.json()[0]['subscription']['subscriptionName']} subs_01
50 Verify database tables exist and are empty
52 [Documentation] Verify database has been created and is empty
54 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
55 Should Be True ${resp.status_code} == 200
56 Should Contain ${resp.text} []
58 Verify PNF detected in AAI when administrative state unlocked
60 [Documentation] Verify PNF detected when administrative state unlocked
62 SetAdministrativeStateToUnlocked
63 Sleep 31 Allow PMSH time to pick up changes in CBS config
64 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
65 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
66 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
67 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
68 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} PENDING_CREATE
70 Verify Policy response on MR is handled
72 [Documentation] Verify policy response on MR is handled
74 AddCreatePolicyResponeToMrSim
75 Sleep 31 seconds Ensure Policy response on MR is picked up
77 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
78 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
79 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
80 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
81 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} CREATED
83 Verify AAI event on MR detailing new PNF being detected is handled
85 [Documentation] Verify PNF created AAI event on MR is handled
88 Sleep 25 seconds Give sim time to set expectation
90 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
91 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
92 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
93 Should Be Equal As Strings ${resp.json()['networkFunctions'][1]['nfName']} pnf_newly_discovered
94 Should Be Equal As Strings ${resp.json()['networkFunctions'][1]['nfMgStatus']} PENDING_CREATE
96 Verify AAI event on MR detailing PNF being deleted is handled
98 [Documentation] Verify PNF deleted AAI event on MR is handled
100 RemoveNewPnfFromMrSim
101 Sleep 21 seconds Ensure AAI event on MR is picked up
103 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
104 Should Not Contain ${resp.text} pnf_newly_discovered
106 Verify Create Subscription API for duplicate subscription Id
108 [Documentation] Verify Create Subscription API for duplicate subscription Id
110 ${json_value}= json_from_file ${CREATE_SUBSCRIPTION_DATA}
111 ${resp}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
112 Should Be True ${resp.status_code} == 409
113 Should Contain ${resp.json()} subscription Name: subs_01 already exists.
115 Verify Create Subscription API for schema error
117 [Documentation] Verify Create Subscription API
119 ${json_value}= json_from_file ${CREATE_SUBSCRIPTION_SCHEMA_ERROR_DATA}
120 ${resp}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
121 Should Be True ${resp.status_code} == 400
122 Should Contain ${resp.json()['detail']} 'administrativeState' is a required property - 'subscription.measurementGroups.0.measurementGroup'
124 Verify Create Subscription API for filter values missing
126 [Documentation] Verify Create Subscription API
128 ${json_value}= json_from_file ${CREATE_SUBSCRIPTION_BAD_DATA}
129 ${resp}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
130 Should Be True ${resp.status_code} == 400
131 Should Contain ${resp.json()} At least one filter within nfFilter must not be empty
133 Verify Get Measurement Group with Network Functions
135 [Documentation] Verify Get Measurement Group with Network Functions by using MGName and SubName
137 ${resp}= GetMeasGrpWithNFSCall /subscription/subs_01/measurementGroups/msg_grp_01
138 ${nf_length}= Get length ${resp.json()['networkFunctions']}
139 Should Be True ${resp.status_code} == 200
140 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
141 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_01
142 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
143 Should be equal as numbers ${nf_length} 1
145 Verify Get single subscription with Network Functions
147 [Documentation] Verify Get single subscription with Network Functions by using subscription name
149 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT}/subs_01 ""
150 ${nf_length}= Get length ${resp.json()['subscription']['nfs']}
151 Should Be True ${resp.status_code} == 200
152 Should Be Equal As Strings ${resp.json()['subscription']['subscriptionName']} subs_01
153 Should Be Equal As Strings ${resp.json()['subscription']['nfs'][0]} pnf-existing
154 Should Be Equal As Strings ${resp.json()['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']} msg_grp_02
155 Should be equal as numbers ${nf_length} 1
157 Verify Get single subscription with Network Functions None
159 [Documentation] Verify Get single subscription with Network Functions when there is no defined subscription
161 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT}/sub_none ""
162 Should Be True ${resp.status_code} == 404
163 Should Be Equal As Strings ${resp.json()['error']} Subscription was not defined with the name : sub_none
165 Verify Update Measurement Group admin status from Unlocked to Locking
167 [Documentation] Verify Update Measurement Group admin status from Unlocked to Locking
169 ${json_string}= Set Variable {"administrativeState": "LOCKED"}
170 ${json}= evaluate json.loads('''${json_string}''') json
171 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_01/adminState ${json}
172 Should Be True ${resp.status_code} == 200
173 Should Contain ${resp.json()} Successfully updated admin state
174 ${resp}= GetMeasGrpWithNFSCall /subscription/subs_01/measurementGroups/msg_grp_01
175 ${nf_length}= Get length ${resp.json()['networkFunctions']}
176 Should Be True ${resp.status_code} == 200
177 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
178 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_01
179 Should Be Equal As Strings ${resp.json()['administrativeState']} LOCKING
180 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
181 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} PENDING_DELETE
182 Should be equal as numbers ${nf_length} 1
184 Verify Update Measurement Group admin status with locking in progress
186 [Documentation] Verify Update Measurement Group admin status with locking in progress
188 ${json_string}= Set Variable {"administrativeState": "LOCKED"}
189 ${json}= evaluate json.loads('''${json_string}''') json
190 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_01/adminState ${json}
191 Should Be True ${resp.status_code} == 409
192 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
194 Verify Measurement Group admin status update from Locking to Locked
196 [Documentation] Verify Measurement Group admin status update from Locking to Locked
198 AddDeletePolicyResponeToMrSim
199 Sleep 31 seconds Ensure Policy response on MR is picked up
201 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
202 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_01
203 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
204 Should Be Equal As Strings ${resp.json()['administrativeState']} LOCKED
205 ${nf_length}= Get length ${resp.json()['networkFunctions']}
206 Should be equal as numbers ${nf_length} 0
208 Verify Update Measurement Group admin status to unlocked with no Network Functions in Subscription
210 [Documentation] Verify Update Measurement Group admin status to unlocked with no Network Functions in Subscription
212 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT}/subs_01 ""
213 ${nf_length}= Get length ${resp.json()['subscription']['nfs']}
214 Should be equal as numbers ${nf_length} 0
215 ${json_string}= Set Variable {"administrativeState": "UNLOCKED"}
216 ${json}= evaluate json.loads('''${json_string}''') json
217 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_01/adminState ${json}
218 Should Be True ${resp.status_code} == 200
219 Should Contain ${resp.json()} Successfully updated admin state
220 ${resp}= GetMeasGrpWithNFSCall /subscription/subs_01/measurementGroups/msg_grp_01
221 ${nf_length}= Get length ${resp.json()['networkFunctions']}
222 Should Be True ${resp.status_code} == 200
223 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
224 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_01
225 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
226 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
227 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} PENDING_CREATE
228 Should be equal as numbers ${nf_length} 1
230 Verify Update Measurement Group admin status from Locked to Unlocked with Network function present in subscription
232 [Documentation] Verify Update Measurement Group admin status from Locked to Unlocked with Network function present in subscription
234 ${json_string}= Set Variable {"administrativeState": "UNLOCKED"}
235 ${json}= evaluate json.loads('''${json_string}''') json
236 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_02/adminState ${json}
237 Should Be True ${resp.status_code} == 200
238 Should Contain ${resp.json()} Successfully updated admin state
239 ${resp}= GetMeasGrpWithNFSCall /subscription/subs_01/measurementGroups/msg_grp_02
240 ${nf_length}= Get length ${resp.json()['networkFunctions']}
241 Should Be True ${resp.status_code} == 200
242 Should Be Equal As Strings ${resp.json()['subscriptionName']} subs_01
243 Should Be Equal As Strings ${resp.json()['measurementGroupName']} msg_grp_02
244 Should Be Equal As Strings ${resp.json()['administrativeState']} UNLOCKED
245 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfName']} pnf-existing
246 Should Be Equal As Strings ${resp.json()['networkFunctions'][0]['nfMgStatus']} PENDING_CREATE
247 Should be equal as numbers ${nf_length} 1
249 Verify Update Measurement Group admin status with no change
251 [Documentation] Verify Update Measurement Group admin status with no change
253 ${json_string}= Set Variable {"administrativeState": "UNLOCKED"}
254 ${json}= evaluate json.loads('''${json_string}''') json
255 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_01/adminState ${json}
256 Should Be True ${resp.status_code} == 400
257 Should Contain ${resp.json()} Measurement group is already in UNLOCKED state for sub name: subs_01 and meas group name: msg_grp_01
259 Verify Update Measurement Group admin status for invalid measurement group
261 [Documentation] Verify Update Measurement Group admin status for invalid measurement group
263 ${json_string}= Set Variable {"administrativeState": "LOCKED"}
264 ${json}= evaluate json.loads('''${json_string}''') json
265 ${resp}= PutMsgGrpStatusCall /subscription/subs_01/measurementGroups/msg_grp_11/adminState ${json}
266 Should Be True ${resp.status_code} == 400
267 Should Contain ${resp.json()} Requested measurement group not available for admin status update
269 Verify Get subscriptions with Network Functions
271 [Documentation] Verify Get subscriptions with Network Functions
273 ${json_value}= json_from_file ${CREATE_SECOND_SUBSCRIPTION_DATA}
274 ${resp_post}= PostSubscriptionCall ${SUBSCRIPTION_ENDPOINT} ${json_value}
275 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
276 ${nf_length_first}= Get length ${resp.json()[0]['subscription']['nfs']}
277 ${nf_length_second}= Get length ${resp.json()[1]['subscription']['nfs']}
278 Should Be True ${resp.status_code} == 200
279 Should Be Equal As Strings ${resp.json()[0]['subscription']['subscriptionName']} subs_01
280 Should Be Equal As Strings ${resp.json()[0]['subscription']['nfs'][0]} pnf-existing
281 Should Be Equal As Strings ${resp.json()[0]['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']} msg_grp_02
282 Should be equal as numbers ${nf_length_first} 1
283 Should Be Equal As Strings ${resp.json()[1]['subscription']['subscriptionName']} subs_02
284 Should Be Equal As Strings ${resp.json()[1]['subscription']['nfs'][0]} pnf-existing
285 Should Be Equal As Strings ${resp.json()[1]['subscription']['measurementGroups'][0]['measurementGroup']['measurementGroupName']} msg_grp_04
286 Should be equal as numbers ${nf_length_second} 1
290 SetAdministrativeStateToUnlocked
291 ${data}= Get Data From File ${CBS_EXPECTATION_ADMIN_STATE_UNLOCKED}
292 Create Session cbs_sim_session ${CBS_BASE_URL} verify=false
293 ${resp}= PUT On Session cbs_sim_session url=/clear data={"path": "/service_component_all/.*"}
294 Should Be True ${resp.status_code} == 200
295 Sleep 2 Allow CBS time to set expectation
296 ${resp} = PUT On Session cbs_sim_session url=/expectation data=${data}
297 Should Be True ${resp.status_code} == 201
299 AddCreatePolicyResponeToMrSim
300 ${data}= Get Data From File ${MR_POLICY_RESPONSE_PNF_EXISTING}
301 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
302 ${resp}= PUT On Session mr_sim_session url=/clear data={"id" : "pmsh_cl_input_event"}
303 Should Be True ${resp.status_code} == 200
304 Sleep 2 Allow MR_SIM time to set expectation
305 ${resp} = PUT On Session mr_sim_session url=/expectation data=${data}
306 Should Be True ${resp.status_code} == 201
308 AddDeletePolicyResponeToMrSim
309 ${data}= Get Data From File ${MR_POLICY_RESPONSE_PNF_DELETED}
310 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
311 ${resp}= PUT On Session mr_sim_session url=/clear data={"id" : "pmsh_cl_input_event"}
312 Should Be True ${resp.status_code} == 200
313 Sleep 2 Allow MR_SIM time to set expectation
314 ${resp} = PUT On Session mr_sim_session url=/expectation data=${data}
315 Should Be True ${resp.status_code} == 201
318 ${data}= Get Data From File ${MR_AAI_PNF_CREATED}
319 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
320 ${resp}= PUT On Session mr_sim_session url=/clear data={"id" : "mr_aai_event"}
321 Should Be True ${resp.status_code} == 200
322 Sleep 2 Allow MR_SIM time to set expectation
323 ${resp} = PUT On Session mr_sim_session url=/expectation data=${data}
324 Should Be True ${resp.status_code} == 201
326 RemoveNewPnfFromMrSim
327 ${data}= Get Data From File ${MR_AAI_PNF_REMOVED}
328 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
329 ${resp}= PUT On Session mr_sim_session url=/clear data={"id" : "mr_aai_event"}
330 Should Be True ${resp.status_code} == 200
331 Sleep 2 Allow MR_SIM time to set expectation
332 ${resp} = PUT On Session mr_sim_session url=/expectation data=${data}
333 Should Be True ${resp.status_code} == 201
336 ${data}= Get Data From File ${MR_SIM_RESET}
337 Create Session mr_sim_session ${MR_SIM_BASE_URL} verify=false
338 ${resp}= PUT On Session mr_sim_session url=/reset
339 Should Be True ${resp.status_code} == 200
340 ${resp}= PUT On Session mr_sim_session url=/expectation data=${data}
341 Should Be True ${resp.status_code} == 201
344 [Arguments] ${url} ${url_path_param}
345 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
346 ${resp}= GET On Session pmsh_session url=${url} data={"path": {url_path_param}} expected_status=any
351 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
352 ${resp}= GET On Session pmsh_session url=${url}
355 GetMeasGrpWithNFSCall
357 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
358 ${resp}= GET On Session pmsh_session url=${url}
362 [Arguments] ${url} ${data}
363 Create Session pmsh_sub_session ${PMSH_BASE_URL} verify=false
364 ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
365 ${resp}= POST On Session pmsh_sub_session url=${url} json=${data} headers=${headers} expected_status=anything
369 [Arguments] ${url} ${data}
370 Create Session pmsh_sub_session ${PMSH_BASE_URL} verify=false
371 ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
372 ${resp}= PUT On Session pmsh_sub_session url=${url} json=${data} headers=${headers} expected_status=anything