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
30 Verify Get subscriptions with Network Functions None
32 [Documentation] Verify Get all subscriptions when there are no defined subscriptions
34 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
35 Should Be True ${resp.status_code} == 200
36 Should Contain ${resp.text} []
38 Verify Create Subscriptions API
40 [Documentation] Verify Create Subscription API
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
48 Verify database tables exist and are empty
50 [Documentation] Verify database has been created and is empty
52 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
53 Should Be True ${resp.status_code} == 200
54 Should Contain ${resp.text} []
56 Verify PNF detected in AAI when administrative state unlocked
58 [Documentation] Verify PNF detected when administrative state unlocked
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
66 Verify Policy response on MR is handled
68 [Documentation] Verify policy response on MR is handled
70 AddCreatePolicyResponeToMrSim
71 Sleep 31 seconds Ensure Policy response on MR is picked up
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
79 Verify AAI event on MR detailing new PNF being detected is handled
81 [Documentation] Verify PNF created AAI event on MR is handled
84 Sleep 25 seconds Give sim time to set expectation
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
92 Verify AAI event on MR detailing PNF being deleted is handled
94 [Documentation] Verify PNF deleted AAI event on MR is handled
97 Sleep 21 seconds Ensure AAI event on MR is picked up
99 ${resp}= GetMeasGrpCall /subscription/subs_01/measurementGroups/msg_grp_01
100 Should Not Contain ${resp.text} pnf_newly_discovered
102 Verify Create Subscription API for duplicate subscription Id
104 [Documentation] Verify Create Subscription API for duplicate subscription Id
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.
111 Verify Create Subscription API for schema error
113 [Documentation] Verify Create Subscription API
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'
120 Verify Create Subscription API for filter values missing
122 [Documentation] Verify Create Subscription API
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
129 Verify Get Measurement Group with Network Functions
131 [Documentation] Verify Get Measurement Group with Network Functions by using MGName and SubName
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
141 Verify Get single subscription with Network Functions
143 [Documentation] Verify Get single subscription with Network Functions by using subscription name
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
153 Verify Get single subscription with Network Functions None
155 [Documentation] Verify Get single subscription with Network Functions when there is no defined subscription
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
161 Verify Update Measurement Group admin status from Unlocked to Locking
163 [Documentation] Verify Update Measurement Group admin status from Unlocked to Locking
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
180 Verify Update Measurement Group admin status with locking in progress
182 [Documentation] Verify Update Measurement Group admin status with locking in progress
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
190 Verify Measurement Group admin status update from Locking to Locked
192 [Documentation] Verify Measurement Group admin status update from Locking to Locked
194 AddDeletePolicyResponeToMrSim
195 Sleep 31 seconds Ensure Policy response on MR is picked up
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
204 Verify Update Measurement Group admin status to unlocked
206 [Documentation] Verify Update Measurement Group admin status to unlocked with no Network Functions in Subscription
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
223 Verify Update Measurement Group admin status from Locked to Unlocked with Network function present in subscription
225 [Documentation] Verify Update Measurement Group admin status from Locked to Unlocked with Network function present in subscription
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
242 Verify Update Measurement Group admin status with no change
244 [Documentation] Verify Update Measurement Group admin status with no change
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
252 Verify Update Measurement Group admin status for invalid measurement group
254 [Documentation] Verify Update Measurement Group admin status for invalid measurement group
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
262 Verify Get subscriptions with Network Functions
264 [Documentation] Verify Get subscriptions with Network Functions
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
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
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
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
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
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
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
335 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
336 ${resp}= GET On Session pmsh_session url=${url}
339 GetMeasGrpWithNFSCall
341 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
342 ${resp}= GET On Session pmsh_session url=${url}
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
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