Merge "Add O2 IMS compliance automation test scripts."
[it/test.git] / test_scripts / O2IMS_Compliance_Test / o2ims_compliance / 7.3.3_SMO_succeeds_to_subscribe_for_O2ims_inventory_changes_notification_and_succeeds_to_receive_notifications.robot
diff --git a/test_scripts/O2IMS_Compliance_Test/o2ims_compliance/7.3.3_SMO_succeeds_to_subscribe_for_O2ims_inventory_changes_notification_and_succeeds_to_receive_notifications.robot b/test_scripts/O2IMS_Compliance_Test/o2ims_compliance/7.3.3_SMO_succeeds_to_subscribe_for_O2ims_inventory_changes_notification_and_succeeds_to_receive_notifications.robot
new file mode 100644 (file)
index 0000000..17f665a
--- /dev/null
@@ -0,0 +1,215 @@
+*** Settings ***
+Documentation  Verify SMO succeeds to subscribe for O2ims inventory changes notification and succeeds to receive notifications
+# Library  REST       ssl_verify=False    loglevel=DEBUG
+Library  REST       ssl_verify=False
+Resource             smo_server_mock.robot
+Variables              ${EXECDIR}${/}test_configs.yaml
+
+Suite Setup            Set REST Headers And Clear Subscriptions
+Suite Teardown         Clear Subscriptions
+
+*** Variables ***
+${ORAN_HOST_EXTERNAL_IP}    ${ocloud.oran_o2_app.api.host}
+${ORAN_SERVICE_NODE_PORT}   ${ocloud.oran_o2_app.api.node_port}
+${GLOBAL_OCLOUD_ID1}        ${ocloud.oran_o2_app.g_ocloud_id}
+${SMO_TOKEN_DATA}           ${ocloud.oran_o2_app.smo_token_data}
+${globalLocationId}         ${ocloud.oran_o2_app.g_location_id}
+
+${ORAN_O2IMS_ENDPOINT}  ${ocloud.oran_o2_app.api.protocol}://${ORAN_HOST_EXTERNAL_IP}:${ORAN_SERVICE_NODE_PORT}
+
+${SMO_INV_OBSERVER_URL}     ${smo.service.protocol}://${smo.service.host}:${smo.service.port}${smo.o2ims_inventory_observer.path}
+${consumerSubscriptionId}   3F20D850-AF4F-A84F-FB5A-0AD585410361
+
+# ${subscription_data}  {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(neq,resourcePools.globalLocationId,${globalLocationId})" }
+
+# ${subscription_data}  {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "" }
+
+*** Test Cases ***
+s1, create a subscription
+    [documentation]  This test case verifies ocloud inventory subscription management
+    [tags]  ORAN_Compliance     ORAN_O2     ORAN_O2IMS    ORAN_O2IMS_Inventory_Subscription
+
+    ${invalid_subscription_data}  input     {"consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "" }
+
+# Check error input logic
+    Expect Response Body        ${CURDIR}/schemas/client_errors_properties.json
+    ${res}     POST   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions     ${invalid_subscription_data}
+    Clear Expectations
+    log      ${res}   level=DEBUG
+    Integer  response status    400
+    Object   response body
+
+    Clear Expectations
+    # Expect Request        ${CURDIR}/schemas/subscription_post_resp_properties.json
+    # Expect Response Body        ${CURDIR}/schemas/subscription_post_resp_properties.json
+    Expect Response Body        ${CURDIR}/schemas/subscription_properties.json
+    Set Headers     {"Content-Type": "application/json"}
+    ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceTypeInfo)" }
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceTypeInfo);(eq,resourceTypeId,id1234)" }
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceTypeInfo);(neq,resourceTypeId,id1234)" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(neq,objectType,ResourceTypeInfo);(neq,resourceTypeId,id1234)" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(neq,vendor,id1234)" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,resourceId,resourceid1234)|(eq,objectType,ResourceTypeInfo);(neq,resourceTypeId, typeid1234)" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceInfo);(neq,resourceId,resourceid1234)|(eq,objectType,ResourceTypeInfo);(neq,resourceTypeId, typeid1234)" }
+
+    # ${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)" }
+
+    # ${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)" }
+
+    # ${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)]" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "[(eq,objectType,ResourceInfo);(eq,resourceId,resourceid1234)]" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "[()|()]" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "[]" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "()" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "();" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": ";()" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": ";();" }
+
+    # ${subscription_data}  input     {"callback": "${SMO_INV_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,objectType,ResourceInfo);(eq,resourceId,resourceid1234);" }
+
+    ${res}     POST   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions     ${subscription_data}
+    # Output Schema     request body   ${CURDIR}/schemas/.output/subscription_post_req_properties.json
+    # Output Schema   response body   ${CURDIR}/schemas/.output/subscription_post_resp_properties.json
+    Clear Expectations
+    log      ${res}   level=DEBUG
+    Integer  response status    201
+    Object   response body
+
+#  s2, query subscription list without filter
+#      [documentation]  This test case verifies Query OCloud resourceTypes without filter
+#      [tags]  ORAN_Compliance     ORAN_O2     ORAN_O2IMS    ORAN_O2IMS_Inventory_Subscription
+
+    # Clear Expectations
+    Expect Response Body        ${CURDIR}/schemas/subscriptions_properties.json
+    ${res}     GET   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions
+    # Output Schema   response body   ${CURDIR}/schemas/.output/subscriptions_properties.json
+    Clear Expectations
+    log      ${res}   level=INFO
+    Integer     response status    200
+    Array       response body
+    Array       $   minItems=1  uniqueItems=true
+
+    Expect Response Body        ${CURDIR}/schemas/subscriptions_properties.json
+    ${res}     GET   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions?all_fields
+    Clear Expectations
+    log      ${res}   level=INFO
+    Integer     response status    200
+    Array       response body
+    Array       $   minItems=1  uniqueItems=true
+
+# s3, query subscription list with filter
+#      [documentation]  This test case verifies Query OCloud resourceTypes with filter
+#      [tags]  ORAN_Compliance     ORAN_O2     ORAN_O2IMS    ORAN_O2IMS_Inventory_Subscription
+
+    # Clear Expectations
+    Expect Response Body        ${CURDIR}/schemas/subscriptions_properties.json
+    ${res}     GET   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions?filter=(eq,consumerSubscriptionId,${consumerSubscriptionId})
+    Clear Expectations
+    log      ${res}   level=INFO
+    Integer     response status    200
+    Array       response body
+    Array       $   minItems=1
+
+#  s4, query a subscription detail
+#      [documentation]  This test case verifies Query OCloud resourceTypes detail
+#      [tags]  ORAN_Compliance     ORAN_O2     ORAN_O2IMS    ORAN_O2IMS_Inventory_Subscription
+
+     Clear Expectations
+     ${res}  GET   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions
+     log   ${res}   level=INFO
+    ${subscriptionId}      output   $[0].subscriptionId
+    Set Global Variable   ${subscriptionId}
+     Clear Expectations
+    #Expect Response Body        ${CURDIR}/schemas/subscriptions_properties.json
+    ${res}     GET   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions/${subscriptionId}
+    # Output Schema   response body   ${CURDIR}/schemas/.output/resourceType_properties.json
+    Clear Expectations
+    log      ${res}   level=INFO
+    Integer     response status    200
+    Object       response body
+
+
+# Check duplication logic
+    Expect Response Body        ${CURDIR}/schemas/client_errors_properties.json
+    ${res}     POST   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions     ${subscription_data}
+    Clear Expectations
+    log      ${res}   level=DEBUG
+    Integer  response status    400
+    Object   response body
+
+# s5, smo receives notification upon o2ims inventory changes
+#      [documentation]  This test case verifies Query OCloud resourcePools without filter
+#      [tags]  ORAN_Compliance     ORAN_O2     ORAN_O2IMS    ORAN_O2IMS_Inventory_Subscription
+
+    # Clear Expectations
+    # Expect Response Body        ${CURDIR}/schemas/subscriptions_properties.json
+    ${res}     GET   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions
+    #Output Schema   response body   ${CURDIR}/schemas/.output/resourcePools_properties.json
+    Clear Expectations
+     log      ${res}   level=INFO
+     Integer     response status    200
+     Array       response body
+     Array       $   minItems=1  uniqueItems=true
+    ${verify_data}   Output  {"httpRequest": {"path": "${smo.o2ims_inventory_observer.path}"},"times": {"atLeast": 1}}
+    SMO called by IMS verification   ${verify_data}
+
+
+#  s6, delete a subscription
+#      [documentation]  This test case verifies Query OCloud resourcePools with filter
+#      [tags]  ORAN_Compliance     ORAN_O2     ORAN_O2IMS    ORAN_O2IMS_Inventory_Subscription
+
+    # Clear Expectations
+    # Expect Response Body        ${CURDIR}/schemas/subscriptions_properties.json
+    ${res}     DELETE   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions/${subscriptionId}
+    # Output Schema   response body   ${CURDIR}/schemas/.output/resourcePools_properties.json
+    Clear Expectations
+    log      ${res}   level=INFO
+    Integer     response status    200
+    # Array       response body
+    # Array       $   minItems=1  maxItems=1
+
+# s7, smo stop receiving notification upon o2ims inventory changes
+#     [documentation]  This test case verifies Query OCloud resourcePools detail
+#     [tags]  ORAN_Compliance     ORAN_O2     ORAN_O2IMS    ORAN_O2IMS_Inventory_Subscription
+
+    # # Clear Expectations
+    # Expect Response Body        ${CURDIR}/schemas/subscriptions_properties.json
+    # ${res}     GET   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions/${subscriptionId}
+    # # Output Schema   response body   ${CURDIR}/schemas/.output/resourcePool_properties.json
+    # Clear Expectations
+    # log      ${res}   level=INFO
+    # Integer     response status    200
+    # Object       response body
+
+*** Keywords ***
+Set REST Headers
+    Set Headers     {"accept": "application/json"}
+    Set Headers     {"Authorization": "Bearer ${SMO_TOKEN_DATA}"}
+
+Clear Subscriptions
+    Clear Expectations
+    ${res}     GET   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions
+    log     ${res}   level=DEBUG
+    @{subs}        output  $
+    FOR     ${sub}      IN      @{subs}
+        ${subscriptionId}=  input   ${sub}[subscriptionId]
+        ${res2}     DELETE   ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/subscriptions/${subscriptionId}
+        log     ${res2}   level=DEBUG
+    END
+
+Set REST Headers And Clear Subscriptions
+    Set REST Headers
+    Clear Subscriptions