diff --git a/tests/features/Vendor Extensibility/__init__.robot b/tests/features/Vendor Extensibility/__init__.robot new file mode 100644 index 0000000000000000000000000000000000000000..cdcb8538db7a9a7f41f8d6021cbd1d6b0198a222 --- /dev/null +++ b/tests/features/Vendor Extensibility/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Force Tags vendor_extensibility \ No newline at end of file diff --git a/tests/features/Vendor Extensibility/vendor_extensibility.robot b/tests/features/Vendor Extensibility/vendor_extensibility.robot new file mode 100644 index 0000000000000000000000000000000000000000..3c0c30a0189c12e0d44fd59b83d8c7257e04b2d0 --- /dev/null +++ b/tests/features/Vendor Extensibility/vendor_extensibility.robot @@ -0,0 +1,51 @@ +*** Settings *** +Resource /opt/robot-tests/tests/resources/common.resource +Resource /opt/robot-tests/tests/resources/api_invoker_management_requests/apiInvokerManagementRequests.robot +Resource ../../resources/common.resource +Library /opt/robot-tests/tests/libraries/bodyRequests.py + +Suite Teardown Reset Testing Environment +Test Setup Reset Testing Environment +Test Teardown Reset Testing Environment + + +*** Variables *** +${API_INVOKER_NOT_REGISTERED} not-valid + + +*** Test Cases *** +Discover Published service APIs by Authorised API Invoker + [Tags] vendor_extensibility-1 + # Register APF + ${register_user_info}= Provider Default Registration + + # Create Vendor Specific information + ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description + ... vendorSpecific-urn:etsi:mec:capifext:service-info + ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile + ... vendorSpecific-urn:etsi:mec:capifext:transport-info + + # Publish one api + ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api + ... ${register_user_info} + ... supported_features=10 + ... vendor_specific_service_api_description=${vendor_specific_service_api_description} + ... vendor_specific_aef_profile=${vendor_specific_aef_profile} + + # Default Invoker Registration and Onboarding + ${register_user_info_invoker} ${url} ${request_body}= Invoker Default Onboarding + + # Test + ${resp}= Get Request Capif + ... ${DISCOVER_URL}${register_user_info_invoker['api_invoker_id']}&aef-id=${register_user_info['aef_id']} + ... 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} diff --git a/tests/libraries/api_publish_service/bodyRequests.py b/tests/libraries/api_publish_service/bodyRequests.py index 69e7bb117f01b4c53ee7d1db74b7da09e20bf3a1..f6317f63e0a818dd8a6db300e8b0a96cf4db767f 100644 --- a/tests/libraries/api_publish_service/bodyRequests.py +++ b/tests/libraries/api_publish_service/bodyRequests.py @@ -1,5 +1,5 @@ -def create_service_api_description(api_name="service_1",aef_id="aef_id"): - return { +def create_service_api_description(api_name="service_1", aef_id="aef_id", supported_features="fffff", vendor_specific_service_api_description=None, vendor_specific_aef_profile=None): + body = { "apiName": api_name, "aefProfiles": [ { @@ -35,7 +35,7 @@ def create_service_api_description(api_name="service_1",aef_id="aef_id"): } ], "description": "ROBOT_TESTING", - "supportedFeatures": "fffff", + "supportedFeatures": supported_features, "shareableInfo": { "isShareable": True, "capifProvDoms": [ @@ -51,3 +51,14 @@ def create_service_api_description(api_name="service_1",aef_id="aef_id"): }, "ccfId": "string" } + + if vendor_specific_service_api_description is not None: + if isinstance(vendor_specific_service_api_description, dict): + for key, value in vendor_specific_service_api_description.items(): + body[key] = value + if vendor_specific_aef_profile is not None: + if isinstance(vendor_specific_aef_profile, dict): + for key, value in vendor_specific_aef_profile.items(): + body["aefProfiles"][0][key] = value + + return body diff --git a/tests/libraries/bodyRequests.py b/tests/libraries/bodyRequests.py index 5e451242c693f385bccea597db898a5f7c16f725..30597bad66cb194192fb3713ccadae60d7b1985a 100644 --- a/tests/libraries/bodyRequests.py +++ b/tests/libraries/bodyRequests.py @@ -5,4 +5,4 @@ from api_publish_service.bodyRequests import * from api_events.bodyRequests import * from security_api.bodyRequests import * from api_provider_management.bodyRequests import * - +from vendor_extensibility.bodyRequests import * diff --git a/tests/libraries/common/bodyRequests.py b/tests/libraries/common/bodyRequests.py index 71fc9b956ce9a95fc77a480a9187ad065bae2dcf..b0829b7231cc34863e7abd15e8a8422edf1d1ee2 100644 --- a/tests/libraries/common/bodyRequests.py +++ b/tests/libraries/common/bodyRequests.py @@ -70,7 +70,7 @@ def check_variable(input, data_type): def check_attributes_dict(body, data_type): mandatory_attributes = capif_types[data_type]["mandatory_attributes"] optional_parameters = capif_types[data_type]["optional_attributes"] - regex_attributes = capif_types[data_type]["regex_attributes"] + regex_attributes = capif_types[data_type].get("regex_attributes",{}) all_attributes = mandatory_attributes | optional_parameters # Check if body has not allowed attributes diff --git a/tests/libraries/common/types.json b/tests/libraries/common/types.json index 85a27adf41c1e9731e1c76df730d4247cb04623c..f2f0ff8a3bd857048cab718aa63531a6e07c7d76 100644 --- a/tests/libraries/common/types.json +++ b/tests/libraries/common/types.json @@ -104,6 +104,9 @@ "interfaceDescriptions": "InterfaceDescription", "aefLocation": "AefLocation" }, + "regex_attributes": { + "^vendorSpecific-(.*)": "VendorSpecificObject" + }, "oneOf": ["interfaceDescriptions", "domainName"] }, "Version": { diff --git a/tests/libraries/vendor_extensibility/bodyRequests.py b/tests/libraries/vendor_extensibility/bodyRequests.py new file mode 100644 index 0000000000000000000000000000000000000000..0e4e5bc6983e8b6c5dbf9968559d135f13ec3a3a --- /dev/null +++ b/tests/libraries/vendor_extensibility/bodyRequests.py @@ -0,0 +1,34 @@ +def create_vendor_specific_service_api_description(vendor_specific_key): + vendor_dict = { + vendor_specific_key: { + "serializer": "JSON", + "state": "ACTIVE", + "scopeOfLocality": "MEC_SYSTEM", + "consumedLocalOnly": "True", + "isLocal": "True", + "category": { + "href": "https://www.location.com", + "id": "location_1", + "name": "Location", + "version": "1.0" + } + } + } + return vendor_dict + + +def create_vendor_specific_aef_profile(vendor_specific_key): + vendor_dict = { + vendor_specific_key: { + "name": "trasport1", + "description": "Transport Info 1", + "type": "REST_HTTP", + "protocol": "HTTP", + "version": "2", + "security": { + "grantTypes": "OAUTH2_CLIENT_CREDENTIALS", + "tokenEndpoint": "https://token-endpoint/" + } + } + } + return vendor_dict diff --git a/tests/resources/common/basicRequests.robot b/tests/resources/common/basicRequests.robot index 838086f925a9d8310d3e00c55b652c036588b567..58374be652c31a20767dbdeebfdab5b3da7b8882 100644 --- a/tests/resources/common/basicRequests.robot +++ b/tests/resources/common/basicRequests.robot @@ -686,9 +686,9 @@ Provider Default Registration RETURN ${register_user_info} Publish Service Api - [Arguments] ${register_user_info_provider} ${service_name}=service_1 + [Arguments] ${register_user_info_provider} ${service_name}=service_1 ${supported_features}=fffff ${vendor_specific_service_api_description}=${None} ${vendor_specific_aef_profile}=${None} - ${request_body}= Create Service Api Description ${service_name} ${register_user_info_provider['aef_id']} + ${request_body}= Create Service Api Description ${service_name} ${register_user_info_provider['aef_id']} ${supported_features} ${vendor_specific_service_api_description} ${vendor_specific_aef_profile} ${resp}= Post Request Capif ... /published-apis/v1/${register_user_info_provider['apf_id']}/service-apis ... json=${request_body}