Loading tests/features/Api Status/api_status.robot +312 −8 Original line number Diff line number Diff line Loading @@ -319,7 +319,7 @@ Update published API without apiStatus and apiStatusMonitoring inactive ${service_api_description_modified}= Create Service Api Description ... service_1 ... aef_id=${aef_ids} ... supported_features=020 ... supported_features=000 ... api_status=${NONE} ${resp}= Put Request Capif ... ${resource_url.path} Loading @@ -332,14 +332,101 @@ Update published API without apiStatus and apiStatusMonitoring inactive ... apiName=service_1 Dictionary Should Not Contain Key ${resp.json()} apiStatus # Provider Remove service_1 published API # ${resp}= Delete Request Capif # ... ${resource_url.path} # ... server=${CAPIF_HTTPS_URL} # ... verify=ca.crt # ... username=${APF_PROVIDER_USERNAME} # Check Event Notifications ## Create check Events to ensure all notifications were received ${service_api_available_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} ... event_detail_expected=${TRUE} ... service_api_description_expected=${TRUE} ... service_api_description=${service_api_description_published} # Status Should Be 204 ${resp} Log List ${events_expected} ${events_expected}= Create Expected Service Update Event ... subscription_id=${subscription_id} ... service_api_resource=${resource_url} ... service_api_descriptions=${service_api_description_modified} ... events_expected=${events_expected} Log List ${events_expected} ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} Update published API with apiStatus empty and apiStatusMonitoring inactive [Tags] api_status-13 mockserver # 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 total_aef_roles=2 ${aef_id_1}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}']['aef_id']} ${aef_id_2}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}_1']['aef_id']} ${aef_ids}= Create List ${aef_id_1} ${aef_id_2} # Subscribe to events ${events_list}= Create List SERVICE_API_AVAILABLE SERVICE_API_UNAVAILABLE SERVICE_API_UPDATE ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... supported_features=C ${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 api with 2 aefIds ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info_provider} ... service_1 ... aef_id=${aef_ids} ... api_status=${aef_id_1} ... supported_features=020 # Discover APIs by invoker ${resp}= Get Request Capif ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${aef_id_1} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ${resp} 200 DiscoveredAPIs # # Check Results Dictionary Should Contain Key ${resp.json()} serviceAPIDescriptions Should Not Be Empty ${resp.json()['serviceAPIDescriptions']} Length Should Be ${resp.json()['serviceAPIDescriptions']} 1 List Should Contain Value ${resp.json()['serviceAPIDescriptions']} ${service_api_description_published} # Update Request to published API ${aef_empty_list}= Create List ${service_api_description_modified}= Create Service Api Description ... service_1 ... aef_id=${aef_ids} ... supported_features=000 ... api_status=${aef_empty_list} ${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 Dictionary Should Not Contain Key ${resp.json()} apiStatus # Check Event Notifications ## Create check Events to ensure all notifications were received Loading @@ -357,11 +444,228 @@ Update published API without apiStatus and apiStatusMonitoring inactive ... service_api_resource=${resource_url} ... service_api_descriptions=${service_api_description_modified} ... events_expected=${events_expected} ${service_api_unavailable_resources}= Create List ${resource_url} ${events_expected}= Create Expected Events For Service API Notifications ... subscription_id=${subscription_id} ... service_api_unavailable_resources=${service_api_unavailable_resources} ... event_detail_expected=${TRUE} ... service_api_description_expected=${TRUE} ... service_api_description=${service_api_description_modified} Log List ${events_expected} ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} ## ---------------------------------- Patch published (apiStatusMonitoring active) API with apiStatus only aefId2 [Tags] api_status-17 mockserver # 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 total_aef_roles=2 ${aef_id_1}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}']['aef_id']} ${aef_id_2}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}_1']['aef_id']} ${aef_ids}= Create List ${aef_id_1} ${aef_id_2} # Subscribe to events ${events_list}= Create List SERVICE_API_AVAILABLE SERVICE_API_UNAVAILABLE SERVICE_API_UPDATE ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... supported_features=C ${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 api with 2 aefIds ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info_provider} ... service_1 ... aef_id=${aef_ids} ... api_status=${aef_id_1} ... supported_features=020 # Discover APIs by invoker ${resp}= Get Request Capif ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${aef_id_1} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ${resp} 200 DiscoveredAPIs # # Check Results Dictionary Should Contain Key ${resp.json()} serviceAPIDescriptions Should Not Be Empty ${resp.json()['serviceAPIDescriptions']} Length Should Be ${resp.json()['serviceAPIDescriptions']} 1 List Should Contain Value ${resp.json()['serviceAPIDescriptions']} ${service_api_description_published} # Update Request to published API ${aef_empty_list}= Create List ${service_api_description_patch}= Create Service Api Description Patch ... api_status=${aef_id_2} Check Variable ${service_api_description_patch} ServiceAPIDescriptionPatch ${resp}= Patch Request Capif ... ${resource_url.path} ... json=${service_api_description_patch} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${APF_PROVIDER_USERNAME} ${service_api_to_check}= Copy Dictionary ${service_api_description_published} deepcopy=${True} ${aef_ids_expected}= Create List ${aef_id_2} ${api_status_expected}= Create dictionary aefIds=${aef_ids_expected} Set To Dictionary ${service_api_to_check} apiStatus=${api_status_expected} Check Response Variable Type And Values ${resp} 200 ServiceAPIDescription ... apiName=service_1 Dictionary Should Contain Key ${resp.json()} apiStatus Dictionaries Should Be Equal ${resp.json()['apiStatus']} ${service_api_description_patch['apiStatus']} # Check Event Notifications ## Create check Events to ensure all notifications were received ${service_api_available_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} ... event_detail_expected=${TRUE} ... service_api_description_expected=${TRUE} ... service_api_description=${service_api_description_published} Log List ${events_expected} ${events_expected}= Create Expected Service Update Event ... subscription_id=${subscription_id} ... service_api_resource=${resource_url} ... service_api_descriptions=${service_api_to_check} ... events_expected=${events_expected} Log List ${events_expected} ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} ## ----------------------------- Patch published (apiStatusMonitoring active) API with apiStatus aef1 and aef2 [Tags] api_status-18 mockserver # 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 total_aef_roles=2 ${aef_id_1}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}']['aef_id']} ${aef_id_2}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}_1']['aef_id']} ${aef_ids}= Create List ${aef_id_1} ${aef_id_2} # Subscribe to events ${events_list}= Create List SERVICE_API_AVAILABLE SERVICE_API_UNAVAILABLE SERVICE_API_UPDATE ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... supported_features=C ${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 api with 2 aefIds ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info_provider} ... service_1 ... aef_id=${aef_ids} ... api_status=${aef_id_1} ... supported_features=020 # Discover APIs by invoker ${resp}= Get Request Capif ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${aef_id_1} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ${resp} 200 DiscoveredAPIs # # Check Results Dictionary Should Contain Key ${resp.json()} serviceAPIDescriptions Should Not Be Empty ${resp.json()['serviceAPIDescriptions']} Length Should Be ${resp.json()['serviceAPIDescriptions']} 1 List Should Contain Value ${resp.json()['serviceAPIDescriptions']} ${service_api_description_published} # Update Request to published API ${aef_empty_list}= Create List ${service_api_description_patch}= Create Service Api Description Patch ... api_status=${aef_ids} ${resp}= Patch Request Capif ... ${resource_url.path} ... json=${service_api_description_patch} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${APF_PROVIDER_USERNAME} ${service_api_to_check}= Copy Dictionary ${service_api_description_published} deepcopy=${True} ${api_status_expected}= Create dictionary aefIds=${aef_ids} Set To Dictionary ${service_api_to_check} apiStatus=${api_status_expected} Check Response Variable Type And Values ${resp} 200 ServiceAPIDescription ... apiName=service_1 Dictionary Should Contain Key ${resp.json()} apiStatus Dictionaries Should Be Equal ${resp.json()['apiStatus']} ${service_api_description_patch['apiStatus']} # Check Event Notifications ## Create check Events to ensure all notifications were received ${service_api_available_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} ... event_detail_expected=${TRUE} ... service_api_description_expected=${TRUE} ... service_api_description=${service_api_description_published} Log List ${events_expected} ${events_expected}= Create Expected Service Update Event ... subscription_id=${subscription_id} ... service_api_resource=${resource_url} ... service_api_descriptions=${service_api_to_check} ... events_expected=${events_expected} Log List ${events_expected} ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} ###--- # Invoker receives Service API Invocation events Loading tests/libraries/api_publish_service/bodyRequests.py +66 −4 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ def create_aef_profiles(aef_ids): return profiles def create_aef_profile(aef_id, resource_name): data = { "aefId": aef_id, Loading Loading @@ -101,3 +100,66 @@ def create_aef_profile(aef_id, resource_name): ] } return data def create_service_api_description_patch(aef_id=None, description=None, shareable_info=None, api_status=None, service_api_category=None, api_supp_feats=None, pub_api_path=None, ccf_id=None): body = dict() # aef profiles aef_ids = list() if aef_id is None: aef_ids = None elif isinstance(aef_id, list): aef_ids = aef_id print("aef_id parameter is a list") elif isinstance(aef_id, str): print("aef_id parameter is a string") aef_ids.append(aef_id) if aef_ids is not None: profiles = create_aef_profiles(aef_ids) body['aefProfiles'] = profiles # description if description is not None: body['description'] = description # shareable info if shareable_info is not None: body['shareableInfo'] = shareable_info # service API Category if service_api_category is not None: body['serviceAPICategory'] = service_api_category # api Supp Feats if api_supp_feats is not None: body['apiSuppFeats'] = api_supp_feats # pub Api Path if pub_api_path is not None: body['pubApiPath'] = pub_api_path # ccf id if ccf_id is not None: body['ccfId'] = ccf_id # api Status if api_status is not None: aef_ids_active = list() if isinstance(api_status, list): aef_ids_active = api_status print("api_status parameter is a list") elif isinstance(api_status, str): print("api_status parameter is a string") aef_ids_active.append(api_status) body['apiStatus'] = dict() body['apiStatus']['aefIds'] = aef_ids_active return body tests/libraries/common/types.json +13 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,19 @@ "^vendorSpecific-(.*)": "VendorSpecificObject" } }, "ServiceAPIDescriptionPatch": { "mandatory_attributes": {}, "optional_attributes": { "apiStatus": "ApiStatus", "aefProfiles": "AefProfile", "description": "string", "shareableInfo": "ShareableInformation", "serviceAPICategory": "string", "apiSuppFeats": "SupportedFeatures", "pubApiPath": "PublishedApiPath", "ccfId": "string" } }, "ApiStatus": { "mandatory_attributes": { "aefIds": "string" Loading Loading
tests/features/Api Status/api_status.robot +312 −8 Original line number Diff line number Diff line Loading @@ -319,7 +319,7 @@ Update published API without apiStatus and apiStatusMonitoring inactive ${service_api_description_modified}= Create Service Api Description ... service_1 ... aef_id=${aef_ids} ... supported_features=020 ... supported_features=000 ... api_status=${NONE} ${resp}= Put Request Capif ... ${resource_url.path} Loading @@ -332,14 +332,101 @@ Update published API without apiStatus and apiStatusMonitoring inactive ... apiName=service_1 Dictionary Should Not Contain Key ${resp.json()} apiStatus # Provider Remove service_1 published API # ${resp}= Delete Request Capif # ... ${resource_url.path} # ... server=${CAPIF_HTTPS_URL} # ... verify=ca.crt # ... username=${APF_PROVIDER_USERNAME} # Check Event Notifications ## Create check Events to ensure all notifications were received ${service_api_available_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} ... event_detail_expected=${TRUE} ... service_api_description_expected=${TRUE} ... service_api_description=${service_api_description_published} # Status Should Be 204 ${resp} Log List ${events_expected} ${events_expected}= Create Expected Service Update Event ... subscription_id=${subscription_id} ... service_api_resource=${resource_url} ... service_api_descriptions=${service_api_description_modified} ... events_expected=${events_expected} Log List ${events_expected} ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} Update published API with apiStatus empty and apiStatusMonitoring inactive [Tags] api_status-13 mockserver # 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 total_aef_roles=2 ${aef_id_1}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}']['aef_id']} ${aef_id_2}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}_1']['aef_id']} ${aef_ids}= Create List ${aef_id_1} ${aef_id_2} # Subscribe to events ${events_list}= Create List SERVICE_API_AVAILABLE SERVICE_API_UNAVAILABLE SERVICE_API_UPDATE ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... supported_features=C ${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 api with 2 aefIds ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info_provider} ... service_1 ... aef_id=${aef_ids} ... api_status=${aef_id_1} ... supported_features=020 # Discover APIs by invoker ${resp}= Get Request Capif ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${aef_id_1} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ${resp} 200 DiscoveredAPIs # # Check Results Dictionary Should Contain Key ${resp.json()} serviceAPIDescriptions Should Not Be Empty ${resp.json()['serviceAPIDescriptions']} Length Should Be ${resp.json()['serviceAPIDescriptions']} 1 List Should Contain Value ${resp.json()['serviceAPIDescriptions']} ${service_api_description_published} # Update Request to published API ${aef_empty_list}= Create List ${service_api_description_modified}= Create Service Api Description ... service_1 ... aef_id=${aef_ids} ... supported_features=000 ... api_status=${aef_empty_list} ${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 Dictionary Should Not Contain Key ${resp.json()} apiStatus # Check Event Notifications ## Create check Events to ensure all notifications were received Loading @@ -357,11 +444,228 @@ Update published API without apiStatus and apiStatusMonitoring inactive ... service_api_resource=${resource_url} ... service_api_descriptions=${service_api_description_modified} ... events_expected=${events_expected} ${service_api_unavailable_resources}= Create List ${resource_url} ${events_expected}= Create Expected Events For Service API Notifications ... subscription_id=${subscription_id} ... service_api_unavailable_resources=${service_api_unavailable_resources} ... event_detail_expected=${TRUE} ... service_api_description_expected=${TRUE} ... service_api_description=${service_api_description_modified} Log List ${events_expected} ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} ## ---------------------------------- Patch published (apiStatusMonitoring active) API with apiStatus only aefId2 [Tags] api_status-17 mockserver # 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 total_aef_roles=2 ${aef_id_1}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}']['aef_id']} ${aef_id_2}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}_1']['aef_id']} ${aef_ids}= Create List ${aef_id_1} ${aef_id_2} # Subscribe to events ${events_list}= Create List SERVICE_API_AVAILABLE SERVICE_API_UNAVAILABLE SERVICE_API_UPDATE ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... supported_features=C ${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 api with 2 aefIds ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info_provider} ... service_1 ... aef_id=${aef_ids} ... api_status=${aef_id_1} ... supported_features=020 # Discover APIs by invoker ${resp}= Get Request Capif ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${aef_id_1} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ${resp} 200 DiscoveredAPIs # # Check Results Dictionary Should Contain Key ${resp.json()} serviceAPIDescriptions Should Not Be Empty ${resp.json()['serviceAPIDescriptions']} Length Should Be ${resp.json()['serviceAPIDescriptions']} 1 List Should Contain Value ${resp.json()['serviceAPIDescriptions']} ${service_api_description_published} # Update Request to published API ${aef_empty_list}= Create List ${service_api_description_patch}= Create Service Api Description Patch ... api_status=${aef_id_2} Check Variable ${service_api_description_patch} ServiceAPIDescriptionPatch ${resp}= Patch Request Capif ... ${resource_url.path} ... json=${service_api_description_patch} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${APF_PROVIDER_USERNAME} ${service_api_to_check}= Copy Dictionary ${service_api_description_published} deepcopy=${True} ${aef_ids_expected}= Create List ${aef_id_2} ${api_status_expected}= Create dictionary aefIds=${aef_ids_expected} Set To Dictionary ${service_api_to_check} apiStatus=${api_status_expected} Check Response Variable Type And Values ${resp} 200 ServiceAPIDescription ... apiName=service_1 Dictionary Should Contain Key ${resp.json()} apiStatus Dictionaries Should Be Equal ${resp.json()['apiStatus']} ${service_api_description_patch['apiStatus']} # Check Event Notifications ## Create check Events to ensure all notifications were received ${service_api_available_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} ... event_detail_expected=${TRUE} ... service_api_description_expected=${TRUE} ... service_api_description=${service_api_description_published} Log List ${events_expected} ${events_expected}= Create Expected Service Update Event ... subscription_id=${subscription_id} ... service_api_resource=${resource_url} ... service_api_descriptions=${service_api_to_check} ... events_expected=${events_expected} Log List ${events_expected} ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} ## ----------------------------- Patch published (apiStatusMonitoring active) API with apiStatus aef1 and aef2 [Tags] api_status-18 mockserver # 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 total_aef_roles=2 ${aef_id_1}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}']['aef_id']} ${aef_id_2}= Set Variable ${register_user_info_provider['aef_roles']['${AEF_PROVIDER_USERNAME}_1']['aef_id']} ${aef_ids}= Create List ${aef_id_1} ${aef_id_2} # Subscribe to events ${events_list}= Create List SERVICE_API_AVAILABLE SERVICE_API_UNAVAILABLE SERVICE_API_UPDATE ${request_body}= Create Events Subscription ... events=@{events_list} ... notification_destination=${NOTIFICATION_DESTINATION_URL}/testing ... supported_features=C ${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 api with 2 aefIds ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info_provider} ... service_1 ... aef_id=${aef_ids} ... api_status=${aef_id_1} ... supported_features=020 # Discover APIs by invoker ${resp}= Get Request Capif ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${aef_id_1} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ${resp} 200 DiscoveredAPIs # # Check Results Dictionary Should Contain Key ${resp.json()} serviceAPIDescriptions Should Not Be Empty ${resp.json()['serviceAPIDescriptions']} Length Should Be ${resp.json()['serviceAPIDescriptions']} 1 List Should Contain Value ${resp.json()['serviceAPIDescriptions']} ${service_api_description_published} # Update Request to published API ${aef_empty_list}= Create List ${service_api_description_patch}= Create Service Api Description Patch ... api_status=${aef_ids} ${resp}= Patch Request Capif ... ${resource_url.path} ... json=${service_api_description_patch} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${APF_PROVIDER_USERNAME} ${service_api_to_check}= Copy Dictionary ${service_api_description_published} deepcopy=${True} ${api_status_expected}= Create dictionary aefIds=${aef_ids} Set To Dictionary ${service_api_to_check} apiStatus=${api_status_expected} Check Response Variable Type And Values ${resp} 200 ServiceAPIDescription ... apiName=service_1 Dictionary Should Contain Key ${resp.json()} apiStatus Dictionaries Should Be Equal ${resp.json()['apiStatus']} ${service_api_description_patch['apiStatus']} # Check Event Notifications ## Create check Events to ensure all notifications were received ${service_api_available_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} ... event_detail_expected=${TRUE} ... service_api_description_expected=${TRUE} ... service_api_description=${service_api_description_published} Log List ${events_expected} ${events_expected}= Create Expected Service Update Event ... subscription_id=${subscription_id} ... service_api_resource=${resource_url} ... service_api_descriptions=${service_api_to_check} ... events_expected=${events_expected} Log List ${events_expected} ## Check Events Expected towards received notifications at mock server Wait Until Keyword Succeeds 5x 5s Check Mock Server Notification Events ${events_expected} ###--- # Invoker receives Service API Invocation events Loading
tests/libraries/api_publish_service/bodyRequests.py +66 −4 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ def create_aef_profiles(aef_ids): return profiles def create_aef_profile(aef_id, resource_name): data = { "aefId": aef_id, Loading Loading @@ -101,3 +100,66 @@ def create_aef_profile(aef_id, resource_name): ] } return data def create_service_api_description_patch(aef_id=None, description=None, shareable_info=None, api_status=None, service_api_category=None, api_supp_feats=None, pub_api_path=None, ccf_id=None): body = dict() # aef profiles aef_ids = list() if aef_id is None: aef_ids = None elif isinstance(aef_id, list): aef_ids = aef_id print("aef_id parameter is a list") elif isinstance(aef_id, str): print("aef_id parameter is a string") aef_ids.append(aef_id) if aef_ids is not None: profiles = create_aef_profiles(aef_ids) body['aefProfiles'] = profiles # description if description is not None: body['description'] = description # shareable info if shareable_info is not None: body['shareableInfo'] = shareable_info # service API Category if service_api_category is not None: body['serviceAPICategory'] = service_api_category # api Supp Feats if api_supp_feats is not None: body['apiSuppFeats'] = api_supp_feats # pub Api Path if pub_api_path is not None: body['pubApiPath'] = pub_api_path # ccf id if ccf_id is not None: body['ccfId'] = ccf_id # api Status if api_status is not None: aef_ids_active = list() if isinstance(api_status, list): aef_ids_active = api_status print("api_status parameter is a list") elif isinstance(api_status, str): print("api_status parameter is a string") aef_ids_active.append(api_status) body['apiStatus'] = dict() body['apiStatus']['aefIds'] = aef_ids_active return body
tests/libraries/common/types.json +13 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,19 @@ "^vendorSpecific-(.*)": "VendorSpecificObject" } }, "ServiceAPIDescriptionPatch": { "mandatory_attributes": {}, "optional_attributes": { "apiStatus": "ApiStatus", "aefProfiles": "AefProfile", "description": "string", "shareableInfo": "ShareableInformation", "serviceAPICategory": "string", "apiSuppFeats": "SupportedFeatures", "pubApiPath": "PublishedApiPath", "ccfId": "string" } }, "ApiStatus": { "mandatory_attributes": { "aefIds": "string" Loading