Loading tests/features/Vendor Extensibility/__init__.robot 0 → 100644 +2 −0 Original line number Original line Diff line number Diff line *** Settings *** Force Tags vendor_extensibility No newline at end of file tests/features/Vendor Extensibility/vendor_extensibility.robot 0 → 100644 +335 −0 Original line number Original line Diff line number Diff line *** 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 *** Published API with vendor extensibility [Tags] vendor_extensibility-1 ${vendor_specific_service_api_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:service-info ${vendor_specific_aef_profile_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:transport-info # Register APF ${register_user_info}= Provider Default Registration # Create Vendor Specific information ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description ... ${vendor_specific_service_api_key} ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile ... ${vendor_specific_aef_profile_key} # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=100 ... vendor_specific_service_api_description=${vendor_specific_service_api_description} ... vendor_specific_aef_profile=${vendor_specific_aef_profile} Dictionary Should Contain Key ${service_api_description_published} ${vendor_specific_service_api_key} Dictionary Should Contain Key ... ${service_api_description_published['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} # 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']}&supported_features=2 ... 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} Published API with vendor extensibility and discover with VendSpecQueryParams disabled [Tags] vendor_extensibility-2 ${vendor_specific_service_api_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:service-info ${vendor_specific_aef_profile_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:transport-info # Register APF ${register_user_info}= Provider Default Registration # Create Vendor Specific information ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description ... ${vendor_specific_service_api_key} ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile ... ${vendor_specific_aef_profile_key} # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=100 ... vendor_specific_service_api_description=${vendor_specific_service_api_description} ... vendor_specific_aef_profile=${vendor_specific_aef_profile} Dictionary Should Contain Key ${service_api_description_published} ${vendor_specific_service_api_key} Dictionary Should Contain Key ... ${service_api_description_published['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} # 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']}&supported_features=0 ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ... ${resp} ... 404 ... ProblemDetails ... title=Not Found ... status=404 ... detail=API Invoker ${register_user_info_invoker['api_invoker_id']} has no API Published that accomplish filter conditions ... cause=No API Published accomplish filter conditions Publish API with vendorExt active and discover without supported features filter [Tags] vendor_extensibility-3 ${vendor_specific_service_api_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:service-info ${vendor_specific_aef_profile_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:transport-info # Register APF ${register_user_info}= Provider Default Registration # Create Vendor Specific information ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description ... ${vendor_specific_service_api_key} ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile ... ${vendor_specific_aef_profile_key} # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=100 ... vendor_specific_service_api_description=${vendor_specific_service_api_description} ... vendor_specific_aef_profile=${vendor_specific_aef_profile} Dictionary Should Contain Key ${service_api_description_published} ${vendor_specific_service_api_key} Dictionary Should Contain Key ... ${service_api_description_published['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} # 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 Dictionary Should Not Contain Key ... ${resp.json()['serviceAPIDescriptions'][0]} ... ${vendor_specific_service_api_key} Dictionary Should Not Contain Key ... ${resp.json()['serviceAPIDescriptions'][0]['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} ${service_api_description_published_to_check}= Copy Dictionary ... ${service_api_description_published} ... deepcopy=True Remove From Dictionary ${service_api_description_published_to_check} ${vendor_specific_service_api_key} Remove From Dictionary ... ${service_api_description_published_to_check['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} List Should Contain Value ... ${resp.json()['serviceAPIDescriptions']} ... ${service_api_description_published_to_check} Publish API with vendorExt active but without vendorSpecifics [Tags] vendor_extensibility-4 # Register APF ${register_user_info}= Provider Default Registration # Publish API with supported features ${request_body}= Create Service Api Description ... api_name=service_1 ... aef_id=${register_user_info['aef_id']} ... supported_features=100 ${resp}= Post Request Capif ... /published-apis/v1/${register_user_info['apf_id']}/service-apis ... json=${request_body} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${register_user_info['apf_username']} Check Response Variable Type And Values ... ${resp} ... 400 ... ProblemDetails ... title=Bad Request ... status=400 ... detail=VendorExt feature active at Supported Features but VendorSpecifics parameters not published ... cause=VendorExt feature active but vendorSpecifics not present Publish API with vendorExt inactive but with vendorSpecifics [Tags] vendor_extensibility-5 ${vendor_specific_service_api_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:service-info ${vendor_specific_aef_profile_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:transport-info # Register APF ${register_user_info}= Provider Default Registration # Create Vendor Specific information ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description ... ${vendor_specific_service_api_key} ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile ... ${vendor_specific_aef_profile_key} # Publish API with supported features ${request_body}= Create Service Api Description ... api_name=service_1 ... aef_id=${register_user_info['aef_id']} ... supported_features=0 ... vendor_specific_service_api_description=${vendor_specific_service_api_description} ... vendor_specific_aef_profile=${vendor_specific_aef_profile} ${resp}= Post Request Capif ... /published-apis/v1/${register_user_info['apf_id']}/service-apis ... json=${request_body} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${register_user_info['apf_username']} Check Response Variable Type And Values ... ${resp} ... 400 ... ProblemDetails ... title=Bad Request ... status=400 ... detail=VendorExt feature inactive at Supported Features but VendorSpecifics are present parameters published ... cause=VendorExt feature inactive but vendorSpecifics present Published API without vendor extensibility discover with VendSpecQueryParams enabled [Tags] vendor_extensibility-6 # Register APF ${register_user_info}= Provider Default Registration # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=000 # 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']}&supported_features=2 ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ... ${resp} ... 404 ... ProblemDetails ... title=Not Found ... status=404 ... detail=API Invoker ${register_user_info_invoker['api_invoker_id']} has no API Published that accomplish filter conditions ... cause=No API Published accomplish filter conditions Published API without vendor extensibility and discover with vendSpecQueryParams disabled [Tags] vendor_extensibility-7 # Register APF ${register_user_info}= Provider Default Registration # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=00 # 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']}&supported_features=0 ... 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} Published API without vendor extensibility and discover without supported-features query parameter [Tags] vendor_extensibility-8 # Register APF ${register_user_info}= Provider Default Registration # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=00 # 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} Publish API without supportedFeatures [Tags] vendor_extensibility-9 # Register APF ${register_user_info}= Provider Default Registration # Publish API without supported features ${request_body}= Create Service Api Description ... api_name=service_1 ... aef_id=${register_user_info['aef_id']} ... supported_features=${NONE} ${resp}= Post Request Capif ... /published-apis/v1/${register_user_info['apf_id']}/service-apis ... json=${request_body} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${register_user_info['apf_username']} Check Response Variable Type And Values ... ${resp} ... 400 ... ProblemDetails ... title=Bad Request ... status=400 ... detail=supportedFeatures must be present in this request ... cause=supportedFeatures missed tests/libraries/api_publish_service/bodyRequests.py +15 −3 Original line number Original line Diff line number Diff line def create_service_api_description(api_name="service_1",aef_id="aef_id"): def create_service_api_description(api_name="service_1", aef_id="aef_id", supported_features="0", vendor_specific_service_api_description=None, vendor_specific_aef_profile=None): return { body = { "apiName": api_name, "apiName": api_name, "aefProfiles": [ "aefProfiles": [ { { Loading Loading @@ -35,7 +35,6 @@ def create_service_api_description(api_name="service_1",aef_id="aef_id"): } } ], ], "description": "ROBOT_TESTING", "description": "ROBOT_TESTING", "supportedFeatures": "fffff", "shareableInfo": { "shareableInfo": { "isShareable": True, "isShareable": True, "capifProvDoms": [ "capifProvDoms": [ Loading @@ -51,3 +50,16 @@ def create_service_api_description(api_name="service_1",aef_id="aef_id"): }, }, "ccfId": "string" "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 if supported_features is not None: body['supportedFeatures'] = supported_features return body tests/libraries/bodyRequests.py +1 −0 Original line number Original line Diff line number Diff line Loading @@ -5,4 +5,5 @@ from api_publish_service.bodyRequests import * from api_events.bodyRequests import * from api_events.bodyRequests import * from security_api.bodyRequests import * from security_api.bodyRequests import * from api_provider_management.bodyRequests import * from api_provider_management.bodyRequests import * from vendor_extensibility.bodyRequests import * from vault_requests.bodyRequests import * from vault_requests.bodyRequests import * tests/libraries/common/bodyRequests.py +21 −4 Original line number Original line Diff line number Diff line Loading @@ -69,11 +69,27 @@ def check_variable(input, data_type): def check_attributes_dict(body, data_type): def check_attributes_dict(body, data_type): mandatory_attributes = capif_types[data_type]["mandatory_attributes"] mandatory_attributes = capif_types[data_type]["mandatory_attributes"] optional_parameters = capif_types[data_type]["optional_attributes"] optional_parameters = capif_types[data_type]["optional_attributes"] regex_attributes = capif_types[data_type].get("regex_attributes",{}) all_attributes = mandatory_attributes | optional_parameters all_attributes = mandatory_attributes | optional_parameters # Check if body has not allowed attributes # Check if body has not allowed attributes for body_key in body.keys(): for body_key in body.keys(): print(body_key) if body_key not in all_attributes.keys(): if body_key not in all_attributes.keys(): print(body_key + " NOT IN ALL ATTRIBUTES") present = False if regex_attributes is not None: print("REGEX ATTRIBUTES PRESENT") print(regex_attributes) for regex_key, regex_data_type in regex_attributes.items(): print(regex_key + ":" + regex_data_type) if check_regex(body_key, regex_key): print("MATCH with " + body_key) present = True all_attributes[body_key] = regex_data_type break if not present: raise Exception('Attribute "' + body_key + raise Exception('Attribute "' + body_key + '" is not present as a mandatory or optional key (' + ','.join(all_attributes.keys()) + ')') '" is not present as a mandatory or optional key (' + ','.join(all_attributes.keys()) + ')') Loading Loading @@ -121,6 +137,7 @@ def check_regex(input, regex): is_match = bool(matched) is_match = bool(matched) if is_match: if is_match: print("Regex match") print("Regex match") return True else: else: raise Exception("Input(" + input + ") not match regex (" + regex + ")") raise Exception("Input(" + input + ") not match regex (" + regex + ")") Loading Loading
tests/features/Vendor Extensibility/__init__.robot 0 → 100644 +2 −0 Original line number Original line Diff line number Diff line *** Settings *** Force Tags vendor_extensibility No newline at end of file
tests/features/Vendor Extensibility/vendor_extensibility.robot 0 → 100644 +335 −0 Original line number Original line Diff line number Diff line *** 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 *** Published API with vendor extensibility [Tags] vendor_extensibility-1 ${vendor_specific_service_api_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:service-info ${vendor_specific_aef_profile_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:transport-info # Register APF ${register_user_info}= Provider Default Registration # Create Vendor Specific information ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description ... ${vendor_specific_service_api_key} ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile ... ${vendor_specific_aef_profile_key} # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=100 ... vendor_specific_service_api_description=${vendor_specific_service_api_description} ... vendor_specific_aef_profile=${vendor_specific_aef_profile} Dictionary Should Contain Key ${service_api_description_published} ${vendor_specific_service_api_key} Dictionary Should Contain Key ... ${service_api_description_published['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} # 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']}&supported_features=2 ... 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} Published API with vendor extensibility and discover with VendSpecQueryParams disabled [Tags] vendor_extensibility-2 ${vendor_specific_service_api_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:service-info ${vendor_specific_aef_profile_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:transport-info # Register APF ${register_user_info}= Provider Default Registration # Create Vendor Specific information ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description ... ${vendor_specific_service_api_key} ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile ... ${vendor_specific_aef_profile_key} # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=100 ... vendor_specific_service_api_description=${vendor_specific_service_api_description} ... vendor_specific_aef_profile=${vendor_specific_aef_profile} Dictionary Should Contain Key ${service_api_description_published} ${vendor_specific_service_api_key} Dictionary Should Contain Key ... ${service_api_description_published['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} # 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']}&supported_features=0 ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ... ${resp} ... 404 ... ProblemDetails ... title=Not Found ... status=404 ... detail=API Invoker ${register_user_info_invoker['api_invoker_id']} has no API Published that accomplish filter conditions ... cause=No API Published accomplish filter conditions Publish API with vendorExt active and discover without supported features filter [Tags] vendor_extensibility-3 ${vendor_specific_service_api_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:service-info ${vendor_specific_aef_profile_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:transport-info # Register APF ${register_user_info}= Provider Default Registration # Create Vendor Specific information ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description ... ${vendor_specific_service_api_key} ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile ... ${vendor_specific_aef_profile_key} # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=100 ... vendor_specific_service_api_description=${vendor_specific_service_api_description} ... vendor_specific_aef_profile=${vendor_specific_aef_profile} Dictionary Should Contain Key ${service_api_description_published} ${vendor_specific_service_api_key} Dictionary Should Contain Key ... ${service_api_description_published['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} # 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 Dictionary Should Not Contain Key ... ${resp.json()['serviceAPIDescriptions'][0]} ... ${vendor_specific_service_api_key} Dictionary Should Not Contain Key ... ${resp.json()['serviceAPIDescriptions'][0]['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} ${service_api_description_published_to_check}= Copy Dictionary ... ${service_api_description_published} ... deepcopy=True Remove From Dictionary ${service_api_description_published_to_check} ${vendor_specific_service_api_key} Remove From Dictionary ... ${service_api_description_published_to_check['aefProfiles'][0]} ... ${vendor_specific_aef_profile_key} List Should Contain Value ... ${resp.json()['serviceAPIDescriptions']} ... ${service_api_description_published_to_check} Publish API with vendorExt active but without vendorSpecifics [Tags] vendor_extensibility-4 # Register APF ${register_user_info}= Provider Default Registration # Publish API with supported features ${request_body}= Create Service Api Description ... api_name=service_1 ... aef_id=${register_user_info['aef_id']} ... supported_features=100 ${resp}= Post Request Capif ... /published-apis/v1/${register_user_info['apf_id']}/service-apis ... json=${request_body} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${register_user_info['apf_username']} Check Response Variable Type And Values ... ${resp} ... 400 ... ProblemDetails ... title=Bad Request ... status=400 ... detail=VendorExt feature active at Supported Features but VendorSpecifics parameters not published ... cause=VendorExt feature active but vendorSpecifics not present Publish API with vendorExt inactive but with vendorSpecifics [Tags] vendor_extensibility-5 ${vendor_specific_service_api_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:service-info ${vendor_specific_aef_profile_key}= Set Variable vendorSpecific-urn:etsi:mec:capifext:transport-info # Register APF ${register_user_info}= Provider Default Registration # Create Vendor Specific information ${vendor_specific_service_api_description}= Create Vendor Specific Service Api Description ... ${vendor_specific_service_api_key} ${vendor_specific_aef_profile}= Create Vendor Specific Aef Profile ... ${vendor_specific_aef_profile_key} # Publish API with supported features ${request_body}= Create Service Api Description ... api_name=service_1 ... aef_id=${register_user_info['aef_id']} ... supported_features=0 ... vendor_specific_service_api_description=${vendor_specific_service_api_description} ... vendor_specific_aef_profile=${vendor_specific_aef_profile} ${resp}= Post Request Capif ... /published-apis/v1/${register_user_info['apf_id']}/service-apis ... json=${request_body} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${register_user_info['apf_username']} Check Response Variable Type And Values ... ${resp} ... 400 ... ProblemDetails ... title=Bad Request ... status=400 ... detail=VendorExt feature inactive at Supported Features but VendorSpecifics are present parameters published ... cause=VendorExt feature inactive but vendorSpecifics present Published API without vendor extensibility discover with VendSpecQueryParams enabled [Tags] vendor_extensibility-6 # Register APF ${register_user_info}= Provider Default Registration # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=000 # 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']}&supported_features=2 ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${INVOKER_USERNAME} Check Response Variable Type And Values ... ${resp} ... 404 ... ProblemDetails ... title=Not Found ... status=404 ... detail=API Invoker ${register_user_info_invoker['api_invoker_id']} has no API Published that accomplish filter conditions ... cause=No API Published accomplish filter conditions Published API without vendor extensibility and discover with vendSpecQueryParams disabled [Tags] vendor_extensibility-7 # Register APF ${register_user_info}= Provider Default Registration # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=00 # 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']}&supported_features=0 ... 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} Published API without vendor extensibility and discover without supported-features query parameter [Tags] vendor_extensibility-8 # Register APF ${register_user_info}= Provider Default Registration # Publish one api ${service_api_description_published} ${resource_url} ${request_body}= Publish Service Api ... ${register_user_info} ... supported_features=00 # 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} Publish API without supportedFeatures [Tags] vendor_extensibility-9 # Register APF ${register_user_info}= Provider Default Registration # Publish API without supported features ${request_body}= Create Service Api Description ... api_name=service_1 ... aef_id=${register_user_info['aef_id']} ... supported_features=${NONE} ${resp}= Post Request Capif ... /published-apis/v1/${register_user_info['apf_id']}/service-apis ... json=${request_body} ... server=${CAPIF_HTTPS_URL} ... verify=ca.crt ... username=${register_user_info['apf_username']} Check Response Variable Type And Values ... ${resp} ... 400 ... ProblemDetails ... title=Bad Request ... status=400 ... detail=supportedFeatures must be present in this request ... cause=supportedFeatures missed
tests/libraries/api_publish_service/bodyRequests.py +15 −3 Original line number Original line Diff line number Diff line def create_service_api_description(api_name="service_1",aef_id="aef_id"): def create_service_api_description(api_name="service_1", aef_id="aef_id", supported_features="0", vendor_specific_service_api_description=None, vendor_specific_aef_profile=None): return { body = { "apiName": api_name, "apiName": api_name, "aefProfiles": [ "aefProfiles": [ { { Loading Loading @@ -35,7 +35,6 @@ def create_service_api_description(api_name="service_1",aef_id="aef_id"): } } ], ], "description": "ROBOT_TESTING", "description": "ROBOT_TESTING", "supportedFeatures": "fffff", "shareableInfo": { "shareableInfo": { "isShareable": True, "isShareable": True, "capifProvDoms": [ "capifProvDoms": [ Loading @@ -51,3 +50,16 @@ def create_service_api_description(api_name="service_1",aef_id="aef_id"): }, }, "ccfId": "string" "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 if supported_features is not None: body['supportedFeatures'] = supported_features return body
tests/libraries/bodyRequests.py +1 −0 Original line number Original line Diff line number Diff line Loading @@ -5,4 +5,5 @@ from api_publish_service.bodyRequests import * from api_events.bodyRequests import * from api_events.bodyRequests import * from security_api.bodyRequests import * from security_api.bodyRequests import * from api_provider_management.bodyRequests import * from api_provider_management.bodyRequests import * from vendor_extensibility.bodyRequests import * from vault_requests.bodyRequests import * from vault_requests.bodyRequests import *
tests/libraries/common/bodyRequests.py +21 −4 Original line number Original line Diff line number Diff line Loading @@ -69,11 +69,27 @@ def check_variable(input, data_type): def check_attributes_dict(body, data_type): def check_attributes_dict(body, data_type): mandatory_attributes = capif_types[data_type]["mandatory_attributes"] mandatory_attributes = capif_types[data_type]["mandatory_attributes"] optional_parameters = capif_types[data_type]["optional_attributes"] optional_parameters = capif_types[data_type]["optional_attributes"] regex_attributes = capif_types[data_type].get("regex_attributes",{}) all_attributes = mandatory_attributes | optional_parameters all_attributes = mandatory_attributes | optional_parameters # Check if body has not allowed attributes # Check if body has not allowed attributes for body_key in body.keys(): for body_key in body.keys(): print(body_key) if body_key not in all_attributes.keys(): if body_key not in all_attributes.keys(): print(body_key + " NOT IN ALL ATTRIBUTES") present = False if regex_attributes is not None: print("REGEX ATTRIBUTES PRESENT") print(regex_attributes) for regex_key, regex_data_type in regex_attributes.items(): print(regex_key + ":" + regex_data_type) if check_regex(body_key, regex_key): print("MATCH with " + body_key) present = True all_attributes[body_key] = regex_data_type break if not present: raise Exception('Attribute "' + body_key + raise Exception('Attribute "' + body_key + '" is not present as a mandatory or optional key (' + ','.join(all_attributes.keys()) + ')') '" is not present as a mandatory or optional key (' + ','.join(all_attributes.keys()) + ')') Loading Loading @@ -121,6 +137,7 @@ def check_regex(input, regex): is_match = bool(matched) is_match = bool(matched) if is_match: if is_match: print("Regex match") print("Regex match") return True else: else: raise Exception("Input(" + input + ") not match regex (" + regex + ")") raise Exception("Input(" + input + ") not match regex (" + regex + ")") Loading