From df8684cae5b95fae3c158961c2ed043d0b904bda Mon Sep 17 00:00:00 2001 From: Elian Kraja <e.kraja@nextworks.it> Date: Fri, 19 Apr 2019 12:28:01 +0200 Subject: [PATCH] Subscriptions on VNF Performance Management with notification handler --- .../PerformanceManagementNotification.robot | 115 +++++++++ .../Subscriptions.robot | 212 +++++----------- .../VNFPerformanceManagementKeywords.robot | 232 ++++++++++++++++++ .../environment/subscriptions.txt | 3 +- .../environment/variables.txt | 15 +- .../jsons/subscriptions.json | 2 +- 6 files changed, 419 insertions(+), 160 deletions(-) create mode 100644 SOL003/VNFPerformanceManagement-API/PerformanceManagementNotification.robot create mode 100644 SOL003/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot diff --git a/SOL003/VNFPerformanceManagement-API/PerformanceManagementNotification.robot b/SOL003/VNFPerformanceManagement-API/PerformanceManagementNotification.robot new file mode 100644 index 00000000..099a2d29 --- /dev/null +++ b/SOL003/VNFPerformanceManagement-API/PerformanceManagementNotification.robot @@ -0,0 +1,115 @@ +*** Setting *** +Resource environment/variables.txt +Library MockServerLibrary +Library Process +Library OperatingSystem +Library BuiltIn +Library Collections +Library String + + +*** Keywords *** +Check Notification Endpoint + &{req}= Create Mock Request Matcher GET ${callback_endpoint} + &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + Create Mock Expectation ${req} ${rsp} + Sleep ${sleep_interval} + Verify Mock Expectation ${req} + Clear Requests ${callback_endpoint} + +Post Performance Information Available Notification + ${json}= Get File schemas/PerformanceInformationAvailableNotification.schema.json + ${BODY}= evaluate json.loads('''${json}''') json + Log Creating mock request and response to handle Performance Information Available Notification + &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${BODY} + &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + Create Mock Expectation ${req} ${rsp} + Sleep ${sleep_interval} + Log Verifying results + Verify Mock Expectation ${req} + Log Cleaning the endpoint + Clear Requests ${callback_endpoint} + + +Post Performance Information Available Notification Negative 404 + ${json}= Get File schemas/ProblemDetails.schema.json + ${BODY}= evaluate json.loads('''${json}''') json + Log Creating mock request and response to handle Performance Information Available Notification to handle 404 error + &{req}= Create Mock Request Matcher POST ${callback_endpoint_error} body_type="JSON_SCHEMA" body=${BODY} + &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=404 + Create Mock Expectation ${req} ${rsp} + Sleep ${sleep_interval} + Log Verifying results + Verify Mock Expectation ${req} + Log Cleaning the endpoint + Clear Requests ${callback_endpoint} + +Post Threshold Crossed Notification + ${json}= Get File schema/ThresholdCrossedNotification.schema.json + ${BODY}= evaluate json.loads('''${json}''') json + Log Creating mock request and response to handle Threshold Crossed Notification + &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${BODY} + &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + Create Mock Expectation ${req} ${rsp} + Sleep ${sleep_interval} + Log Verifying results + Verify Mock Expectation ${req} + Log Cleaning the endpoint + Clear Requests ${callback_endpoint} + + +Post Threshold Crossed Notification Negative 404 + ${json}= Get File schemas/ProblemDetails.schema.json + ${BODY}= evaluate json.loads('''${json}''') json + Log Creating mock request and response to handleThreshold Crossed Notification to handle 404 error + &{req}= Create Mock Request Matcher POST ${callback_endpoint_error} body_type="JSON_SCHEMA" body=${BODY} + &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=404 + Create Mock Expectation ${req} ${rsp} + Sleep ${sleep_interval} + Log Verifying results + Verify Mock Expectation ${req} + Log Cleaning the endpoint + Clear Requests ${callback_endpoint} + + +PUT Performance Notification + Log PUT Method not implemented + &{req}= Create Mock Request Matcher PUT ${callback_endpoint} + &{rsp}= Create Mock Response status_code=405 + Create Mock Expectation ${req} ${rsp} + Sleep ${sleep_interval} + Log Verifying results + Verify Mock Expectation ${req} + Log Cleaning the endpoint + Clear Requests ${callback_endpoint} + + +PATCH Performance Notification + Log PATCH Method not implemented + &{req}= Create Mock Request Matcher PATCH ${callback_endpoint} + &{rsp}= Create Mock Response status_code=405 + Create Mock Expectation ${req} ${rsp} + Sleep ${sleep_interval} + Log Verifying results + Verify Mock Expectation ${req} + Log Cleaning the endpoint + Clear Requests ${callback_endpoint} + + +DELETE Performance Notification + Log PATCH Method not implemented + &{req}= Create Mock Request Matcher DELETE ${callback_endpoint} + &{rsp}= Create Mock Response status_code=405 + Create Mock Expectation ${req} ${rsp} + Sleep ${sleep_interval} + Log Verifying results + Verify Mock Expectation ${req} + Log Cleaning the endpoint + Clear Requests ${callback_endpoint} + + +Create Sessions + Pass Execution If ${VNFM_CHECKS_NOTIF_ENDPOINT} == 0 VNFM is not checking notification endpoint. + Start Process java -jar ${MOCK_SERVER_JAR} -serverPort ${callback_port} alias=mockInstance + Wait For Process handle=mockInstance timeout=5s on_timeout=continue + Create Mock Session ${callback_uri} \ No newline at end of file diff --git a/SOL003/VNFPerformanceManagement-API/Subscriptions.robot b/SOL003/VNFPerformanceManagement-API/Subscriptions.robot index 170a6a77..cb3e03d2 100644 --- a/SOL003/VNFPerformanceManagement-API/Subscriptions.robot +++ b/SOL003/VNFPerformanceManagement-API/Subscriptions.robot @@ -6,174 +6,72 @@ Resource environment/variables.txt # Generic Parameters Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT} Library OperatingSystem Library JSONLibrary +Resource VNFPerformanceManagementKeywords.robot Resource environment/subscriptions.txt +Library MockServerLibrary +Library Process +Suite Setup Create Sessions +Suite Teardown Terminate All Processes kill=true *** Test Cases *** GET Subscription - [Documentation] The client can use this method to query the list of active subscriptions to Performance management notifications - ... subscribed by the client. - ... This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters, - ... request and response data structures, and response codes. - Set headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions - Integer response status 200 - Log Received a 200 OK as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - ${result}= Output response body - Validate Json PmSubscriptions.schema.json ${result} - Log Validated PmSubscription schema + Get VNF Performance Management Subscriptions + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is PmSubscriptions -GET Subscription - Filter - [Documentation] The client can use this method to query the list of active subscriptions to Performance management notifications - ... subscribed by the client. - ... This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters, - ... request and response data structures, and response codes. - Set headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?${filter_ok} - Integer response status 200 - Log Received a 200 OK as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - ${result}= Output response body - Validate Json PmSubscriptions.schema.json ${result} - Log Validated PmSubscription schema -GET Subscription - Negative Filter (Erroneous filter) - [Documentation] The client can use this method to query the list of active subscriptions to Performance management notifications - ... subscribed by the client. - ... This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters, - ... request and response data structures, and response codes. - Set headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?${filter_ko} - Integer response status 400 - Log Received a 400 Bad Request as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - ${result}= Output response body - Validate Json ProblemDetails.schema.json ${result} - Log Validated ProblemDetails schema +GET VNF Performance Management Subscription with attribute-based filter + Get VNF Performance Management Subscriptions with filters + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is PmSubscriptions + Check HTTP Response Body Subscriptions Match the requested Attribute-Based Filter -GET Subscription - Negative (Not Found) - [Documentation] The client can use this method to query the list of active subscriptions to Performance management notifications - ... subscribed by the client. - ... This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters, - ... request and response data structures, and response codes. - Set headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - GET ${apiRoot}/${apiName}/${apiVersion}/subscription - Integer response status 404 - Log Received a 404 Not found as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - ${result}= Output response body - Validate Json ProblemDetails.schema.json ${result} - Log Validated ProblemDetails schema -POST Subscription - [Documentation] The POST method creates a new subscription. - ... This method shall follow the provisions specified in the tables 6.4.7.3.1-1 and 6.4.7.3.1-2 for URI query parameters, - ... request and response data structures, and response codes. - ... Creation of two subscription resources with the same callbackURI and the same filter can result in performance - ... degradation and will provide duplicates of notifications to the NFVO, and might make sense only in very rare use cases. - ... Consequently, the VNFM may either allow creating a subscription resource if another subscription resource with the - ... same filter and callbackUri already exists (in which case it shall return the "201 Created" response code), or may decide - ... to not create a duplicate subscription resource (in which case it shall return a "303 See Other" response code referencing - ... the existing subscription resource with the same filter and callbackUri). - Set headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - Set headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - ${body_request}= Get File jsons/subscriptions.json - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body_request} - Integer response status 201 - Log Received a 201 Created as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - ${result}= Output response body - Validate Json PmSubscription.schema.json ${result} - Log Validated PmSubscription schema - Log Trying to validate the Location header - ${headers}= Output response headers - Should Contain ${headers} Location +GET VNF Performance Management Subscription with invalid attribute-based filter + Get VNF Performance Management Subscriptions with invalid filters + Check HTTP Response Status Code Is 400 + Check HTTP Response Body Json Schema Is ProblemDetails -POST Subscription - DUPLICATION - [Documentation] The POST method creates a new subscription. - ... This method shall follow the provisions specified in the tables 6.4.7.3.1-1 and 6.4.7.3.1-2 for URI query parameters, - ... request and response data structures, and response codes. - ... Creation of two subscription resources with the same callbackURI and the same filter can result in performance - ... degradation and will provide duplicates of notifications to the NFVO, and might make sense only in very rare use cases. - ... Consequently, the VNFM may either allow creating a subscription resource if another subscription resource with the - ... same filter and callbackUri already exists (in which case it shall return the "201 Created" response code), or may decide - ... to not create a duplicate subscription resource (in which case it shall return a "303 See Other" response code referencing - ... the existing subscription resource with the same filter and callbackUri). - Pass Execution If ${VNFM_DUPLICATION} == 1 VNFM is permitting duplication. Skipping the test - Set headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - Set headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - ${body_request}= Get File jsons/subscriptions.json - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body_request} - Integer response status 303 - Log Received a 303 See other as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - ${result}= Output response body - Should Be Empty ${result} - Log Body is empty - Log Trying to validate the Location header - ${headers}= Output response headers - Should Contain ${headers} Location -POST Subscription - NO DUPLICATION - [Documentation] The POST method creates a new subscription. - ... This method shall follow the provisions specified in the tables 6.4.7.3.1-1 and 6.4.7.3.1-2 for URI query parameters, - ... request and response data structures, and response codes. - ... Creation of two subscription resources with the same callbackURI and the same filter can result in performance - ... degradation and will provide duplicates of notifications to the NFVO, and might make sense only in very rare use cases. - ... Consequently, the VNFM may either allow creating a subscription resource if another subscription resource with the - ... same filter and callbackUri already exists (in which case it shall return the "201 Created" response code), or may decide - ... to not create a duplicate subscription resource (in which case it shall return a "303 See Other" response code referencing - ... the existing subscription resource with the same filter and callbackUri). - Pass Execution If ${VNFM_DUPLICATION} == 0 VNFM is not permitting duplication. Skipping the test - Set headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - Set headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - ${body_request}= Get File jsons/subscriptions.json - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body_request} - Integer response status 201 - Log Received a 201 Created as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - ${result}= Output response body - Validate Json PmSubscription.schema.json ${result} - Log Validated PmSubscription schema - Log Trying to validate the Location header - ${headers}= Output response headers - Should Contain ${headers} Location +GET VNF Performance Management Subscription with invalid resource endpoint + Get VNF Performance Management Subscriptions with invalid resource endpoint + Check HTTP Response Status Code Is 404 + + +Create new VNF Performance Management subscription + Send Post Request for VNF Performance Management Subscription + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is PmSubscription + Check HTTP Response Body Matches the Subscription + Check Postcondition VNF Performance Management Subscription Is Set -PUT Subscription - (Method not implemented) - [Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method - ... Not Allowed" response as defined in clause 4.3.5.4. - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - PUT ${apiRoot}/${apiName}/${apiVersion}/subscriptions - Integer response status 405 - Log Received 405 Method not implemented as expected -PATCH Subscription - (Method not implemented) - [Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method - ... Not Allowed" response as defined in clause 4.3.5.4. - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - PATCH ${apiRoot}/${apiName}/${apiVersion}/subscriptions - Integer response status 405 - Log Received 405 Method not implemented as expected +Create duplicated VNF Performance Management subscription with duplication handler + Send Post Request for Duplicated VNF Performance Management Subscription + Check HTTP Response Status Code Is 303 + Check HTTP Response Body Json Schema Is Empty + Check HTTP Response Header Contains Location -DELETE Subscription - (Method not implemented) - [Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method - ... Not Allowed" response as defined in clause 4.3.5.4. - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} - DELETE ${apiRoot}/${apiName}/${apiVersion}/subscriptions - Integer response status 405 - Log Received 405 Method not implemented as expected + +Create duplicated VNF Performance Management subscription without duplication handler + Send Post Request for Duplicated VNF Performance Management Subscription + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is PmSubscription + Check HTTP Response Body Matches the Subscription + Check Postcondition VNF Performance Management Subscription Is Set + + +PUT VNF Performance Management Subscriptions - Method not implemented + Send Put Request for VNF Performance Management Subscriptions + Check HTTP Response Status Code Is 405 + + +PATCH VNF Performance Management Subscriptions - Method not implemented + Send Patch Request for VNF Performance Management Subscriptions + Check HTTP Response Status Code Is 405 + + +DELETE VNF Performance Management Subscriptions - Method not implemented + Send Delete Request for VNF Performance Management Subscriptions + Check HTTP Response Status Code Is 405 diff --git a/SOL003/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot b/SOL003/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot new file mode 100644 index 00000000..1b9e0e7c --- /dev/null +++ b/SOL003/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot @@ -0,0 +1,232 @@ +*** Settings *** +Resource environment/variables.txt +Resource environment/subscriptions.txt +Resource PerformanceManagementNotification.robot +Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT} ssl_verify=false +Library OperatingSystem +Library BuiltIn +Library JSONLibrary +Library Collections +Library JSONSchemaLibrary schemas/ + +*** Keywords *** +Get VNF Performance Management Subscriptions + [Documentation] The client can use this method to query the list of active subscriptions to Performance management notifications + ... subscribed by the client. + ... This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters, + ... request and response data structures, and response codes. + Set headers {"Accept": "application/json"} + Set headers {"Content-Type": "application/json"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 200 + # Log Received a 200 OK as expected + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # ${result}= Output response body + # Validate Json PmSubscriptions.schema.json ${result} + # Log Validated PmSubscription schema + + + Get VNF Performance Management Subscriptions with filters + [Documentation] The client can use this method to query the list of active subscriptions to Performance management notifications + ... subscribed by the client. + ... This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters, + ... request and response data structures, and response codes. + Set headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?${filter_ok} + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 200 + # Log Received a 200 OK as expected + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # ${result}= Output response body + # Validate Json PmSubscriptions.schema.json ${result} + # Log Validated PmSubscription schema + + + +Get VNF Performance Management Subscriptions with invalid filters + [Documentation] The client can use this method to query the list of active subscriptions to Performance management notifications + ... subscribed by the client. + ... This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters, + ... request and response data structures, and response codes. + Set headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?${filter_ko} + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 400 + # Log Received a 400 Bad Request as expected + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # ${result}= Output response body + # Validate Json ProblemDetails.schema.json ${result} + # Log Validated ProblemDetails schema + + +Get VNF Performance Management Subscriptions with invalid resource endpoint + [Documentation] The client can use this method to query the list of active subscriptions to Performance management notifications + ... subscribed by the client. + ... This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters, + ... request and response data structures, and response codes. + Set headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscription + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 404 + # Log Received a 404 Not found as expected + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # ${result}= Output response body + # Validate Json ProblemDetails.schema.json ${result} + # Log Validated ProblemDetails schema + + + +Send Post Request for VNF Performance Management Subscription + [Documentation] The POST method creates a new subscription. + ... This method shall follow the provisions specified in the tables 6.4.7.3.1-1 and 6.4.7.3.1-2 for URI query parameters, + ... request and response data structures, and response codes. + ... Creation of two subscription resources with the same callbackURI and the same filter can result in performance + ... degradation and will provide duplicates of notifications to the NFVO, and might make sense only in very rare use cases. + ... Consequently, the VNFM may either allow creating a subscription resource if another subscription resource with the + ... same filter and callbackUri already exists (in which case it shall return the "201 Created" response code), or may decide + ... to not create a duplicate subscription resource (in which case it shall return a "303 See Other" response code referencing + ... the existing subscription resource with the same filter and callbackUri). + Set headers {"Content-Type": "${CONTENT_TYPE_JSON}"} + Set headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + ${body_request}= Get File jsons/subscriptions.json + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body_request} + ${output}= Output response + Set Suite Variable ${response} ${output} + Run Keyword If ${VNFM_CHECKS_NOTIF_ENDPOINT} == 1 + ... Check Notification Endpoint + # Integer response status 201 + # Log Received a 201 Created as expected + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # ${result}= Output response body + # Validate Json PmSubscription.schema.json ${result} + # Log Validated PmSubscription schema + # Log Trying to validate the Location header + # ${headers}= Output response headers + # Should Contain ${headers} Location + + +Send Post Request for Duplicated VNF Performance Management Subscription + [Documentation] The POST method creates a new subscription. + ... This method shall follow the provisions specified in the tables 6.4.7.3.1-1 and 6.4.7.3.1-2 for URI query parameters, + ... request and response data structures, and response codes. + ... Creation of two subscription resources with the same callbackURI and the same filter can result in performance + ... degradation and will provide duplicates of notifications to the NFVO, and might make sense only in very rare use cases. + ... Consequently, the VNFM may either allow creating a subscription resource if another subscription resource with the + ... same filter and callbackUri already exists (in which case it shall return the "201 Created" response code), or may decide + ... to not create a duplicate subscription resource (in which case it shall return a "303 See Other" response code referencing + ... the existing subscription resource with the same filter and callbackUri). + Set headers {"Content-Type": "${CONTENT_TYPE_JSON}"} + Set headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + ${body_request}= Get File jsons/subscriptions.json + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body_request} + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 303 + # Log Received a 303 See other as expected + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # ${result}= Output response body + # Should Be Empty ${result} + # Log Body is empty + # Log Trying to validate the Location header + # ${headers}= Output response headers + # Should Contain ${headers} Location + + + +Send Put Request for VNF Performance Management Subscriptions + [Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method + ... Not Allowed" response as defined in clause 4.3.5.4. + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + PUT ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 405 + # Log Received 405 Method not implemented as expected + +Send Patch Request for VNF Performance Management Subscriptions + [Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method + ... Not Allowed" response as defined in clause 4.3.5.4. + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + PATCH ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 405 + # Log Received 405 Method not implemented as expected + +Send Delete Request for VNF Performance Management Subscriptions + [Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method + ... Not Allowed" response as defined in clause 4.3.5.4. + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": ${AUTHORIZATION}"} + DELETE ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 405 + # Log Received 405 Method not implemented as expected + + + +Check HTTP Response Status Code Is + [Arguments] ${expected_status} + Should Be Equal ${response['status']} ${expected_status} + Log Status code validated + + + +Check HTTP Response Body Json Schema Is + [Arguments] ${input} + Should Contain ${response['headers']['Content-Type']} application/json + ${schema} = Catenate ${input} .schema.json + Validate Json ${schema} ${response['body']} + Log Json Schema Validation OK + + +Check HTTP Response Body Json Schema Is Empty + Should Be Empty ${response['body']} + Log No json schema is provided. Validation OK + + +Check HTTP Response Body Subscriptions Match the requested Attribute-Based Filter + Log Check Response includes VNF Performance Management according to filter + Should Be Equal As Strings ${response['body']['callbackUri']} ${callbackUri} + + +Check HTTP Response Body Matches the Subscription + Log Check Response matches subscription + ${body}= Get File jsons/subscriptions.json + ${subscription}= evaluate json.loads('''${body}''') json + Should Be Equal ${response['body']['callbackUri']} ${subscription['callbackUri']} + + + +Check Postcondition VNF Performance Management Subscription Is Set + Log Check Postcondition subscription exist + Log Trying to get the subscription + Set Headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${response['body']['id']} + ${output}= Output response + Set Suite Variable ${response} ${output} + Check HTTP Response Status Code Is 200 + + +Check HTTP Response Header Contains + [Arguments] ${CONTENT_TYPE} + Should Contain ${response.headers} ${CONTENT_TYPE} + Log Header is present diff --git a/SOL003/VNFPerformanceManagement-API/environment/subscriptions.txt b/SOL003/VNFPerformanceManagement-API/environment/subscriptions.txt index fd0a8c79..fe74d7bf 100644 --- a/SOL003/VNFPerformanceManagement-API/environment/subscriptions.txt +++ b/SOL003/VNFPerformanceManagement-API/environment/subscriptions.txt @@ -1,3 +1,4 @@ *** Variables *** -${filter_ok} callbackUri=http://localhost/subscriptions +${callbackUri} http://172.22.1.7:9091/vnfpm/subscriptions +${filter_ok} callbackUri=${callbackUri} ${filter_ko} erroneousFilter=erroneous diff --git a/SOL003/VNFPerformanceManagement-API/environment/variables.txt b/SOL003/VNFPerformanceManagement-API/environment/variables.txt index cf741858..297e6a4a 100644 --- a/SOL003/VNFPerformanceManagement-API/environment/variables.txt +++ b/SOL003/VNFPerformanceManagement-API/environment/variables.txt @@ -3,6 +3,7 @@ ${VNFM_HOST} localhost # Hostname of the VNFM ${VNFM_PORT} 8080 # Listening port of the VNFM ${VNFM_SCHEMA} https + ${AUTHORIZATION} Bearer 0b79bab50daca910b000d4f1a2b675d604257e42 ${NEG_AUTHORIZATION} Bearer negativetoken @@ -10,10 +11,22 @@ ${CONTENT_TYPE_JSON} application/json ${ACCEPT_JSON} application/json ${AUTH_USAGE} 1 ${FIELD_USAGE} 1 +${VNFM_CHECKS_NOTIF_ENDPOINT} 1 ## If true, during subscription, the FUT performs a get to the notification endpoint -${VNFM_DUPLICATION} 1 +${VNFM_ALLOWS_DUPLICATE_SUBS} 1 ${apiRoot} / ${apiVersion} v1 ${apiName} vnfpm + +${response} + + +${callback_port} 9091 +${callback_uri} http://localhost:${callback_port} +${callback_endpoint} /vnfpm/subscriptions +${callback_endpoint_error} /subs_404 +${sleep_interval} 20s + +${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar \ No newline at end of file diff --git a/SOL003/VNFPerformanceManagement-API/jsons/subscriptions.json b/SOL003/VNFPerformanceManagement-API/jsons/subscriptions.json index a6a37bf4..dd2ed096 100644 --- a/SOL003/VNFPerformanceManagement-API/jsons/subscriptions.json +++ b/SOL003/VNFPerformanceManagement-API/jsons/subscriptions.json @@ -1,5 +1,5 @@ { - "callbackUri": "http://127.0.0.1/subscribe", + "callbackUri": "http://172.22.1.7:9091/vnfpm/subscriptions", "filter": { "notificationTypes": ["ThresholdCrossedNotification"] } -- GitLab