--- /dev/null
+*** Settings ***
+Documentation Verify SMO succeeds to create alarmSubscription, receive alarm notification, and query alarm list
+# Library REST ssl_verify=False loglevel=DEBUG
+Library REST ssl_verify=False
+
+Resource ssh_helper.robot
+
+Variables ${EXECDIR}${/}test_configs.yaml
+
+# Suite Setup Set REST Headers
+Suite Setup Set REST Headers And Clear Subscriptions
+Suite Teardown Clear Subscriptions
+
+*** Variables ***
+${HOST} ${ocloud.ssh.host}
+${PORT} ${ocloud.ssh.port}
+${USERNAME} ${ocloud.ssh.username}
+${PASSWORD} ${ocloud.ssh.password}
+${OPENRC} ${ocloud.ssh.openrc}
+
+${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_ALARM_OBSERVER_URL} ${smo.service.protocol}://${smo.service.host}:${smo.service.port}${smo.o2ims_alarm_observer.path}
+${consumerSubscriptionId} 3F20D850-AF4F-A84F-FB5A-0AD585410361
+
+# ${subscription_data} {"callback": "${SMO_ALARM_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(neq,resourcePools.globalLocationId,${globalLocationId})" }
+
+# ${subscription_data} {"callback": "${SMO_ALARM_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "" }
+
+*** Test Cases ***
+s1, create alarmSubscription
+ [documentation] This test case verifies create alarmSubscription
+ [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Alarm_Subscription
+
+ Clear Expectations
+ # Expect Response Body ${CURDIR}/schemas/alarm_subscription_post_resp_properties.json
+ Expect Response Body ${CURDIR}/schemas/alarm_subscription_properties.json
+
+ Set Headers {"Content-Type": "application/json"}
+ ${subscription_data} input {"callback": "${SMO_ALARM_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "" }
+
+ # ${subscription_data} input {"callback": "${SMO_ALARM_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,resourceTypeID,typeid1234)" }
+
+ # ${subscription_data} input {"callback": "${SMO_ALARM_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(neq,resourceTypeID,typeid1234)" }
+
+ # ${subscription_data} input {"callback": "${SMO_ALARM_OBSERVER_URL}", "consumerSubscriptionId": "${consumerSubscriptionId}", "filter": "(eq,perceivedSeverity,1)" }
+
+ ${res} POST ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions ${subscription_data}
+ # Output Schema request body ${CURDIR}/schemas/.output/alarm_subscription_post_req_properties.json
+ # Output Schema response body ${CURDIR}/schemas/.output/alarm_subscription_post_resp_properties.json
+ Clear Expectations
+ log ${res} level=DEBUG
+ Integer response status 201
+ Object response body
+
+# s2, query alarmSubscription list
+ # [documentation] This test case verifies query alarmSubscription list
+ # [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Alarm_Subscription
+
+ Clear Expectations
+ Expect Response Body ${CURDIR}/schemas/alarm_subscriptions_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions
+ # Output Schema response body ${CURDIR}/schemas/.output/alarm_subscriptions_properties.json
+ Clear Expectations
+ log ${res} level=INFO
+ Integer response status 200
+ Array response body
+ Array $ minItems=1 uniqueItems=true
+
+ # all_fields
+ Expect Response Body ${CURDIR}/schemas/alarm_subscriptions_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions?all_fields
+ # Output Schema response body ${CURDIR}/schemas/.output/alarm_subscriptions_properties.json
+ Clear Expectations
+ log ${res} level=INFO
+ Integer response status 200
+ Array response body
+ Array $ minItems=1 uniqueItems=true
+
+# s?, query alarmSubscription list with filter
+# [documentation] This test case verifies Query OCloud resourceTypes with filter
+# [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Alarm_Subscription
+
+ # Clear Expectations
+ Expect Response Body ${CURDIR}/schemas/alarm_subscriptions_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions?filter=(eq,consumerSubscriptionId,${consumerSubscriptionId})
+ Clear Expectations
+ log ${res} level=INFO
+ Integer response status 200
+ Array response body
+ Array $ minItems=1
+
+# s3, query alarmSubscription detail
+# [documentation] This test case verifies Query OCloud resourceTypes detail
+# [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Alarm_Subscription
+
+ # Clear Expectations
+ # GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions/${subscriptionId}
+ ${subscriptionId} output $[0].alarmSubscriptionId
+ # Clear Expectations
+ Expect Response Body ${CURDIR}/schemas/alarm_subscription_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions/${subscriptionId}
+ # Output Schema response body ${CURDIR}/schemas/.output/alarm_subscriptions_properties.json
+ Clear Expectations
+ log ${res} level=INFO
+ Integer response status 200
+ Object response body
+
+ # all_fields
+ Expect Response Body ${CURDIR}/schemas/alarm_subscription_allfields_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions/${subscriptionId}?all_fields
+ # Output Schema response body ${CURDIR}/schemas/.output/alarm_subscription_allfields_properties.json
+ Clear Expectations
+ log ${res} level=DEBUG
+ 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-infrastructureMonitoring/v1/alarmSubscriptions ${subscription_data}
+ # Output Schema response body ${CURDIR}/schemas/.output/client_errors_properties.json
+ Clear Expectations
+ log ${res} level=DEBUG
+ Integer response status 400
+ Object response body
+
+# s4, Stx/WRCP generates an alarm change event and check SMO succeeds to receive a alarm change notification
+# [documentation] This test case verifies Query OCloud resourcePools without filter
+# [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Alarm_Subscription
+
+ # ${stdout} ${stderr} ${rc}= Assert Alarm With Disk Usage
+ # log ${rc} level=DEBUG
+ # Should Be Equal ${rc} 0
+
+
+# s5, query alarm list without filter
+
+ Clear Expectations
+ Expect Response Body ${CURDIR}/schemas/alarms_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarms
+ # Output Schema response body ${CURDIR}/schemas/.output/alarms_properties.json
+ Clear Expectations
+ log ${res} level=DEBUG
+ Integer response status 200
+ Array response body
+ Array $ minItems=1 uniqueItems=true
+
+ # # query with filter
+ # Expect Response Body ${CURDIR}/schemas/alarms_properties.json
+ # ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarms?all_fields&filter=(eq,perceivedSeverity,1)
+ # # Output Schema response body ${CURDIR}/schemas/.output/alarms_properties.json
+ # Clear Expectations
+ # log ${res} level=DEBUG
+ # Integer response status 200
+ # Array response body
+ # Array $ minItems=1 uniqueItems=true
+
+ # extract resourceTypeId for query with fitler test
+ ${resourceTypeId} output $[0].resourceTypeId
+
+# s6, query alarm list with filter
+ Clear Expectations
+ # GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureInventory/v1/resourceTypes?filter=(eq,name,pserver)
+ # ${resourceTypeId} output $[0].resourceTypeId
+ Expect Response Body ${CURDIR}/schemas/alarms_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarms?filter=(eq,resourceTypeID,${resourceTypeId})
+ Clear Expectations
+ log ${res} level=DEBUG
+ Integer response status 200
+ Array response body
+ Array $ minItems=1 uniqueItems=true
+ Expect Response Body ${CURDIR}/schemas/alarms_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarms {"filter": "(eq,resourceTypeID,${resourceTypeId};eq,alarmAcknowledged,false)"}
+ Clear Expectations
+ log ${res} level=DEBUG
+ Integer response status 200
+ Array response body
+ Array $ minItems=1 uniqueItems=true
+
+
+# s7, query alarm detail
+ Expect Response Body ${CURDIR}/schemas/alarms_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarms?all_fields
+ # Output Schema response body ${CURDIR}/schemas/.output/alarms_properties.json
+ Clear Expectations
+ log ${res} level=DEBUG
+ Integer response status 200
+ Array response body
+ Array $ minItems=1 uniqueItems=true
+
+ # all fields
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarms?all_fields
+ log ${res} level=DEBUG
+ Integer response status 200
+ Array response body
+ Array $ minItems=1 uniqueItems=true
+
+ # alarm detail
+ ${alarmEventRecordId} output $[0].alarmEventRecordId
+ Expect Response Body ${CURDIR}/schemas/alarm_properties.json
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarms/${alarmEventRecordId}
+ # Output Schema response body ${CURDIR}/schemas/.output/alarm_properties.json
+ Clear Expectations
+ log ${res} level=DEBUG
+ Integer response status 200
+
+ # all fields
+ ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarms/${alarmEventRecordId}?all_fields
+ log ${res} level=DEBUG
+ Integer response status 200
+ Object response body
+ Object $.extensions
+ # Boolean $.extensions['mgmt_affecting']
+ String $.extensions['alarm_state']
+ # Boolean $.extensions['degrade_affecting']
+ # Boolean $.extensions['service_affecting']
+ String $.extensions['alarm_type']
+ String $.extensions['entity_type_id']
+ String $.extensions['probable_cause']
+ String $.extensions['alarm_id']
+ String $.extensions['entity_instance_id']
+ String $.extensions['proposed_repair_action']
+ # Boolean $.extensions['suppression']
+ String $.extensions['suppression_status']
+
+# s8, delete the alarmSubscription
+# [documentation] This test case verifies Query OCloud resourcePools with filter
+# [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Alarm_Subscription
+
+ # Clear Expectations
+ # Expect Response Body ${CURDIR}/schemas/alarm_subscriptions_properties.json
+ ${res} DELETE ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions/${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
+
+# s9, Stx/WRCP generates an alarm change event and check SMO cannot receive any alarm change notification
+# [documentation] This test case verifies Query OCloud resourcePools detail
+# [tags] ORAN_Compliance ORAN_O2 ORAN_O2IMS ORAN_O2IMS_Alarm_Subscription
+
+ # # Clear Expectations
+ # Expect Response Body ${CURDIR}/schemas/alarm_subscriptions_properties.json
+ # ${res} GET ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions/${subscriptionId}
+ # # Output Schema response body ${CURDIR}/schemas/.output/resourcePool_properties.json
+ # Clear Expectations
+ # log ${res} level=INFO
+ # Integer response status 200
+ # Object response body
+
+# clear the alarm condition
+ ${stdout} ${stderr} ${rc}= Clear Alarm With Disk Usage
+# log ${rc} level=DEBUG
+# Should Be Equal ${rc} 0
+
+
+*** 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-infrastructureMonitoring/v1/alarmSubscriptions
+ log ${res} level=DEBUG
+ @{subs} output $
+ FOR ${sub} IN @{subs}
+ ${subscriptionId}= input ${sub}[alarmSubscriptionId]
+ ${res2} DELETE ${ORAN_O2IMS_ENDPOINT}/o2ims-infrastructureMonitoring/v1/alarmSubscriptions/${subscriptionId}
+ log ${res2} level=DEBUG
+ END
+
+Set REST Headers And Clear Subscriptions
+ Set REST Headers
+ Clear Subscriptions