2 Documentation Verify SMO succeeds to subscribe for O2ims inventory changes notification and succeeds to receive notifications
3 # Library REST ssl_verify=False loglevel=DEBUG
4 Library REST ssl_verify=False
5 Resource smo_server_mock.robot
6 Variables ${EXECDIR}${/}test_configs.yaml
8 Suite Setup Set REST Headers And Clear Subscriptions
9 Suite Teardown Clear Subscriptions
12 ${ORAN_HOST_EXTERNAL_IP} ${ocloud.oran_o2_app.api.host}
13 ${ORAN_SERVICE_NODE_PORT} ${ocloud.oran_o2_app.api.node_port}
14 ${GLOBAL_OCLOUD_ID1} ${ocloud.oran_o2_app.g_ocloud_id}
15 ${SMO_TOKEN_DATA} ${ocloud.oran_o2_app.smo_token_data}
16 ${globalLocationId} ${ocloud.oran_o2_app.g_location_id}
18 ${ORAN_O2IMS_ENDPOINT} ${ocloud.oran_o2_app.api.protocol}://${ORAN_HOST_EXTERNAL_IP}:${ORAN_SERVICE_NODE_PORT}
20 ${SMO_INV_OBSERVER_URL} ${smo.service.protocol}://${smo.service.host}:${smo.service.port}${smo.o2ims_inventory_observer.path}
21 ${consumerSubscriptionId} 3F20D850-AF4F-A84F-FB5A-0AD585410361
23 # ${subscription_data} {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(neq,resourcePools.globalLocationId,${globalLocationId})" }
25 # ${subscription_data} {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "" }
28 s1, create a subscription
29 [documentation] This test case verifies ocloud inventory subscription management
30 [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Inventory_Subscription
32 ${invalid_subscription_data} input {"consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "" }
34 # Check error input logic
35 Expect Response Body ${CURDIR}/schemas/client_errors_properties.json
36 ${res} POST ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions ${invalid_subscription_data}
38 log ${res} level=DEBUG
39 Integer response status 400
43 # Expect Request ${CURDIR}/schemas/subscription_post_resp_properties.json
44 # Expect Response Body ${CURDIR}/schemas/subscription_post_resp_properties.json
45 Expect Response Body ${CURDIR}/schemas/subscription_properties.json
46 Set Headers {"Content-Type": "application/json"}
47 ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "" }
49 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceTypeInfo)" }
50 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceTypeInfo);(eq,resourceTypeId,id1234)" }
51 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceTypeInfo);(neq,resourceTypeId,id1234)" }
53 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(neq,objectType,ResourceTypeInfo);(neq,resourceTypeId,id1234)" }
55 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(neq,vendor,id1234)" }
57 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,resourceId,resourceid1234)|(eq,objectType,ResourceTypeInfo);(neq,resourceTypeId, typeid1234)" }
59 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceInfo);(neq,resourceId,resourceid1234)|(eq,objectType,ResourceTypeInfo);(neq,resourceTypeId, typeid1234)" }
61 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceInfo);(eq,resourceId,bc175af1-b6ff-4002-80db-4ee3c2d4fce6) | (eq,objectType,ResourceInfo);(eq,resourceId,resourceid5678)" }
63 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceInfo);(neq,resourceId,bc175af1-b6ff-4002-80db-4ee3c2d4fce6) | (eq,objectType,ResourceInfo);(eq,resourceId,resourceid5678)" }
65 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "[(eq,objectType,ResourceInfo);(neq,resourceId,bc175af1-b6ff-4002-80db-4ee3c2d4fce6) | (eq,objectType,ResourceInfo);(eq,resourceId,resourceid5678)]" }
67 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "[(eq,objectType,ResourceInfo);(eq,resourceId,resourceid1234)]" }
69 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "[()|()]" }
71 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "[]" }
73 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "()" }
75 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "();" }
77 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": ";()" }
79 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": ";();" }
81 # ${subscription_data} input {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceInfo);(eq,resourceId,resourceid1234);" }
83 ${res} POST ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions ${subscription_data}
84 # Output Schema request body ${CURDIR}/schemas/.output/subscription_post_req_properties.json
85 # Output Schema response body ${CURDIR}/schemas/.output/subscription_post_resp_properties.json
87 log ${res} level=DEBUG
88 Integer response status 201
91 # s2, query subscription list without filter
92 # [documentation] This test case verifies Query OCloud resourceTypes without filter
93 # [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Inventory_Subscription
96 Expect Response Body ${CURDIR}/schemas/subscriptions_properties.json
97 ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions
98 # Output Schema response body ${CURDIR}/schemas/.output/subscriptions_properties.json
100 log ${res} level=INFO
101 Integer response status 200
103 Array $ minItems=1 uniqueItems=true
105 Expect Response Body ${CURDIR}/schemas/subscriptions_properties.json
106 ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions?all_fields
108 log ${res} level=INFO
109 Integer response status 200
111 Array $ minItems=1 uniqueItems=true
113 # s3, query subscription list with filter
114 # [documentation] This test case verifies Query OCloud resourceTypes with filter
115 # [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Inventory_Subscription
118 Expect Response Body ${CURDIR}/schemas/subscriptions_properties.json
119 ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions?filter=(eq,consumerSubscriptionId,${consumerSubscriptionId})
121 log ${res} level=INFO
122 Integer response status 200
126 # s4, query a subscription detail
127 # [documentation] This test case verifies Query OCloud resourceTypes detail
128 # [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Inventory_Subscription
131 ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions
132 log ${res} level=INFO
133 ${subscriptionId} output $[0].subscriptionId
134 Set Global Variable ${subscriptionId}
136 #Expect Response Body ${CURDIR}/schemas/subscriptions_properties.json
137 ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions/${subscriptionId}
138 # Output Schema response body ${CURDIR}/schemas/.output/resourceType_properties.json
140 log ${res} level=INFO
141 Integer response status 200
145 # Check duplication logic
146 Expect Response Body ${CURDIR}/schemas/client_errors_properties.json
147 ${res} POST ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions ${subscription_data}
149 log ${res} level=DEBUG
150 Integer response status 400
153 # s5, smo receives notification upon o2ims inventory changes
154 # [documentation] This test case verifies Query OCloud resourcePools without filter
155 # [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Inventory_Subscription
158 # Expect Response Body ${CURDIR}/schemas/subscriptions_properties.json
159 ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions
160 #Output Schema response body ${CURDIR}/schemas/.output/resourcePools_properties.json
162 log ${res} level=INFO
163 Integer response status 200
165 Array $ minItems=1 uniqueItems=true
166 ${verify_data} Output {"httpRequest": {"path": "${smo.o2ims_inventory_observer.path}"},"times": {"atLeast": 1}}
167 SMO called by IMS verification ${verify_data}
170 # s6, delete a subscription
171 # [documentation] This test case verifies Query OCloud resourcePools with filter
172 # [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Inventory_Subscription
175 # Expect Response Body ${CURDIR}/schemas/subscriptions_properties.json
176 ${res} DELETE ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions/${subscriptionId}
177 # Output Schema response body ${CURDIR}/schemas/.output/resourcePools_properties.json
179 log ${res} level=INFO
180 Integer response status 200
181 # Array response body
182 # Array $ minItems=1 maxItems=1
184 # s7, smo stop receiving notification upon o2ims inventory changes
185 # [documentation] This test case verifies Query OCloud resourcePools detail
186 # [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Inventory_Subscription
188 # # Clear Expectations
189 # Expect Response Body ${CURDIR}/schemas/subscriptions_properties.json
190 # ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions/${subscriptionId}
191 # # Output Schema response body ${CURDIR}/schemas/.output/resourcePool_properties.json
193 # log ${res} level=INFO
194 # Integer response status 200
195 # Object response body
199 Set Headers {"accept": "application/json"}
200 Set Headers {"Authorization": "Bearer ${SMO_TOKEN_DATA}"}
204 ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions
205 log ${res} level=DEBUG
207 FOR ${sub} IN @{subs}
208 ${subscriptionId}= input ${sub}[subscriptionId]
209 ${res2} DELETE ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions/${subscriptionId}
210 log ${res2} level=DEBUG
213 Set REST Headers And Clear Subscriptions