From 351aa48cb50e65c9831f6cf431640e35e9da213d Mon Sep 17 00:00:00 2001 From: Elian Kraja <e.kraja@nextworks.it> Date: Fri, 19 Apr 2019 16:12:03 +0200 Subject: [PATCH] SOL003 Subscriptions with high level code --- SOL003/VNFIndicator-API/Subscriptions.robot | 217 ++++++----------- .../VNFIndicatorsKeywords.robot | 230 ++++++++++++++++++ .../environment/subscriptions.txt | 7 +- .../environment/variables.txt | 12 +- .../VNFIndicator-API/jsons/subscriptions.json | 2 +- .../VnfIndicatorNotification.robot | 20 +- .../environment/variables.txt | 9 +- .../Subscriptions.robot | 195 ++++++--------- .../VNFPackageManagementKeywords.robot | 172 +++++++++++++ .../environment/subscriptions.txt | 6 +- .../environment/variables.txt | 17 +- .../jsons/subscriptions.json | 5 +- .../PackageManagementNotification.robot | 18 +- .../environment/variables.txt | 11 +- .../PerformanceManagementNotification.robot | 115 +++++++++ .../Subscriptions.robot | 1 + .../VNFPerformanceManagementKeywords.robot | 9 +- .../environment/variables.txt | 2 +- 18 files changed, 736 insertions(+), 312 deletions(-) create mode 100644 SOL003/VNFIndicator-API/VNFIndicatorsKeywords.robot create mode 100644 SOL003/VNFPackageManagement-API/VNFPackageManagementKeywords.robot create mode 100644 SOL003/VNFPerformanceManagement-API/PerformanceManagementNotification.robot diff --git a/SOL003/VNFIndicator-API/Subscriptions.robot b/SOL003/VNFIndicator-API/Subscriptions.robot index d7bd5ef2..99390195 100644 --- a/SOL003/VNFIndicator-API/Subscriptions.robot +++ b/SOL003/VNFIndicator-API/Subscriptions.robot @@ -2,147 +2,86 @@ Library JSONSchemaLibrary schemas/ Resource environment/variables.txt # Generic Parameters Resource environment/subscriptions.txt +Resource VNFIndicatorsKeywords.robot Library OperatingSystem Library JSONLibrary -Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT} +Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT} ssl_verify=false +Library MockServerLibrary +Library Process +Suite Setup Create Sessions +Suite Teardown Terminate All Processes kill=true *** Test Cases *** -GET Subscription - Log Trying to get the list of subscriptions - 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 VnfIndicatorSubscriptions.schema.json ${result} - Log Validated VnfIndicatorSubscription schema - -GET Subscription - Filter - Log Trying to get the list of subscriptions using filters - Set Headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} - GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?${POS_FILTER} - Integer response status 200 - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - Log Received a 200 OK as expected - ${result}= Output response body - Validate Json VnfIndicatorSubscriptions.schema.json ${result} - Log Validated VnfIndicatorSubscriptions schema - -GET Subscription - Negative Filter - Log Trying to get the list of subscriptions using filters with wrong attribute name - Set Headers {"Accept": "${ACCEPT_JSON}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} - GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?${NEG_FILTER} - Integer response status 400 - Log Received a 400 Bad Request as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - Log Trying to validate ProblemDetails - ${problemDetails}= Output response body - Validate Json ProblemDetails.schema.json ${problemDetails} - Log Validation OK - -GET Subscription - Negative (Not Found) - Log Trying to perform a request on a Uri which doesn't exist - 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 404 Not Found as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - Log Trying to validate ProblemDetails - ${problemDetails}= Output response body - Validate Json ProblemDetails.schema.json ${problemDetails} - Log Validation OK - -GET Subscription - Negative (Unauthorized: Wrong Token) - Log Trying to perform a negative get, using wrong authorization bearer - Pass Execution If ${AUTH_USAGE} == 0 Skipping test as VNFM is not supporting authentication - Set Headers {"Accept": "${ACCEPT_JSON}"} - GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions - Integer response status 401 - Log Received 401 Unauthorized as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} application/json - Log Trying to validate ProblemDetails - ${problemDetails}= Output response body - Validate Json ProblemDetails.schema.json ${problemDetails} - Log Validation OK - -POST Subscription - Log Trying to create a new subscription - Set Headers {"Accept": "${ACCEPT_JSON}"} - Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - ${body}= Get File jsons/subscriptions.json - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} - Integer response status 201 - Log Received 201 Created as expected - ${headers}= Output response headers - Should Contain ${headers} Location - Log Response has header Location - ${result}= Output response body - Validate Json VnfIndicatorSubscription.schema.json ${result} - Log Validation of VnfIndicatorSubscription OK - -POST Subscription - DUPLICATION - Log Trying to create a subscription with an already created content - Pass Execution If ${VNFM_DUPLICATION} == 0 VNFM is not permitting duplication. Skipping the test - Set Headers {"Accept": "${ACCEPT_JSON}"} - Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - ${body}= Get File jsons/subscriptions.json - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} - Integer response status 201 - Log Received 201 Created as expected - ${headers}= Output response headers - Should Contain ${headers} Location - Log Response has header Location - ${result}= Output response body - Validate Json VnfIndicatorSubscription.schema.json ${result} - Log Validation of VnfIndicatorSubscription OK - -POST Subscription - NO DUPLICATION - Log Trying to create a subscription with an already created content - Pass Execution If ${VNFM_DUPLICATION} == 1 VNFM is permitting duplication. Skipping the test - Set Headers {"Accept": "${ACCEPT_JSON}"} - Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - ${body}= Get File jsons/subscriptions.json - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} - Integer response status 303 - Log Received 303 See Other as expected - ${headers}= Output response headers - Should Contain ${headers} Location - Log Response has header Location - -PUT Subscription - (Method not implemented) - Log Trying to perform a PUT. This method should not be implemented - Set Headers {"Accept": "${ACCEPT_JSON}"} - 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) - Log Trying to perform a PATCH. This method should not be implemented - Set Headers {"Accept": "${ACCEPT_JSON}"} - 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 - -DELETE Subscription - (Method not implemented) - Log Trying to perform a DELETE. This method should not be implemented - Set Headers {"Accept": "${ACCEPT_JSON}"} - 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 +GET All VNF Indicators Subscriptions + Get All VNF Indicators Subscriptions + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is VnfIndicatorSubscriptions + + +GET VNF Indicators Subscriptions with attribute-based filter + Get VNF Indicators Subscriptions with filter + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is VnfIndicatorSubscriptions + Check HTTP Response Body Subscriptions Match the requested Attribute-Based Filter + + +GET VNF Indicators Subscriptions with invalid attribute-based filter + Get VNF Indicators Subscriptions with invalid filter + Check HTTP Response Status Code Is 400 + Check HTTP Response Body Json Schema Is ProblemDetails + + +GET VNF Indicators Subscriptions with invalid resource endpoint + Get VNF Indicators Subscriptions with invalid resource endpoint + Check HTTP Response Status Code Is 404 + + +GET VNF Indicators Subscriptions with invalid authentication token + Get VNF Indicators Subscriptions with invalid authentication token + Check HTTP Response Status Code Is 401 + Check HTTP Response Body Json Schema Is ProblemDetails + + +Create new VNF indicator subscription + Send Post Request for VNF Indicator Subscription + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is VnfIndicatorSubscription + Check HTTP Response Body Matches the Subscription + Check Postcondition VNF Indicator Subscription Is Set + + + +Create duplicated VNF indicator subscription with duplication handler + Send Post Request for Duplicated VNF indicator Subscription + Check HTTP Response Status Code Is 303 + Check HTTP Response Body Is Empty + Check HTTP Response Header Contains Location + Check Postcondition VNF indicator Subscription Is Set Location + + +Create duplicated VNF indicator subscription without duplication handler + Send Post Request for Duplicated VNF indicator 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 indicator Subscription Is Set + + + + +PUT VNF Indicator Subscriptions - Method not implemented + Send Put Request for VNF Indicator Subscriptions + Check HTTP Response Status Code Is 405 + + + +PATCH VNF Indicator Subscriptions - Method not implemented + Send Patch Request for VNF Indicator Subscriptions + Check HTTP Response Status Code Is 405 + + +DELETE VNF Indicator Subscriptions - Method not implemented + Send Delete Request for VNF Indicator Subscriptions + Check HTTP Response Status Code Is 405 + diff --git a/SOL003/VNFIndicator-API/VNFIndicatorsKeywords.robot b/SOL003/VNFIndicator-API/VNFIndicatorsKeywords.robot new file mode 100644 index 00000000..00cf1f7a --- /dev/null +++ b/SOL003/VNFIndicator-API/VNFIndicatorsKeywords.robot @@ -0,0 +1,230 @@ +*** Settings *** +Resource environment/variables.txt +Resource environment/subscriptions.txt +Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT} ssl_verify=false +Library MockServerLibrary +Library OperatingSystem +Library BuiltIn +Library JSONLibrary +Library Collections +Library JSONSchemaLibrary schemas/ +Library Process + +*** Keywords *** +Get All VNF Indicators Subscriptions + Log Trying to get the list of subscriptions + Set Headers {"Accept": "${ACCEPT_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 VnfIndicatorSubscriptions.schema.json ${result} + # Log Validated VnfIndicatorSubscription schema + + +Get VNF Indicators Subscriptions with filter + Log Trying to get the list of subscriptions using filters + 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 + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # Log Received a 200 OK as expected + # ${result}= Output response body + # Validate Json VnfIndicatorSubscriptions.schema.json ${result} + # Log Validated VnfIndicatorSubscriptions schema + + +Get VNF Indicators Subscriptions with invalid filter + Log Trying to get the list of subscriptions using filters with wrong attribute name + 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 + # Log Trying to validate ProblemDetails + # ${problemDetails}= Output response body + # Validate Json ProblemDetails.schema.json ${problemDetails} + # Log Validation OK + + +Get VNF Indicators Subscriptions with invalid resource endpoint + Log Trying to perform a request on a Uri which doesn't exist + 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 404 Not Found as expected + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # Log Trying to validate ProblemDetails + # ${problemDetails}= Output response body + # Validate Json ProblemDetails.schema.json ${problemDetails} + # Log Validation OK + + +Get VNF Indicators Subscriptions with invalid authentication token + Log Trying to perform a negative get, using wrong authorization bearer + Pass Execution If ${AUTH_USAGE} == 0 Skipping test as VNFM is not supporting authentication + Set Headers {"Accept": "${ACCEPT_JSON}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 401 + # Log Received 401 Unauthorized as expected + # ${contentType}= Output response headers Content-Type + # Should Contain ${contentType} application/json + # Log Trying to validate ProblemDetails + # ${problemDetails}= Output response body + # Validate Json ProblemDetails.schema.json ${problemDetails} + # Log Validation OK + + +Send Post Request for VNF Indicator Subscription + Log Trying to create a new subscription + Set Headers {"Accept": "${ACCEPT_JSON}"} + Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} + ${body}= Get File jsons/subscriptions.json + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${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 201 Created as expected + # ${headers}= Output response headers + # Should Contain ${headers} Location + # Log Response has header Location + # ${result}= Output response body + # Validate Json VnfIndicatorSubscription.schema.json ${result} + # Log Validation of VnfIndicatorSubscription OK + + + +Send Post Request for Duplicated VNF indicator Subscription + Log Trying to create a subscription with an already created content + Set Headers {"Accept": "${ACCEPT_JSON}"} + Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} + ${body}= Get File jsons/subscriptions.json + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + # Integer response status 201 + # Log Received 201 Created as expected + # ${headers}= Output response headers + # Should Contain ${headers} Location + # Log Response has header Location + # ${result}= Output response body + # Validate Json VnfIndicatorSubscription.schema.json ${result} + # Log Validation of VnfIndicatorSubscription OK + + +Send Put Request for VNF Indicator Subscriptions + Log Trying to perform a PUT. This method should not be implemented + Set Headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + PUT ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Send Patch Request for VNF Indicator Subscriptions + Log Trying to perform a PATCH. This method should not be implemented + Set Headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + PATCH ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Send Delete Request for VNF Indicator Subscriptions + Log Trying to perform a DELETE. This method should not be implemented + Set Headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + DELETE ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +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 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 + #TODO + + +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 Indicator Subscription Is Set + [Arguments] ${location}="" + 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}"} + Run Keyword If Should Not Be Equal As Strings ${location} Location GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${response['body']['id']} + Run Keyword If Should Be Equal As Strings ${location} Location GET ${response['headers']['Location']} + ${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 + + +Create Sessions + Pass Execution If ${VNFM_CHECKS_NOTIF_ENDPOINT} == 0 MockServer not necessary to run + 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}:${callback_port} + + +Check Notification Endpoint + &{notification_request}= Create Mock Request Matcher GET ${callback_endpoint} + &{notification_response}= Create Mock Response headers="Content-Type: application/json" status_code=204 + Create Mock Expectation ${notification_request} ${notification_response} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${notification_request} + Clear Requests ${callback_endpoint} diff --git a/SOL003/VNFIndicator-API/environment/subscriptions.txt b/SOL003/VNFIndicator-API/environment/subscriptions.txt index 1e97b10b..5dea0892 100644 --- a/SOL003/VNFIndicator-API/environment/subscriptions.txt +++ b/SOL003/VNFIndicator-API/environment/subscriptions.txt @@ -1,4 +1,7 @@ *** Variables *** -${POS_FILTER} callbackUri=http://127.0.0.1/subscribe -${NEG_FILTER} callback=http://127.0.0.1/subscribe +${filter_ok} callbackUri=${callbackUri} +${filter_ko} erroneousFilter=erroneous +${callbackUri} http://172.22.1.7:9091/vnfind/subscriptions +${total_polling_time} 2 min +${polling_interval} 10 sec diff --git a/SOL003/VNFIndicator-API/environment/variables.txt b/SOL003/VNFIndicator-API/environment/variables.txt index ada6f984..5b76feb2 100644 --- a/SOL003/VNFIndicator-API/environment/variables.txt +++ b/SOL003/VNFIndicator-API/environment/variables.txt @@ -13,5 +13,15 @@ ${apiRoot} / ${apiVersion} v1 ${apiName} vnfind -${VNFM_DUPLICATION} 1 +${VNFM_CHECKS_NOTIF_ENDPOINT} 1 ## If true, during subscription, the FUT performs a get to the notification endpoint +${VNFM_ALLOWS_DUPLICATE_SUBS} 1 + +${response} + +${callback_port} 9091 +${callback_uri} http://172.22.1.7:${callback_port} +${callback_endpoint} /vnfind/subscriptions +${callback_endpoint_error} /subs_404 + +${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar \ No newline at end of file diff --git a/SOL003/VNFIndicator-API/jsons/subscriptions.json b/SOL003/VNFIndicator-API/jsons/subscriptions.json index 6aa4c4e1..36bc9855 100644 --- a/SOL003/VNFIndicator-API/jsons/subscriptions.json +++ b/SOL003/VNFIndicator-API/jsons/subscriptions.json @@ -1,3 +1,3 @@ { - "callbackUri": "http://127.0.0.1/subscribe" + "callbackUri": "http://172.22.1.7:9091/vnfind/subscribes" } \ No newline at end of file diff --git a/SOL003/VNFIndicatorNotification-API/VnfIndicatorNotification.robot b/SOL003/VNFIndicatorNotification-API/VnfIndicatorNotification.robot index b80583e2..48b1c901 100644 --- a/SOL003/VNFIndicatorNotification-API/VnfIndicatorNotification.robot +++ b/SOL003/VNFIndicatorNotification-API/VnfIndicatorNotification.robot @@ -11,14 +11,6 @@ Library String *** Test Cases *** -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 VNF Indicator Notification ${json}= Get File schemas/VnfIndicatorValueChangeNotification.schema.json ${BODY}= evaluate json.loads('''${json}''') json @@ -26,7 +18,7 @@ Post VNF Indicator 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} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -39,7 +31,7 @@ Post VNF Indicator Notification Negative 404 &{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} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -52,7 +44,7 @@ Put VNF Indicator Notification &{req}= Create Mock Request Matcher PUT ${callback_endpoint} &{rsp}= Create Mock Response status_code=405 Create Mock Expectation ${req} ${rsp} - Sleep ${sleep_interval} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -64,7 +56,7 @@ Patch VNF Indicator Notification &{req}= Create Mock Request Matcher PATCH ${callback_endpoint} &{rsp}= Create Mock Response status_code=405 Create Mock Expectation ${req} ${rsp} - Sleep ${sleep_interval} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -76,7 +68,7 @@ Delete VNF Indicator Notification &{req}= Create Mock Request Matcher DELETE ${callback_endpoint} &{rsp}= Create Mock Response status_code=405 Create Mock Expectation ${req} ${rsp} - Sleep ${sleep_interval} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -87,5 +79,5 @@ Delete VNF Indicator Notification Create Sessions 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}:${callback_port} + Create Mock Session ${callback_uri} \ No newline at end of file diff --git a/SOL003/VNFIndicatorNotification-API/environment/variables.txt b/SOL003/VNFIndicatorNotification-API/environment/variables.txt index 5820ea0b..6937bb28 100644 --- a/SOL003/VNFIndicatorNotification-API/environment/variables.txt +++ b/SOL003/VNFIndicatorNotification-API/environment/variables.txt @@ -1,7 +1,8 @@ *** Variables *** -${callback_uri} http://localhost ${callback_port} 9091 -${callback_endpoint} /endpoint -${callback_endpoint_error} /endpoint_404 -${sleep_interval} 20s +${callbackUri} http://172.22.1.7:${callback_port} +${callback_endpoint} /vnfind/subscriptions +${callback_endpoint_error} /subs_404 +${total_polling_time} 2 min +${polling_interval} 10 sec ${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar \ No newline at end of file diff --git a/SOL003/VNFPackageManagement-API/Subscriptions.robot b/SOL003/VNFPackageManagement-API/Subscriptions.robot index 8a65d138..58f89753 100644 --- a/SOL003/VNFPackageManagement-API/Subscriptions.robot +++ b/SOL003/VNFPackageManagement-API/Subscriptions.robot @@ -2,132 +2,77 @@ Library JSONSchemaLibrary schemas/ Resource environment/variables.txt # Generic Parameters Resource environment/subscriptions.txt +Resource VNFPackageManagementKeywords.robot Library OperatingSystem Library JSONLibrary -Library REST ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT} +Library REST ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT} ssl_verify=false +Library MockServerLibrary +Library Process +Suite Setup Create Sessions +Suite Teardown Terminate All Processes kill=true *** Test Cases *** -GET Subscription - Log Trying to get the list of subscriptions - 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} ${CONTENT_TYPE_JSON} - ${result}= Output response body - Validate Json PkgmSubscriptions.schema.json ${result} - Log Validated PkgmSubscription schema - -GET Subscription - Filter - Log Trying to get the list of subscriptions using filters - 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} ${CONTENT_TYPE_JSON} - ${result}= Output response body - Validate Json PkgmSubscriptions.schema.json ${result} - Log Validated PkgmSubscription schema - -GET Subscription - Negative Filter - Log Trying to get the list of subscriptions using filters with wrong attribute name - 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} ${CONTENT_TYPE_JSON} - Log Trying to validate ProblemDetails - ${problemDetails}= Output response body - Validate Json ProblemDetails.schema.json ${problemDetails} - Log Validation OK - -GET Subscription - Negative (Not Found) - Log Trying to perform a request on a Uri which doesn't exist - 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 404 Not Found as expected - ${contentType}= Output response headers Content-Type - Should Contain ${contentType} ${CONTENT_TYPE_JSON} - Log Trying to validate ProblemDetails - ${problemDetails}= Output response body - Validate Json ProblemDetails.schema.json ${problemDetails} - Log Validation OK - -POST Subscription - Log Trying to create a new subscription - Set Headers {"Accept": "${ACCEPT_JSON}"} - Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - ${body}= Get File jsons/subscriptions.json - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} - Integer response status 201 - Log Received 201 Created as expected - ${headers}= Output response headers - Should Contain ${headers} Location - Log Response has header Location - ${result}= Output response body - Validate Json PkgmSubscription.schema.json ${result} - Log Validation of PkgmSubscription OK - -POST Subscription - DUPLICATION - Log Trying to create a subscription with an already created content - Pass Execution If ${NFVO_DUPLICATION} == 0 NFVO is not permitting duplication. Skipping the test - Set Headers {"Accept": "${ACCEPT_JSON}"} - Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - ${body}= Get File jsons/subscriptions.json - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} - Integer response status 201 - Log Received 201 Created as expected - ${headers}= Output response headers - Should Contain ${headers} Location - Log Response has header Location - ${result}= Output response body - Validate Json PkgmSubscription.schema.json ${result} - Log Validation of PkgmSubscription OK - -POST Subscription - NO DUPLICATION - Log Trying to create a subscription with an already created content - Pass Execution If ${NFVO_DUPLICATION} == 1 NFVO is permitting duplication. Skipping the test - Set Headers {"Accept": "${ACCEPT_JSON}"} - Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} - ${body}= Get File jsons/subscriptions.json - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} - POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} - Integer response status 303 - Log Received 303 See Other as expected - ${headers}= Output response headers - Should Contain ${headers} Location - Log Response header contains Location - -PUT Subscription - (Method not implemented) - Log Trying to perform a PUT. This method should not be implemented - Set Headers {"Accept": "${ACCEPT_JSON}"} - 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) - Log Trying to perform a PATCH. This method should not be implemented - Set Headers {"Accept": "${ACCEPT_JSON}"} - 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 - -DELETE Subscription - (Method not implemented) - Log Trying to perform a DELETE. This method should not be implemented - Set Headers {"Accept": "${ACCEPT_JSON}"} - 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 +Get All VNF Package Subscriptions + Get all VNF Package Subscriptions + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is PkgmSubscriptions + + +Get VNF Package Subscriptions with attribute-based filter + Get VNF Package Subscriptions with attribute-based filters + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is PkgmSubscription + Check HTTP Response Body Subscriptions Match the requested Attribute-Based Filter + + +Get VNF Package Subscriptions with invalid attribute-based filter + Get VNF Package Subscriptions with invalid attribute-based filters + Check HTTP Response Status Code Is 400 + Check HTTP Response Body Json Schema Is ProblemDetails + +GET VNF Package Subscription with invalid resource endpoint + Get VNF Package Subscriptions with invalid resource endpoint + Check HTTP Response Status Code Is 404 + + +Create new VNF Package subscription + Send Post Request for VNF Package Subscription + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is PkgmSubscription + Check HTTP Response Body Matches the Subscription + Check Postcondition VNF Package Subscription Is Set + + +Create duplicated VNF Package subscription with duplication handler + Send Post Request for Duplicated VNF Package Subscription + Check HTTP Response Status Code Is 303 + Check HTTP Response Body Is Empty + Check HTTP Response Header Contains Location + Check Postcondition VNF Package Subscription Is Set Location + + +Create duplicated VNF Package subscription without duplication handler + Send Post Request for Duplicated VNF Package 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 Package Subscription Is Set + + + +PUT VNF Package Subscriptions - Method not implemented + Send Put Request for VNF Package Subscriptions + Check HTTP Response Status Code Is 405 + + +PATCH VNF Package Subscriptions - Method not implemented + Send Patch Request for VNF Package Subscriptions + Check HTTP Response Status Code Is 405 + + +DELETE VNF Package Subscriptions - Method not implemented + Send Delete Request for VNF Package Subscriptions + Check HTTP Response Status Code Is 405 + + + diff --git a/SOL003/VNFPackageManagement-API/VNFPackageManagementKeywords.robot b/SOL003/VNFPackageManagement-API/VNFPackageManagementKeywords.robot new file mode 100644 index 00000000..8889a3fd --- /dev/null +++ b/SOL003/VNFPackageManagement-API/VNFPackageManagementKeywords.robot @@ -0,0 +1,172 @@ +*** Settings *** +Resource environment/variables.txt +Resource environment/subscriptions.txt +Library REST ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT} ssl_verify=false +Library MockServerLibrary +Library OperatingSystem +Library BuiltIn +Library JSONLibrary +Library Collections +Library JSONSchemaLibrary schemas/ +Library Process + + +*** Keywords *** +Get all VNF Package Subscriptions + Log Trying to get the list of subscriptions + Set Headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Get VNF Package Subscriptions with attribute-based filters + Log Trying to get the list of subscriptions using filters + 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} + + + + +Get VNF Package Subscriptions with invalid attribute-based filters + Log Trying to get the list of subscriptions using filters with wrong attribute name + 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} + + + +Get VNF Package Subscriptions with invalid resource endpoint + Log Trying to perform a request on a Uri which doesn't exist + 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} + + + +Send Post Request for VNF Package Subscription + Log Trying to create a new subscription + Set Headers {"Accept": "${ACCEPT_JSON}"} + Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} + ${body}= Get File jsons/subscriptions.json + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Run Keyword If ${NFVO_CHECKS_NOTIF_ENDPOINT} == 1 + ... Check Notification Endpoint + + + +Send Post Request for Duplicated VNF Package Subscription + Log Trying to create a subscription with an already created content + Set Headers {"Accept": "${ACCEPT_JSON}"} + Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"} + ${body}= Get File jsons/subscriptions.json + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Send Put Request for VNF Package Subscriptions + Log Trying to perform a PUT. This method should not be implemented + Set Headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + PUT ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + +Send Patch Request for VNF Package Subscriptions + Log Trying to perform a PATCH. This method should not be implemented + Set Headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + PATCH ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Send Delete Request for VNF Package Subscriptions + Log Trying to perform a DELETE. This method should not be implemented + Set Headers {"Accept": "${ACCEPT_JSON}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + DELETE ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + + +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 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 Package Management according to filter + #TODO + + +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 Package Subscription Is Set + [Arguments] ${location}="" + 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}"} + Run Keyword If Should Not Be Equal As Strings ${location} Location GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${response['body']['id']} + Run Keyword If Should Be Equal As Strings ${location} Location GET ${response['headers']['Location']} + ${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 + + +Create Sessions + Pass Execution If ${NFVO_CHECKS_NOTIF_ENDPOINT} == 0 MockServer not started as NFVO is not checking the 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}:${callback_port} + + +Check Notification Endpoint + &{notification_request}= Create Mock Request Matcher GET ${callback_endpoint} + &{notification_response}= Create Mock Response headers="Content-Type: application/json" status_code=204 + Create Mock Expectation ${notification_request} ${notification_response} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${notification_request} + Clear Requests ${callback_endpoint} diff --git a/SOL003/VNFPackageManagement-API/environment/subscriptions.txt b/SOL003/VNFPackageManagement-API/environment/subscriptions.txt index 3c1b565e..b4c91105 100644 --- a/SOL003/VNFPackageManagement-API/environment/subscriptions.txt +++ b/SOL003/VNFPackageManagement-API/environment/subscriptions.txt @@ -1,4 +1,6 @@ *** Variables *** -${filter_ok} callbackUri=http://127.0.0.1/subscription +${filter_ok} callbackUri=http://172.22.1.7:9091/vnfpkgm/subscriptions ${filter_ko} nfvId=f9f130e4-05eb-4082-a676-4c97d13a883d # Not existant filter attribute-based -${NFVO_DUPLICATION} 0 +${callbackUri} http://172.22.1.7:9091/vnfpkgm/subscriptions +${total_polling_time} 2 min +${polling_interval} 10 sec diff --git a/SOL003/VNFPackageManagement-API/environment/variables.txt b/SOL003/VNFPackageManagement-API/environment/variables.txt index 3974f40a..486125ee 100644 --- a/SOL003/VNFPackageManagement-API/environment/variables.txt +++ b/SOL003/VNFPackageManagement-API/environment/variables.txt @@ -14,4 +14,19 @@ ${onboardingStateVnfPkgId} f9f130e4-05eb-4082-a676-4c97d13a883d ${apiRoot} / ${apiVersion} v1 -${apiName} vnfpkgm \ No newline at end of file +${apiName} vnfpkgm + +${NFVO_CHECKS_NOTIF_ENDPOINT} 1 ## If true, during subscription, the FUT performs a get to the notification endpoint + +${NFVO_ALLOWS_DUPLICATE_SUBS} 1 + +${response} + + +${callback_port} 9091 +${callback_uri} http://172.22.1.7:${callback_port} +${callback_endpoint} /vnfpkgm/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/VNFPackageManagement-API/jsons/subscriptions.json b/SOL003/VNFPackageManagement-API/jsons/subscriptions.json index 2b90c2d1..1c4dcf11 100644 --- a/SOL003/VNFPackageManagement-API/jsons/subscriptions.json +++ b/SOL003/VNFPackageManagement-API/jsons/subscriptions.json @@ -1,6 +1,3 @@ { - "callbackUri": "http://127.0.0.1/subscribe", - "filter": { - "vnfPkgId": "788106a2-d692-44f3-a86d-384f0ce35e42" - } + "callbackUri": "http://172.22.1.7:9091/vnfpkgm/subscriptions" } \ No newline at end of file diff --git a/SOL003/VNFPackageManagementNotification-API/PackageManagementNotification.robot b/SOL003/VNFPackageManagementNotification-API/PackageManagementNotification.robot index 49127b6e..de06540a 100644 --- a/SOL003/VNFPackageManagementNotification-API/PackageManagementNotification.robot +++ b/SOL003/VNFPackageManagementNotification-API/PackageManagementNotification.robot @@ -15,7 +15,7 @@ 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} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Verify Mock Expectation ${req} Clear Requests ${callback_endpoint} @@ -26,7 +26,7 @@ Post VNF Package Onboarding 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} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -40,7 +40,7 @@ Post VNF Package Onboarding Notification Negative 404 &{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} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -53,7 +53,7 @@ Post VNF Package Change 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} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -67,7 +67,7 @@ Post Package Change Notification Negative 404 &{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} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -79,7 +79,7 @@ PUT VNF Package Management Notification &{req}= Create Mock Request Matcher PUT ${callback_endpoint} &{rsp}= Create Mock Response status_code=405 Create Mock Expectation ${req} ${rsp} - Sleep ${sleep_interval} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -91,7 +91,7 @@ PATCH VNF Package Management Notification &{req}= Create Mock Request Matcher PATCH ${callback_endpoint} &{rsp}= Create Mock Response status_code=405 Create Mock Expectation ${req} ${rsp} - Sleep ${sleep_interval} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -103,7 +103,7 @@ DELETE VNF Package Management Notification &{req}= Create Mock Request Matcher DELETE ${callback_endpoint} &{rsp}= Create Mock Response status_code=405 Create Mock Expectation ${req} ${rsp} - Sleep ${sleep_interval} + Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} Log Verifying results Verify Mock Expectation ${req} Log Cleaning the endpoint @@ -113,4 +113,4 @@ DELETE VNF Package Management Notification Create Sessions 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}:${callback_port} \ No newline at end of file + Create Mock Session ${callback_uri} diff --git a/SOL003/VNFPackageManagementNotification-API/environment/variables.txt b/SOL003/VNFPackageManagementNotification-API/environment/variables.txt index 2918a254..5788c989 100644 --- a/SOL003/VNFPackageManagementNotification-API/environment/variables.txt +++ b/SOL003/VNFPackageManagementNotification-API/environment/variables.txt @@ -1,9 +1,8 @@ - *** Variables *** -${callback_uri} http://localhost ${callback_port} 9091 -${callback_endpoint} /endpoint -${callback_endpoint_error} /endpoint_404 -${sleep_interval} 20s - +${callback_uri} http://172.22.1.7:${callback_port} +${callback_endpoint} /vnfpkgm/subscriptions +${callback_endpoint_error} /subs_404 +${total_polling_time} 2 min +${polling_interval} 10 sec ${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/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 bffe0edc..f8cbfacb 100644 --- a/SOL003/VNFPerformanceManagement-API/Subscriptions.robot +++ b/SOL003/VNFPerformanceManagement-API/Subscriptions.robot @@ -51,6 +51,7 @@ Create duplicated VNF Performance subscription with duplication handler Check HTTP Response Status Code Is 303 Check HTTP Response Body Is Empty Check HTTP Response Header Contains Location + Check Postcondition VNF Performance Subscription Is Set Location Create duplicated VNF Performance subscription without duplication handler diff --git a/SOL003/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot b/SOL003/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot index da972bba..0a61c21d 100644 --- a/SOL003/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot +++ b/SOL003/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot @@ -205,8 +205,8 @@ Check HTTP Response Body Is Empty 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} - + # Should Be Equal As Strings ${response['body']['callbackUri']} ${callbackUri} + #TODO Check HTTP Response Body Matches the Subscription Log Check Response matches subscription @@ -217,11 +217,13 @@ Check HTTP Response Body Matches the Subscription Check Postcondition VNF Performance Subscription Is Set + [Arguments] ${location}="" 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']} + Run Keyword If Should Not Be Equal As Strings ${location} Location GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${response['body']['id']} + Run Keyword If Should Be Equal As Strings ${location} Location GET ${response['headers']['Location']} ${output}= Output response Set Suite Variable ${response} ${output} Check HTTP Response Status Code Is 200 @@ -234,6 +236,7 @@ Check HTTP Response Header Contains Create Sessions + Pass Execution If ${VNFM_CHECKS_NOTIF_ENDPOINT} == 0 MockServer not necessary to run 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}:${callback_port} diff --git a/SOL003/VNFPerformanceManagement-API/environment/variables.txt b/SOL003/VNFPerformanceManagement-API/environment/variables.txt index 297e6a4a..b79fd1ff 100644 --- a/SOL003/VNFPerformanceManagement-API/environment/variables.txt +++ b/SOL003/VNFPerformanceManagement-API/environment/variables.txt @@ -24,7 +24,7 @@ ${response} ${callback_port} 9091 -${callback_uri} http://localhost:${callback_port} +${callback_uri} http://172.22.1.7:${callback_port} ${callback_endpoint} /vnfpm/subscriptions ${callback_endpoint_error} /subs_404 ${sleep_interval} 20s -- GitLab