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_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
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"
34 Verify Create Subscriptions API
36 [Documentation] Verify Create Subscription API
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
44 Verify database tables exist and are empty
46 [Documentation] Verify database has been created and is empty
48 ${resp}= GetSubsCall ${SUBSCRIPTION_ENDPOINT} ""
49 Should Be True ${resp.status_code} == 200
50 Should Contain ${resp.text} []
52 Verify PNF detected in AAI when administrative state unlocked
54 [Documentation] Verify PNF detected when administrative state unlocked
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
64 Verify Policy response on MR is handled
66 [Documentation] Verify policy response on MR is handled
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
76 Verify AAI event on MR detailing new PNF being detected is handled
78 [Documentation] Verify PNF created AAI event on MR is handled
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
88 Verify AAI event on MR detailing PNF being deleted is handled
90 [Documentation] Verify PNF deleted AAI event on MR is handled
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
97 Verify Create Subscription API for duplicate subscription Id
99 [Documentation] Verify Create Subscription API
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.
106 Verify Create Subscription API for schema error
108 [Documentation] Verify Create Subscription API
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'
115 Verify Create Subscription API for filter values missing
117 [Documentation] Verify Create Subscription API
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
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
136 SimulatePolicyResponse
137 [Arguments] ${expected_contents}
138 ${json_value}= json_from_file ${expected_contents}
139 ${resp}= PostMrCall ${POLICY_PUBLISH_MR_TOPIC} ${json_value}
141 Should Be Equal As Strings ${resp.status_code} 200
142 ${count}= Evaluate $resp.json().get('count')
143 log 'JSON Response Code:'${resp}
146 [Arguments] ${expected_contents}
147 ${json_value}= json_from_file ${expected_contents}
148 ${resp}= PostMrCall ${AAI_MR_TOPIC} ${json_value}
150 Should Be Equal As Strings ${resp.status_code} 200
151 ${count}= Evaluate $resp.json().get('count')
152 log 'JSON Response Code:'${resp}
155 [Arguments] ${expected_contents}
156 ${json_value}= json_from_file ${expected_contents}
157 ${resp}= PostMrCall ${AAI_MR_TOPIC} ${json_value}
159 Should Be Equal As Strings ${resp.status_code} 200
160 ${count}= Evaluate $resp.json().get('count')
161 log 'JSON Response Code:'${resp}
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}
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}}
178 Create Session pmsh_session ${PMSH_BASE_URL} verify=false
179 ${resp}= GET On Session pmsh_session url=${url}
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