From 85d3e1af08b2d94bbd6ebf3e9c3611294bc2e8f4 Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Mon, 2 Dec 2024 16:01:50 +0100 Subject: [PATCH 1/5] New test and changes on libraries parameter names --- .../CAPIF Api Events/capif_events_api.robot | 46 ++++++++++++++----- tests/libraries/api_events/bodyRequests.py | 24 +++++----- 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/tests/features/CAPIF Api Events/capif_events_api.robot b/tests/features/CAPIF Api Events/capif_events_api.robot index ce01444..3b52365 100644 --- a/tests/features/CAPIF Api Events/capif_events_api.robot +++ b/tests/features/CAPIF Api Events/capif_events_api.robot @@ -171,8 +171,8 @@ Invoker receives Service API Invocation events ${request_body}= Create Events Subscription ... events=@{events_list} - ... notificationDestination=${NOTIFICATION_DESTINATION_URL}/testing - ... eventFilters=${event_filters} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... event_filters=${event_filters} ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions ... json=${request_body} @@ -243,8 +243,8 @@ Invoker subscribe to Service API Available and Unavailable events ${request_body}= Create Events Subscription ... events=@{events_list} - ... notificationDestination=${NOTIFICATION_DESTINATION_URL}/testing - ... eventFilters=${event_filters} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... event_filters=${event_filters} ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions ... json=${request_body} @@ -313,8 +313,8 @@ Invoker subscribe to Service API Update ${request_body}= Create Events Subscription ... events=@{events_list} - ... notificationDestination=${NOTIFICATION_DESTINATION_URL}/testing - ... eventFilters=${event_filters} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... event_filters=${event_filters} ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions ... json=${request_body} @@ -357,7 +357,7 @@ Provider subscribe to API Invoker events ${events_list}= Create List API_INVOKER_ONBOARDED API_INVOKER_UPDATED API_INVOKER_OFFBOARDED ${request_body}= Create Events Subscription ... events=@{events_list} - ... notificationDestination=${NOTIFICATION_DESTINATION_URL}/testing + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -377,7 +377,7 @@ Provider subscribe to API Invoker events ... http://${CAPIF_CALLBACK_IP}:${CAPIF_CALLBACK_PORT}/netapp_new_callback Set To Dictionary ... ${request_body} - ... notificationDestination=${new_notification_destination} + ... notification_destination=${new_notification_destination} ${resp}= Put Request Capif ... ${url.path} ... ${request_body} @@ -387,7 +387,7 @@ Provider subscribe to API Invoker events # Check Update Check Response Variable Type And Values ${resp} 200 APIInvokerEnrolmentDetails - ... notificationDestination=${new_notification_destination} + ... notification_destination=${new_notification_destination} # Remove Invoker from CCF ${resp}= Delete Request Capif @@ -432,7 +432,7 @@ Invoker subscribed to ACL update event ${events_list}= Create List ACCESS_CONTROL_POLICY_UPDATE ${request_body}= Create Events Subscription ... events=@{events_list} - ... notificationDestination=${NOTIFICATION_DESTINATION_URL}/testing + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -516,7 +516,7 @@ Provider receives an ACL unavailable event when invoker remove Security Context. ${events_list}= Create List ACCESS_CONTROL_POLICY_UNAVAILABLE ${request_body}= Create Events Subscription ... events=@{events_list} - ... notificationDestination=${NOTIFICATION_DESTINATION_URL}/testing + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -590,7 +590,7 @@ Invoker receives an Invoker Authorization Revoked and ACL unavailable event when ${events_list}= Create List ACCESS_CONTROL_POLICY_UNAVAILABLE API_INVOKER_AUTHORIZATION_REVOKED ${request_body}= Create Events Subscription ... events=@{events_list} - ... notificationDestination=${NOTIFICATION_DESTINATION_URL}/testing + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -651,6 +651,28 @@ Invoker receives an Invoker Authorization Revoked and ACL unavailable event when ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} +Creates a new individual CAPIF Event Subscription without supported features attribute + [Tags] capif_api_events-13 smoke + # Default Invoker Registration and Onboarding + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + ${request_body}= Create Events Subscription supported_features=${NONE} + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Results + Check Response Variable Type And Values + ... ${resp} + ... 400 + ... ProblemDetails + ... title=Bad Request + ... status=400 + ... detail=supportedFeatures not present in request + ... cause=supportedFeatures not present *** Keywords *** Create Events From InvocationLogs diff --git a/tests/libraries/api_events/bodyRequests.py b/tests/libraries/api_events/bodyRequests.py index 17fd1b5..20d82a4 100644 --- a/tests/libraries/api_events/bodyRequests.py +++ b/tests/libraries/api_events/bodyRequests.py @@ -1,18 +1,18 @@ -def create_events_subscription(events=["SERVICE_API_AVAILABLE", "API_INVOKER_ONBOARDED"], notificationDestination="http://robot.testing", eventFilters=None, eventReq=None, requestTestNotification=None, supportedFeatures=None, websockNotifConfig=None): +def create_events_subscription(events=["SERVICE_API_AVAILABLE", "API_INVOKER_ONBOARDED"], notification_destination="http://robot.testing", event_filters=None, event_req=None, request_test_notification=None, supported_features="0", websock_notif_config=None): event_subscription = { "events": events, - "notificationDestination": notificationDestination, + "notificationDestination": notification_destination, } - if eventFilters != None: - event_subscription['eventFilters'] = eventFilters - if eventReq != None: - event_subscription['eventReq'] = eventReq - if requestTestNotification != None: - event_subscription['requestTestNotification'] = requestTestNotification - if supportedFeatures != None: - event_subscription['supportedFeatures'] = supportedFeatures - if websockNotifConfig != None: - event_subscription['websockNotifConfig'] = websockNotifConfig + if event_filters != None: + event_subscription['eventFilters'] = event_filters + if event_req != None: + event_subscription['eventReq'] = event_req + if request_test_notification != None: + event_subscription['requestTestNotification'] = request_test_notification + if supported_features != None: + event_subscription['supportedFeatures'] = supported_features + if websock_notif_config != None: + event_subscription['websockNotifConfig'] = websock_notif_config return event_subscription -- GitLab From 9cfbccc6f898b50e712325d28ea4cd7585e16cb9 Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Mon, 2 Dec 2024 16:32:45 +0100 Subject: [PATCH 2/5] Fixed events test suite with enhanced feature --- tests/features/CAPIF Api Events/capif_events_api.robot | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/features/CAPIF Api Events/capif_events_api.robot b/tests/features/CAPIF Api Events/capif_events_api.robot index 3b52365..18a9758 100644 --- a/tests/features/CAPIF Api Events/capif_events_api.robot +++ b/tests/features/CAPIF Api Events/capif_events_api.robot @@ -173,6 +173,7 @@ Invoker receives Service API Invocation events ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... event_filters=${event_filters} + ... supported_features=4 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions ... json=${request_body} @@ -245,6 +246,7 @@ Invoker subscribe to Service API Available and Unavailable events ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... event_filters=${event_filters} + ... supported_features=4 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions ... json=${request_body} @@ -315,6 +317,7 @@ Invoker subscribe to Service API Update ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... event_filters=${event_filters} + ... supported_features=4 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions ... json=${request_body} @@ -358,6 +361,7 @@ Provider subscribe to API Invoker events ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... supported_features=4 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -377,7 +381,7 @@ Provider subscribe to API Invoker events ... http://${CAPIF_CALLBACK_IP}:${CAPIF_CALLBACK_PORT}/netapp_new_callback Set To Dictionary ... ${request_body} - ... notification_destination=${new_notification_destination} + ... notificationDestination=${new_notification_destination} ${resp}= Put Request Capif ... ${url.path} ... ${request_body} @@ -387,7 +391,7 @@ Provider subscribe to API Invoker events # Check Update Check Response Variable Type And Values ${resp} 200 APIInvokerEnrolmentDetails - ... notification_destination=${new_notification_destination} + ... notificationDestination=${new_notification_destination} # Remove Invoker from CCF ${resp}= Delete Request Capif @@ -433,6 +437,7 @@ Invoker subscribed to ACL update event ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... supported_features=4 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -517,6 +522,7 @@ Provider receives an ACL unavailable event when invoker remove Security Context. ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... supported_features=4 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} -- GitLab From c0a0c706a4bb2c3a6019cd242630a1b95fe350ac Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Wed, 4 Dec 2024 10:32:23 +0100 Subject: [PATCH 3/5] Added new test Suite --- tests/features/Api Status/__init__.robot | 2 + tests/features/Api Status/api_status.robot | 286 ++++++++ .../CAPIF Api Events/capif_events_api.robot | 691 ++++++++++++++++-- 3 files changed, 925 insertions(+), 54 deletions(-) create mode 100644 tests/features/Api Status/__init__.robot create mode 100644 tests/features/Api Status/api_status.robot diff --git a/tests/features/Api Status/__init__.robot b/tests/features/Api Status/__init__.robot new file mode 100644 index 0000000..9ac8f7a --- /dev/null +++ b/tests/features/Api Status/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Force Tags api_status \ No newline at end of file diff --git a/tests/features/Api Status/api_status.robot b/tests/features/Api Status/api_status.robot new file mode 100644 index 0000000..fd67ace --- /dev/null +++ b/tests/features/Api Status/api_status.robot @@ -0,0 +1,286 @@ +*** Settings *** +Resource /opt/robot-tests/tests/resources/common.resource +Library /opt/robot-tests/tests/libraries/bodyRequests.py +Library XML +Library String +Resource /opt/robot-tests/tests/resources/common/basicRequests.robot +Resource ../../resources/common.resource + +Suite Teardown Reset Testing Environment +Test Setup Reset Testing Environment +Test Teardown Reset Testing Environment + + +*** Variables *** +${API_INVOKER_NOT_REGISTERED} not-valid +${SUBSCRIBER_ID_NOT_VALID} not-valid +${SUBSCRIPTION_ID_NOT_VALID} not-valid + + +*** Test Cases *** +Invoker receives Service API Invocation events + [Tags] api_status-1 mockserver smoke + + # Initialize Mock server + Init Mock Server + + # Default Invoker Registration and Onboarding + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + # Register APF + ${register_user_info_provider}= Provider Default Registration + + ${aef_id}= Set Variable ${register_user_info_provider['aef_id']} + + # Subscribe to events + ${events_list}= Create List SERVICE_API_AVAILABLE SERVICE_API_UNAVAILABLE + ${aef_ids}= Create List ${register_user_info_provider['aef_id']} + ${event_filter}= Create Capif Event Filter aefIds=${aef_ids} + ${event_filters}= Create List ${event_filter} + + ${request_body}= Create Events Subscription + ... events=@{events_list} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... event_filters=${event_filters} + ... supported_features=4 + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 EventSubscription + ${subscriber_id} ${subscription_id}= Check Event Location Header ${resp} + + # Publish one api + ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api + ... ${register_user_info_provider} + ... service_1 + + # Provider Remove service_1 published API + ${resp}= Delete Request Capif + ... ${resource_url.path} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${APF_PROVIDER_USERNAME} + + Status Should Be 204 ${resp} + + # Check Event Notifications + ## Create check Events to ensure all notifications were received + ${service_api_available_resources}= Create List ${resource_url} + ${service_api_unavailable_resources}= Create List ${resource_url} + ${events_expected}= Create Expected Events For Service API Notifications + ... subscription_id=${subscription_id} + ... service_api_available_resources=${service_api_available_resources} + ... service_api_unavailable_resources=${service_api_unavailable_resources} + ## Check Events Expected towards received notifications at mock server + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + + + +*** Keywords *** +Create Events From InvocationLogs + [Arguments] + ... ${subscription_id} + ... ${invocation_log} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} + IF ${events_expected} == ${NONE} + ${events_expected}= Create List + END + + # Now we create the expected events received at notification server according to logs sent to loggin service in order to check if all are present. + ${invocation_log_base}= Copy Dictionary ${invocation_log} deepcopy=True + # Store log array because each log will be notified in one Event Notification + ${invocation_log_logs}= Copy List ${invocation_log_base['logs']} + # Remove logs array from invocationLog data + Remove From Dictionary ${invocation_log_base} logs + + FOR ${log} IN @{invocation_log_logs} + Log Dictionary ${log} + ${invocation_logs}= Copy Dictionary ${invocation_log_base} deepcopy=True + + # Get Event Enum for this result + ${event_enum}= Set Variable + IF ${log['result']} >= 200 and ${log['result']} < 300 + ${event_enum}= Set Variable SERVICE_API_INVOCATION_SUCCESS + ELSE + ${event_enum}= Set Variable SERVICE_API_INVOCATION_FAILURE + END + # Create a log array with only one component + ${log_list}= Create List ${log} + # Setup logs array with previously created list + Set To Dictionary ${invocation_logs} logs=${log_list} + IF "${event_detail_expected}" != "${TRUE}" + ${invocation_logs}= Set Variable ${NONE} + END + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... ${event_enum} + ... invocationLogs=${invocation_logs} + Append To List ${events_expected} ${event_expected} + END + + RETURN ${events_expected} + +Create Expected Events For Service API Notifications + [Arguments] + ... ${subscription_id} + ... ${service_api_available_resources}=${NONE} + ... ${service_api_unavailable_resources}=${NONE} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} + + IF ${events_expected} == ${NONE} + ${events_expected}= Create List + END + IF "${service_api_available_resources}" != "${NONE}" + FOR ${service_api_available_resource} IN @{service_api_available_resources} + Log ${service_api_available_resource} + ${api_id}= Fetch From Right ${service_api_available_resource.path} / + + IF "${event_detail_expected}" != "${TRUE}" + ${api_id}= Set Variable ${NONE} + END + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... SERVICE_API_AVAILABLE + ... apiIds=${api_id} + Append To List ${events_expected} ${event_expected} + END + END + + IF "${service_api_unavailable_resources}" != "${NONE}" + FOR ${service_api_unavailable_resource} IN @{service_api_unavailable_resources} + Log ${service_api_unavailable_resource} + ${api_id}= Fetch From Right ${service_api_unavailable_resource.path} / + IF "${event_detail_expected}" != "${TRUE}" + ${api_id}= Set Variable ${NONE} + END + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... SERVICE_API_UNAVAILABLE + ... apiIds=${api_id} + Append To List ${events_expected} ${event_expected} + END + END + + RETURN ${events_expected} + +Create Expected Api Invoker Events + [Arguments] + ... ${subscription_id} + ... ${api_invoker_id} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} + + IF ${events_expected} == ${NONE} + ${events_expected}= Create List + END + + ${api_invoker_id_used}= Set Variable ${api_invoker_id} + IF "${event_detail_expected}" != "${TRUE}" + ${api_invoker_id_used}= Set Variable ${NONE} + END + ## Create events expected + # Create Notification Events expected to be received for Onboard event + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... API_INVOKER_ONBOARDED + ... apiInvokerIds=${api_invoker_id_used} + Append To List ${events_expected} ${event_expected} + + # Create Notification Events expected to be received for Updated event + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... API_INVOKER_UPDATED + ... apiInvokerIds=${api_invoker_id_used} + Append To List ${events_expected} ${event_expected} + + # Create Notification Events expected to be received for Offboard event + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... API_INVOKER_OFFBOARDED + ... apiInvokerIds=${api_invoker_id_used} + Append To List ${events_expected} ${event_expected} + + RETURN ${events_expected} + +Create Expected Access Control Policy Update Event + [Arguments] + ... ${subscription_id} + ... ${service_api_id} + ... ${api_invoker_policies} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} + + IF ${events_expected} == ${NONE} + ${events_expected}= Create List + END + ${acc_ctrl_pol_list}= Create Dictionary apiId=${service_api_id} apiInvokerPolicies=${api_invoker_policies} + Check Variable ${acc_ctrl_pol_list} AccessControlPolicyListExt + + IF "${event_detail_expected}" != "${TRUE}" + ${acc_ctrl_pol_list}= Set Variable ${NONE} + END + + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... ACCESS_CONTROL_POLICY_UPDATE + ... accCtrlPolList=${acc_ctrl_pol_list} + Append To List ${events_expected} ${event_expected} + + RETURN ${events_expected} + +Create Expected Access Control Policy Unavailable + [Arguments] ${subscription_id} + ... ${events_expected}=${NONE} + + IF ${events_expected} == ${NONE} + ${events_expected}= Create List + END + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... ACCESS_CONTROL_POLICY_UNAVAILABLE + Append To List ${events_expected} ${event_expected} + + RETURN ${events_expected} + +Create Expected Api Invoker Authorization Revoked + [Arguments] ${subscription_id} ${events_expected}=${NONE} + IF ${events_expected} == ${NONE} + ${events_expected}= Create List + END + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... API_INVOKER_AUTHORIZATION_REVOKED + Append To List ${events_expected} ${event_expected} + RETURN ${events_expected} + +Create Expected Service Update Event + [Arguments] + ... ${subscription_id} + ... ${service_api_resource} + ... ${service_api_descriptions} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} + + IF ${events_expected} == ${NONE} + ${events_expected}= Create List + END + ${api_id}= Fetch From Right ${service_api_resource.path} / + Set To Dictionary ${service_api_descriptions} apiId=${api_id} + + IF "${event_detail_expected}" != "${TRUE}" + ${service_api_descriptions}= Set Variable ${NONE} + END + ${events_expected}= Create List + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... SERVICE_API_UPDATE + ... serviceAPIDescriptions=${service_api_descriptions} + Append To List ${events_expected} ${event_expected} + RETURN ${events_expected} diff --git a/tests/features/CAPIF Api Events/capif_events_api.robot b/tests/features/CAPIF Api Events/capif_events_api.robot index 18a9758..9e5795f 100644 --- a/tests/features/CAPIF Api Events/capif_events_api.robot +++ b/tests/features/CAPIF Api Events/capif_events_api.robot @@ -19,7 +19,7 @@ ${SUBSCRIPTION_ID_NOT_VALID} not-valid *** Test Cases *** Creates a new individual CAPIF Event Subscription - [Tags] capif_api_events-1 smoke + [Tags] capif_api_events-1 smoke # Default Invoker Registration and Onboarding ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding @@ -141,7 +141,7 @@ Deletes an individual CAPIF Event Subscription with invalid SubscriptionId ... cause=You are not the owner of this resource Invoker receives Service API Invocation events - [Tags] capif_api_events-6 mockserver smoke + [Tags] capif_api_events-6 mockserver smoke # Initialize Mock server Init Mock Server @@ -210,7 +210,7 @@ Invoker receives Service API Invocation events ... ${subscription_id} ... ${request_body} ## Check Events Expected towards received notifications at mock server - Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} Invoker subscribe to Service API Available and Unavailable events [Tags] capif_api_events-7 mockserver @@ -281,7 +281,7 @@ Invoker subscribe to Service API Available and Unavailable events ... service_api_available_resources=${service_api_available_resources} ... service_api_unavailable_resources=${service_api_unavailable_resources} ## Check Events Expected towards received notifications at mock server - Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} Invoker subscribe to Service API Update [Tags] capif_api_events-8 mockserver @@ -343,12 +343,562 @@ Invoker subscribe to Service API Update # Check Event Notifications ## Create check Events to ensure all notifications were received - ${events_expected}= Create Expected Service Update Event ${subscription_id} ${resource_url} ${service_api_description_modified} + ${events_expected}= Create Expected Service Update Event + ... ${subscription_id} + ... ${resource_url} + ... ${service_api_description_modified} + ## Check Events Expected towards received notifications at mock server + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + +Provider subscribe to API Invoker events + [Tags] capif_api_events-9 mockserver + + # Initialize Mock server + Init Mock Server + + # Register APF + ${register_user_info_provider}= Provider Default Registration + + # Subscribe to events + ${events_list}= Create List API_INVOKER_ONBOARDED API_INVOKER_UPDATED API_INVOKER_OFFBOARDED + ${request_body}= Create Events Subscription + ... events=@{events_list} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... supported_features=4 + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${AMF_PROVIDER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 EventSubscription + ${subscriber_id} ${subscription_id}= Check Event Location Header ${resp} + + # Register INVOKER + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + # Update Invoker onboarded information + ${new_notification_destination}= Set Variable + ... http://${CAPIF_CALLBACK_IP}:${CAPIF_CALLBACK_PORT}/netapp_new_callback + Set To Dictionary + ... ${request_body} + ... notificationDestination=${new_notification_destination} + ${resp}= Put Request Capif + ... ${url.path} + ... ${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Update + Check Response Variable Type And Values ${resp} 200 APIInvokerEnrolmentDetails + ... notificationDestination=${new_notification_destination} + + # Remove Invoker from CCF + ${resp}= Delete Request Capif + ... ${url.path} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + Call Method ${CAPIF_USERS} remove_capif_users_entry ${url.path} + + # Check Remove + Should Be Equal As Strings ${resp.status_code} 204 + + # Check Event Notifications + ## Create check Events to ensure all notifications were received + ${events_expected}= Create Expected Api Invoker Events + ... ${subscription_id} + ... ${register_user_info_invoker['api_invoker_id']} + ## Check Events Expected towards received notifications at mock server + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + +Invoker subscribed to ACL update event + [Tags] capif_api_events-10 mockserver smoke + + # Initialize Mock server + Init Mock Server + + # Register APF + ${register_user_info_provider}= Provider Default Registration + + # Publish one api + ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api + ... ${register_user_info_provider} + + # Store apiId1 + ${service_api_id}= Set Variable ${service_api_description_published['apiId']} + + # Register INVOKER + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + # Subscribe to events + ${events_list}= Create List ACCESS_CONTROL_POLICY_UPDATE + ${request_body}= Create Events Subscription + ... events=@{events_list} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... supported_features=4 + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${AMF_PROVIDER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 EventSubscription + ${subscriber_id} ${subscription_id}= Check Event Location Header ${resp} + + # Test + ${discover_response}= Get Request Capif + ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${register_user_info_provider['aef_id']} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + Check Response Variable Type And Values ${discover_response} 200 DiscoveredAPIs + + # create Security Context + ${request_service_security_body}= Create Service Security From Discover Response + ... http://${CAPIF_HOSTNAME}:${CAPIF_HTTP_PORT}/test + ... ${discover_response} + ${resp}= Put Request Capif + ... /capif-security/v1/trustedInvokers/${register_user_info_invoker['api_invoker_id']} + ... json=${request_service_security_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Service Security + Check Response Variable Type And Values ${resp} 201 ServiceSecurity + ${resource_url}= Check Location Header ${resp} ${LOCATION_SECURITY_RESOURCE_REGEX} + + ${resp}= Get Request Capif + ... /access-control-policy/v1/accessControlPolicyList/${service_api_id}?aef-id=${register_user_info_provider['aef_id']} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${AEF_PROVIDER_USERNAME} + + Check Response Variable Type And Values ${resp} 200 AccessControlPolicyList + # Check returned values + Should Not Be Empty ${resp.json()['apiInvokerPolicies']} + Length Should Be ${resp.json()['apiInvokerPolicies']} 1 + Should Be Equal As Strings + ... ${resp.json()['apiInvokerPolicies'][0]['apiInvokerId']} + ... ${register_user_info_invoker['api_invoker_id']} + + ${api_invoker_policies}= Set Variable ${resp.json()['apiInvokerPolicies']} + + # Check Event Notifications + ## Create check Events to ensure all notifications were received + ${events_expected}= Create Expected Access Control Policy Update Event + ... ${subscription_id} + ... ${service_api_id} + ... ${api_invoker_policies} + ## Check Events Expected towards received notifications at mock server + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + +Provider receives an ACL unavailable event when invoker remove Security Context. + [Tags] capif_api_events-11 mockserver + + # Initialize Mock server + Init Mock Server + + # Register APF + ${register_user_info_provider}= Provider Default Registration + + # Publish one api + ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api + ... ${register_user_info_provider} + + # Store apiId1 + ${serviceApiId}= Set Variable ${service_api_description_published['apiId']} + + # Register INVOKER + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + # Subscribe to events + ${events_list}= Create List ACCESS_CONTROL_POLICY_UNAVAILABLE + ${request_body}= Create Events Subscription + ... events=@{events_list} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... supported_features=4 + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 EventSubscription + ${subscriber_id} ${subscription_id}= Check Event Location Header ${resp} + + # Test + ${discover_response}= Get Request Capif + ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${register_user_info_provider['aef_id']} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + Check Response Variable Type And Values ${discover_response} 200 DiscoveredAPIs + + # create Security Context + ${request_service_security_body}= Create Service Security From Discover Response + ... http://${CAPIF_HOSTNAME}:${CAPIF_HTTP_PORT}/test + ... ${discover_response} + ${resp}= Put Request Capif + ... /capif-security/v1/trustedInvokers/${register_user_info_invoker['api_invoker_id']} + ... json=${request_service_security_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Service Security + Check Response Variable Type And Values ${resp} 201 ServiceSecurity + ${resource_url}= Check Location Header ${resp} ${LOCATION_SECURITY_RESOURCE_REGEX} + + # Remove Security Context by Provider + ${resp}= Delete Request Capif + ... /capif-security/v1/trustedInvokers/${register_user_info_invoker['api_invoker_id']} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${AEF_PROVIDER_USERNAME} + + Status Should Be 204 ${resp} + + # Check Event Notifications + ## Create check Events to ensure all notifications were received + ${events_expected}= Create Expected Access Control Policy Unavailable ${subscription_id} + ## Check Events Expected towards received notifications at mock server + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + +Invoker receives an Invoker Authorization Revoked and ACL unavailable event when Provider revoke Invoker Authorization. + [Tags] capif_api_events-12 mockserver smoke + + # Initialize Mock server + Init Mock Server + + # Register APF + ${register_user_info_provider}= Provider Default Registration + + # Publish one api + ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api + ... ${register_user_info_provider} + + # Store apiId1 + ${serviceApiId}= Set Variable ${service_api_description_published['apiId']} + + # Register INVOKER + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + # Subscribe to events + ${events_list}= Create List ACCESS_CONTROL_POLICY_UNAVAILABLE API_INVOKER_AUTHORIZATION_REVOKED + ${request_body}= Create Events Subscription + ... events=@{events_list} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... supported_features=4 + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 EventSubscription + ${subscriber_id} ${subscription_id}= Check Event Location Header ${resp} + + # Test + ${discover_response}= Get Request Capif + ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${register_user_info_provider['aef_id']} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + Check Response Variable Type And Values ${discover_response} 200 DiscoveredAPIs + + ${api_ids}= Get Api Ids From Discover Response ${discover_response} + + # create Security Context + ${request_service_security_body}= Create Service Security From Discover Response + ... http://${CAPIF_HOSTNAME}:${CAPIF_HTTP_PORT}/test + ... ${discover_response} + ${resp}= Put Request Capif + ... /capif-security/v1/trustedInvokers/${register_user_info_invoker['api_invoker_id']} + ... json=${request_service_security_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Service Security + Check Response Variable Type And Values ${resp} 201 ServiceSecurity + ${resource_url}= Check Location Header ${resp} ${LOCATION_SECURITY_RESOURCE_REGEX} + + # Revoke Security Context by Provider + ${request_body}= Create Security Notification Body + ... ${register_user_info_invoker['api_invoker_id']} + ... ${api_ids} + ${resp}= Post Request Capif + ... /capif-security/v1/trustedInvokers/${register_user_info_invoker['api_invoker_id']}/delete + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${AEF_PROVIDER_USERNAME} + + # Check Results + Status Should Be 204 ${resp} + + # Check Event Notifications + ## Create check Events to ensure all notifications were received + ${events_expected}= Create Expected Access Control Policy Unavailable ${subscription_id} + ${events_expected}= Create Expected Api Invoker Authorization Revoked + ... ${subscription_id} + ... events_expected=${events_expected} + ## Check Events Expected towards received notifications at mock server + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + +Creates a new individual CAPIF Event Subscription without supported features attribute + [Tags] capif_api_events-13 smoke + # Default Invoker Registration and Onboarding + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + ${request_body}= Create Events Subscription supported_features=${NONE} + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Results + Check Response Variable Type And Values + ... ${resp} + ... 400 + ... ProblemDetails + ... title=Bad Request + ... status=400 + ... detail=supportedFeatures not present in request + ... cause=supportedFeatures not present + +Invoker receives Service API Invocation events without Enhanced Event Report + [Tags] capif_api_events-14 mockserver smoke + + # Initialize Mock server + Init Mock Server + + # Register APF + ${register_user_info}= Provider Default Registration + + # Publish one api + Publish Service Api ${register_user_info} + + # Register INVOKER + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + ${discover_response}= Get Request Capif + ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + ${api_ids} ${api_names}= Get Api Ids And Names From Discover Response ${discover_response} + + # Subscribe to events + ${events_list}= Create List SERVICE_API_INVOCATION_SUCCESS SERVICE_API_INVOCATION_FAILURE + ${aef_ids}= Create List ${register_user_info['aef_id']} + ${event_filter}= Create Capif Event Filter aefIds=${aef_ids} + ${event_filters}= Create List ${event_filter} + + ${request_body}= Create Events Subscription + ... events=@{events_list} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... event_filters=${event_filters} + ... supported_features=0 + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 EventSubscription + ${subscriber_id} ${subscription_id}= Check Event Location Header ${resp} + + # Create Log Entry, emulate success and failure api invocation + ${results}= Create List 200 400 + ${request_body}= Create Log Entry + ... ${register_user_info['aef_id']} + ... ${register_user_info_invoker['api_invoker_id']} + ... ${api_ids} + ... ${api_names} + ... results=${results} + ${resp}= Post Request Capif + ... /api-invocation-logs/v1/${register_user_info['aef_id']}/logs + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${AEF_PROVIDER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 InvocationLog + ${resource_url}= Check Location Header ${resp} ${LOCATION_LOGGING_RESOURCE_REGEX} + + # Check Event Notifications + ## Create check Events to ensure all notifications were received + ${events_expected}= Create Events From InvocationLogs + ... ${subscription_id} + ... ${request_body} + ... event_detail_expected=${FALSE} ## Check Events Expected towards received notifications at mock server - Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} -Provider subscribe to API Invoker events - [Tags] capif_api_events-9 mockserver +Invoker subscribe to Service API Available and Unavailable events without Enhanced Event Report + [Tags] capif_api_events-15 mockserver + + # Initialize Mock server + Init Mock Server + + # Register APF + ${register_user_info_provider}= Provider Default Registration + + # Publish one api + ${service_api_description_published_1} ${resource_url_1} ${request_body}= Publish Service Api + ... ${register_user_info_provider} + + # Register INVOKER + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + ${discover_response}= Get Request Capif + ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + ${api_ids} ${api_names}= Get Api Ids And Names From Discover Response ${discover_response} + + # Subscribe to events + ${events_list}= Create List SERVICE_API_AVAILABLE SERVICE_API_UNAVAILABLE + ${aef_ids}= Create List ${register_user_info_provider['aef_id']} + ${event_filter}= Create Capif Event Filter aefIds=${aef_ids} + ${event_filters}= Create List ${event_filter} + + ${request_body}= Create Events Subscription + ... events=@{events_list} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... event_filters=${event_filters} + ... supported_features=0 + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 EventSubscription + ${subscriber_id} ${subscription_id}= Check Event Location Header ${resp} + + # Provider publish new API + ${service_api_description_published_2} ${resource_url_2} ${request_body}= Publish Service Api + ... ${register_user_info_provider} + ... service_2 + + # Provider Remove service_1 published API + ${resp}= Delete Request Capif + ... ${resource_url_1.path} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${APF_PROVIDER_USERNAME} + + Status Should Be 204 ${resp} + + # Check Event Notifications + ## Create check Events to ensure all notifications were received + ${service_api_available_resources}= Create List ${resource_url_2} + ${service_api_unavailable_resources}= Create List ${resource_url_1} + ${events_expected}= Create Expected Events For Service API Notifications + ... subscription_id=${subscription_id} + ... service_api_available_resources=${service_api_available_resources} + ... service_api_unavailable_resources=${service_api_unavailable_resources} + ... event_detail_expected=${FALSE} + ## Check Events Expected towards received notifications at mock server + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + +Invoker subscribe to Service API Update without Enhanced Event Report + [Tags] capif_api_events-16 mockserver + + # Initialize Mock server + Init Mock Server + + # Register APF + ${register_user_info_provider}= Provider Default Registration + + # Publish one api + ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api + ... ${register_user_info_provider} + + # Register INVOKER + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + ${discover_response}= Get Request Capif + ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + ${api_ids} ${api_names}= Get Api Ids And Names From Discover Response ${discover_response} + + # Subscribe to events + ${events_list}= Create List SERVICE_API_UPDATE + ${aef_ids}= Create List ${register_user_info_provider['aef_id']} + ${event_filter}= Create Capif Event Filter aefIds=${aef_ids} + ${event_filters}= Create List ${event_filter} + + ${request_body}= Create Events Subscription + ... events=@{events_list} + ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... event_filters=${event_filters} + ... supported_features=0 + ${resp}= Post Request Capif + ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions + ... json=${request_body} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${INVOKER_USERNAME} + + # Check Results + Check Response Variable Type And Values ${resp} 201 EventSubscription + ${subscriber_id} ${subscription_id}= Check Event Location Header ${resp} + + # Update Service API + ${service_api_description_modified}= Create Service Api Description service_1_modified + ${resp}= Put Request Capif + ... ${resource_url.path} + ... json=${service_api_description_modified} + ... server=${CAPIF_HTTPS_URL} + ... verify=ca.crt + ... username=${APF_PROVIDER_USERNAME} + + Check Response Variable Type And Values ${resp} 200 ServiceAPIDescription + ... apiName=service_1_modified + + # Check Event Notifications + ## Create check Events to ensure all notifications were received + ${events_expected}= Create Expected Service Update Event + ... ${subscription_id} + ... ${resource_url} + ... ${service_api_description_modified} + ... event_detail_expected=${FALSE} + ## Check Events Expected towards received notifications at mock server + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + +Provider subscribe to API Invoker events without Enhanced Event Report + [Tags] capif_api_events-17 mockserver # Initialize Mock server Init Mock Server @@ -361,7 +911,7 @@ Provider subscribe to API Invoker events ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing - ... supported_features=4 + ... supported_features=0 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -410,11 +960,12 @@ Provider subscribe to API Invoker events ${events_expected}= Create Expected Api Invoker Events ... ${subscription_id} ... ${register_user_info_invoker['api_invoker_id']} + ... event_detail_expected=${FALSE} ## Check Events Expected towards received notifications at mock server - Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} -Invoker subscribed to ACL update event - [Tags] capif_api_events-10 mockserver smoke +Invoker subscribed to ACL update event without Enhanced Event Report + [Tags] capif_api_events-18 mockserver # Initialize Mock server Init Mock Server @@ -437,7 +988,7 @@ Invoker subscribed to ACL update event ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing - ... supported_features=4 + ... supported_features=0 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -495,11 +1046,12 @@ Invoker subscribed to ACL update event ... ${subscription_id} ... ${service_api_id} ... ${api_invoker_policies} + ... event_detail_expected=${FALSE} ## Check Events Expected towards received notifications at mock server - Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} -Provider receives an ACL unavailable event when invoker remove Security Context. - [Tags] capif_api_events-11 mockserver +Provider receives an ACL unavailable event when invoker remove Security Context without Enhanced Event Report + [Tags] capif_api_events-19 mockserver # Initialize Mock server Init Mock Server @@ -522,7 +1074,7 @@ Provider receives an ACL unavailable event when invoker remove Security Context. ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing - ... supported_features=4 + ... supported_features=0 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -569,12 +1121,13 @@ Provider receives an ACL unavailable event when invoker remove Security Context. # Check Event Notifications ## Create check Events to ensure all notifications were received - ${events_expected}= Create Expected Access Control Policy Unavailable ${subscription_id} + ${events_expected}= Create Expected Access Control Policy Unavailable + ... ${subscription_id} ## Check Events Expected towards received notifications at mock server - Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} -Invoker receives an Invoker Authorization Revoked and ACL unavailable event when Provider revoke Invoker Authorization. - [Tags] capif_api_events-12 mockserver smoke +Invoker receives an Invoker Authorization Revoked and ACL unavailable event when Provider revoke Invoker Authorization without Enhanced Event Report + [Tags] capif_api_events-20 mockserver # Initialize Mock server Init Mock Server @@ -597,6 +1150,7 @@ Invoker receives an Invoker Authorization Revoked and ACL unavailable event when ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing + ... supported_features=0 ${resp}= Post Request Capif ... /capif-events/v1/${register_user_info_provider['amf_id']}/subscriptions ... json=${request_body} @@ -655,34 +1209,16 @@ Invoker receives an Invoker Authorization Revoked and ACL unavailable event when ... ${subscription_id} ... events_expected=${events_expected} ## Check Events Expected towards received notifications at mock server - Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} - -Creates a new individual CAPIF Event Subscription without supported features attribute - [Tags] capif_api_events-13 smoke - # Default Invoker Registration and Onboarding - ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding - - ${request_body}= Create Events Subscription supported_features=${NONE} - ${resp}= Post Request Capif - ... /capif-events/v1/${register_user_info_invoker['api_invoker_id']}/subscriptions - ... json=${request_body} - ... server=${CAPIF_HTTPS_URL} - ... verify=ca.crt - ... username=${INVOKER_USERNAME} + Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} - # Check Results - Check Response Variable Type And Values - ... ${resp} - ... 400 - ... ProblemDetails - ... title=Bad Request - ... status=400 - ... detail=supportedFeatures not present in request - ... cause=supportedFeatures not present *** Keywords *** Create Events From InvocationLogs - [Arguments] ${subscription_id} ${invocation_log} ${events_expected}=${NONE} + [Arguments] + ... ${subscription_id} + ... ${invocation_log} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} IF ${events_expected} == ${NONE} ${events_expected}= Create List END @@ -709,17 +1245,25 @@ Create Events From InvocationLogs ${log_list}= Create List ${log} # Setup logs array with previously created list Set To Dictionary ${invocation_logs} logs=${log_list} - ${event_expected}= Create Notification Event ${subscription_id} ${event_enum} invocationLogs=${invocation_logs} + IF "${event_detail_expected}" != "${TRUE}" + ${invocation_logs}= Set Variable ${NONE} + END + ${event_expected}= Create Notification Event + ... ${subscription_id} + ... ${event_enum} + ... invocationLogs=${invocation_logs} Append To List ${events_expected} ${event_expected} END RETURN ${events_expected} + Create Expected Events For Service API Notifications [Arguments] ... ${subscription_id} ... ${service_api_available_resources}=${NONE} ... ${service_api_unavailable_resources}=${NONE} ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} IF ${events_expected} == ${NONE} ${events_expected}= Create List @@ -728,6 +1272,10 @@ Create Expected Events For Service API Notifications FOR ${service_api_available_resource} IN @{service_api_available_resources} Log ${service_api_available_resource} ${api_id}= Fetch From Right ${service_api_available_resource.path} / + + IF "${event_detail_expected}" != "${TRUE}" + ${api_id}= Set Variable ${NONE} + END ${event_expected}= Create Notification Event ... ${subscription_id} ... SERVICE_API_AVAILABLE @@ -738,6 +1286,9 @@ Create Expected Events For Service API Notifications FOR ${service_api_unavailable_resource} IN @{service_api_unavailable_resources} Log ${service_api_unavailable_resource} ${api_id}= Fetch From Right ${service_api_unavailable_resource.path} / + IF "${event_detail_expected}" != "${TRUE}" + ${api_id}= Set Variable ${NONE} + END ${event_expected}= Create Notification Event ... ${subscription_id} ... SERVICE_API_UNAVAILABLE @@ -748,42 +1299,62 @@ Create Expected Events For Service API Notifications RETURN ${events_expected} Create Expected Api Invoker Events - [Arguments] ${subscription_id} ${api_invoker_id} ${events_expected}=${NONE} + [Arguments] + ... ${subscription_id} + ... ${api_invoker_id} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} + IF ${events_expected} == ${NONE} ${events_expected}= Create List END + + ${api_invoker_id_used}= Set Variable ${api_invoker_id} + IF "${event_detail_expected}" != "${TRUE}" + ${api_invoker_id_used}= Set Variable ${NONE} + END ## Create events expected # Create Notification Events expected to be received for Onboard event ${event_expected}= Create Notification Event ... ${subscription_id} ... API_INVOKER_ONBOARDED - ... apiInvokerIds=${api_invoker_id} + ... apiInvokerIds=${api_invoker_id_used} Append To List ${events_expected} ${event_expected} # Create Notification Events expected to be received for Updated event ${event_expected}= Create Notification Event ... ${subscription_id} ... API_INVOKER_UPDATED - ... apiInvokerIds=${api_invoker_id} + ... apiInvokerIds=${api_invoker_id_used} Append To List ${events_expected} ${event_expected} # Create Notification Events expected to be received for Offboard event ${event_expected}= Create Notification Event ... ${subscription_id} ... API_INVOKER_OFFBOARDED - ... apiInvokerIds=${api_invoker_id} + ... apiInvokerIds=${api_invoker_id_used} Append To List ${events_expected} ${event_expected} RETURN ${events_expected} Create Expected Access Control Policy Update Event - [Arguments] ${subscription_id} ${service_api_id} ${api_invoker_policies} ${events_expected}=${NONE} + [Arguments] + ... ${subscription_id} + ... ${service_api_id} + ... ${api_invoker_policies} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} + IF ${events_expected} == ${NONE} ${events_expected}= Create List END ${acc_ctrl_pol_list}= Create Dictionary apiId=${service_api_id} apiInvokerPolicies=${api_invoker_policies} Check Variable ${acc_ctrl_pol_list} AccessControlPolicyListExt + IF "${event_detail_expected}" != "${TRUE}" + ${acc_ctrl_pol_list}= Set Variable ${NONE} + END + ${event_expected}= Create Notification Event ... ${subscription_id} ... ACCESS_CONTROL_POLICY_UPDATE @@ -793,7 +1364,9 @@ Create Expected Access Control Policy Update Event RETURN ${events_expected} Create Expected Access Control Policy Unavailable - [Arguments] ${subscription_id} ${events_expected}=${NONE} + [Arguments] ${subscription_id} + ... ${events_expected}=${NONE} + IF ${events_expected} == ${NONE} ${events_expected}= Create List END @@ -816,16 +1389,26 @@ Create Expected Api Invoker Authorization Revoked RETURN ${events_expected} Create Expected Service Update Event - [Arguments] ${subscription_id} ${service_api_resource} ${service_api_descriptions} ${events_expected}=${NONE} + [Arguments] + ... ${subscription_id} + ... ${service_api_resource} + ... ${service_api_descriptions} + ... ${events_expected}=${NONE} + ... ${event_detail_expected}=${TRUE} + IF ${events_expected} == ${NONE} ${events_expected}= Create List END ${api_id}= Fetch From Right ${service_api_resource.path} / Set To Dictionary ${service_api_descriptions} apiId=${api_id} + + IF "${event_detail_expected}" != "${TRUE}" + ${service_api_descriptions}= Set Variable ${NONE} + END ${events_expected}= Create List ${event_expected}= Create Notification Event ... ${subscription_id} ... SERVICE_API_UPDATE ... serviceAPIDescriptions=${service_api_descriptions} Append To List ${events_expected} ${event_expected} - RETURN ${events_expected} \ No newline at end of file + RETURN ${events_expected} -- GitLab From 1673d44f5577eb8ca7f441c5f446771c2754a035 Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Wed, 4 Dec 2024 12:41:04 +0100 Subject: [PATCH 4/5] commented code removing provider by superadmin --- .../capif_api_publish_service.robot | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/features/CAPIF Api Publish Service/capif_api_publish_service.robot b/tests/features/CAPIF Api Publish Service/capif_api_publish_service.robot index 8808e7d..adc7f57 100644 --- a/tests/features/CAPIF Api Publish Service/capif_api_publish_service.robot +++ b/tests/features/CAPIF Api Publish Service/capif_api_publish_service.robot @@ -381,15 +381,15 @@ Check Two Published APIs with different APFs are removed when Provider is delete Run Keyword And Continue On Failure Should Be Equal "${services_removed}" "2" msg=Not all services removed after delete provider (removed) vs (expected) - # Remove service API by superadmin - ${resp}= Delete Request Capif - ... /published-apis/v1/${register_user_info['apf_roles']['${APF_PROVIDER_USERNAME}_1']['apf_id']}/service-apis/${serviceApiId2} - ... server=${CAPIF_HTTPS_URL} - ... verify=ca.crt - ... username=${SUPERADMIN_USERNAME} + # # Remove service API by superadmin + # ${resp}= Delete Request Capif + # ... /published-apis/v1/${register_user_info['apf_roles']['${APF_PROVIDER_USERNAME}_1']['apf_id']}/service-apis/${serviceApiId2} + # ... server=${CAPIF_HTTPS_URL} + # ... verify=ca.crt + # ... username=${SUPERADMIN_USERNAME} - ${services_present_on_ccf_after_provider_deletion_superadmin}= Get Number Of Services + # ${services_present_on_ccf_after_provider_deletion_superadmin}= Get Number Of Services - ${services_removed}= Evaluate ${services_present_on_ccf_after_publish} - ${services_present_on_ccf_after_provider_deletion_superadmin} + # ${services_removed}= Evaluate ${services_present_on_ccf_after_publish} - ${services_present_on_ccf_after_provider_deletion_superadmin} - Run Keyword And Continue On Failure Should Be Equal "${services_removed}" "2" msg=Not all services removed after delete provider (removed) vs (expected) + # Run Keyword And Continue On Failure Should Be Equal "${services_removed}" "2" msg=Not all services removed after delete provider (removed) vs (expected) -- GitLab From 08691b96fb1ef53f45238afb7a2a91e3a85b05db Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Wed, 4 Dec 2024 16:22:10 +0100 Subject: [PATCH 5/5] Change tag name for testing --- tests/features/Api Status/api_status.robot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/features/Api Status/api_status.robot b/tests/features/Api Status/api_status.robot index fd67ace..0b76c9d 100644 --- a/tests/features/Api Status/api_status.robot +++ b/tests/features/Api Status/api_status.robot @@ -19,7 +19,7 @@ ${SUBSCRIPTION_ID_NOT_VALID} not-valid *** Test Cases *** Invoker receives Service API Invocation events - [Tags] api_status-1 mockserver smoke + [Tags] api_status-X mockserver smoke # Initialize Mock server Init Mock Server -- GitLab