Commit 8f14cd62 authored by Jorge Moratinos's avatar Jorge Moratinos
Browse files

Merge branch 'OCF172-supported-features-mandatory-on-post-and-put-requests' into 'staging'

Resolve "Supported Features mandatory on POST and PUT Requests"

Closes #172

See merge request !156
parents 0a6f0f85 4616f80b
Loading
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -100,6 +100,13 @@ class InvokerManagementOperations(Resource):
            current_app.logger.error("Bad url format")
            return bad_request_error(detail="Bad Param", cause="Detected Bad formar of param", invalid_params=[{"param": "notificationDestination", "reason": "Not valid URL format"}])

        if not apiinvokerenrolmentdetail.supported_features:
            return bad_request_error(
                detail="supportedFeatures not present in request",
                cause="supportedFeatures not present",
                invalid_params=[{"param": "supportedFeatures", "reason": "not defined"}]
            )

        current_app.logger.debug("Signing Certificate")

        api_invoker_id = 'INV'+str(secrets.token_hex(15))
@@ -148,6 +155,13 @@ class InvokerManagementOperations(Resource):
            if isinstance(result, Response):
                return result

            if not apiinvokerenrolmentdetail.supported_features:
                return bad_request_error(
                    detail="supportedFeatures not present in request",
                    cause="supportedFeatures not present",
                    invalid_params=[{"param": "supportedFeatures", "reason": "not defined"}]
                )

            if apiinvokerenrolmentdetail.onboarding_information.api_invoker_public_key != result["onboarding_information"]["api_invoker_public_key"]:
                cert = self.__sign_cert(
                    apiinvokerenrolmentdetail.onboarding_information.api_invoker_public_key, result["api_invoker_id"])
+15 −1
Original line number Diff line number Diff line
@@ -57,6 +57,13 @@ class ProviderManagementOperations(Resource):
                    "Found provider registered with same id")
                return forbidden_error(detail="Provider already registered", cause="Identical provider reg sec")

            if not api_provider_enrolment_details.supp_feat:
                return bad_request_error(
                    detail="suppFeat not present in request",
                    cause="suppFeat not present",
                    invalid_params=[{"param": "suppFeat", "reason": "not defined"}]
                )

            api_provider_enrolment_details.api_prov_dom_id = secrets.token_hex(
                15)
            
@@ -149,6 +156,13 @@ class ProviderManagementOperations(Resource):
            if isinstance(result, Response):
                return result

            if not api_provider_enrolment_details.supp_feat:
                return bad_request_error(
                    detail="suppFeat not present in request",
                    cause="suppFeat not present",
                    invalid_params=[{"param": "suppFeat", "reason": "not defined"}]
                )

            negotiated_supported_features = return_negotiated_supp_feat_dict(api_provider_enrolment_details.supp_feat)
            api_provider_enrolment_details.supp_feat = negotiated_supported_features["Final"]

+55 −0
Original line number Diff line number Diff line
@@ -182,3 +182,58 @@ Update Onboarded Network App Certificate
    # Check Results
    Check Response Variable Type And Values    ${resp}    200    APIInvokerEnrolmentDetails
    ...    notificationDestination=${new_notification_destination}

Onboard invoker without supported_features
    [Tags]    capif_api_invoker_management-8
    # Default Invoker Registration and Onboarding
    ${register_user_info}=    Register User At Jwt Auth
    ...    username=${invoker_username}    role=${INVOKER_ROLE}

    ${request_body}=    Create Onboarding Notification Body
    ...    http://${CAPIF_CALLBACK_IP}:${CAPIF_CALLBACK_PORT}/netapp_callback
    ...    ${register_user_info['csr_request']}
    ...    ${invoker_username}
    ...    supported_features=${None}

    ${resp}=    Post Request Capif
    ...    ${register_user_info['ccf_onboarding_url']}
    ...    json=${request_body}
    ...    server=${CAPIF_HTTPS_URL}
    ...    verify=ca.crt
    ...    access_token=${register_user_info['access_token']}

    # Check Results
    Check Response Variable Type And Values    ${resp}    400    ProblemDetails
    ...    status=400
    ...    title=Bad Request
    ...    detail=supportedFeatures not present in request
    ...    cause=supportedFeatures not present

Update Onboarded Network App without supported_features
    [Tags]    capif_api_invoker_management-9
    ${new_notification_destination}=    Set Variable
    ...    http://${CAPIF_CALLBACK_IP}:${CAPIF_CALLBACK_PORT}/netapp_new_callback
    # Default Invoker Registration and Onboarding
    ${register_user_info}    ${url}    ${request_body}=    Invoker Default Onboarding

    Set To Dictionary
    ...    ${request_body}
    ...    notificationDestination=${new_notification_destination}

    Remove From Dictionary
    ...    ${request_body}
    ...    supportedFeatures

    ${resp}=    Put Request Capif
    ...    ${url.path}
    ...    ${request_body}
    ...    server=${CAPIF_HTTPS_URL}
    ...    verify=ca.crt
    ...    username=${INVOKER_USERNAME}

    # Check Results
    Check Response Variable Type And Values    ${resp}    400    ProblemDetails
    ...    status=400
    ...    title=Bad Request
    ...    detail=supportedFeatures not present in request
    ...    cause=supportedFeatures not present
+67 −0
Original line number Diff line number Diff line
@@ -203,3 +203,70 @@ Delete Not Registered Api Provider
    ...    title=Not Found
    ...    detail=Not Exist Provider Enrolment Details
    ...    cause=Not found registrations to send this api provider details

Onboard provider without supported_features
    [Tags]    capif_api_provider_management-9
    # Default Provider Registration and Onboarding
    ${register_user_info}=    Register User At Jwt Auth Provider
    ...    username=${PROVIDER_USERNAME}

    # Create provider Registration Body
    ${apf_func_details}=    Create Api Provider Function Details
    ...    ${register_user_info['apf_username']}
    ...    ${register_user_info['apf_csr_request']}
    ...    APF
    ${aef_func_details}=    Create Api Provider Function Details
    ...    ${register_user_info['aef_username']}
    ...    ${register_user_info['aef_csr_request']}
    ...    AEF
    ${amf_func_details}=    Create Api Provider Function Details
    ...    ${register_user_info['amf_username']}
    ...    ${register_user_info['amf_csr_request']}
    ...    AMF
    ${api_prov_funcs}=    Create List    ${apf_func_details}    ${aef_func_details}    ${amf_func_details}

    ${request_body}=    Create Api Provider Enrolment Details Body
    ...    ${register_user_info['access_token']}
    ...    ${api_prov_funcs}
    ...    suppFeat=${None}

    # Register Provider
    ${resp}=    Post Request Capif
    ...    /api-provider-management/v1/registrations
    ...    json=${request_body}
    ...    server=${CAPIF_HTTPS_URL}
    ...    verify=ca.crt
    ...    access_token=${register_user_info['access_token']}

    # Check Results
    Check Response Variable Type And Values    ${resp}    400    ProblemDetails
    ...    status=400
    ...    title=Bad Request
    ...    detail=suppFeat not present in request
    ...    cause=suppFeat not present

Update Registered Api Provider
    [Tags]    capif_api_provider_management-10
    ${register_user_info}=    Provider Default Registration

    ${request_body}=    Set Variable    ${register_user_info['provider_enrollment_details']}

    Set To Dictionary    ${request_body}    apiProvDomInfo=ROBOT_TESTING_MOD

    Remove From Dictionary
    ...    ${request_body}
    ...    suppFeat

    ${resp}=    Put Request Capif
    ...    ${register_user_info['resource_url'].path}
    ...    json=${request_body}
    ...    server=${CAPIF_HTTPS_URL}
    ...    verify=ca.crt
    ...    username=${AMF_PROVIDER_USERNAME}

    # Check Results
    Check Response Variable Type And Values    ${resp}    400    ProblemDetails
    ...    status=400
    ...    title=Bad Request
    ...    detail=suppFeat not present in request
    ...    cause=suppFeat not present
+4 −2
Original line number Diff line number Diff line
def create_onboarding_notification_body(notification_destination="https://host.docker.internal/netapp_callback", api_invoker_public_key="ApiInvokerPublicKey",api_invoker_information='ROBOT_TESTING', api_invoker_id=None):
def create_onboarding_notification_body(notification_destination="https://host.docker.internal/netapp_callback", api_invoker_public_key="ApiInvokerPublicKey",api_invoker_information='ROBOT_TESTING', api_invoker_id=None, supported_features="0"):
    data = {
        "notificationDestination": notification_destination,
        "supportedFeatures": "fffffff",
        "apiInvokerInformation": api_invoker_information,
        "websockNotifConfig": {
            "requestWebsocketUri": True,
@@ -17,4 +16,7 @@ def create_onboarding_notification_body(notification_destination="https://host.d
    if api_invoker_id != None:
        data['apiInvokerId'] = api_invoker_id

    if supported_features != None:
        data['supportedFeatures'] = supported_features

    return (data)
Loading