Commit 7230073d authored by Jorge Moratinos's avatar Jorge Moratinos
Browse files

Merge branch 'OCF86-upgrade-tests-to-allow-vendorextensions' into 'staging'

Ocf86 upgrade tests to allow vendorextensions

See merge request !75
parents 9c1640e1 cf101ffc
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
*** Settings ***
Force Tags    vendor_extensibility
 No newline at end of file
+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
+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": [
            {
            {
@@ -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": [
@@ -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
+1 −0
Original line number Original line Diff line number Diff line
@@ -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 *
+21 −4
Original line number Original line Diff line number Diff line
@@ -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()) + ')')


@@ -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