diff --git a/SOL003/VNFIndicator-API/Subscriptions.robot b/SOL003/VNFIndicator-API/Subscriptions.robot index d7bd5ef222579a7e055897321d077373f736ab29..9939019503bd0bdf21dbf9c9a5213bc0648ff9ad 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 0000000000000000000000000000000000000000..00cf1f7a0e59f43f2540017e57a33ab1e19486db --- /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 1e97b10b3f15848d3f08ca56a02a11564d6a44d1..5dea0892b05257ee49b518ea27f85a10d391c8ab 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 ada6f984ae577b44e69629757c054331aa0c9e04..5b76feb2ace82662ae7f4ed937ec24222c5f2b84 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 6aa4c4e122eb00c52d4ec20c9f11b99bc6cc8f0a..36bc985546f657da2821c81573037ae72ddbca48 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 b80583e22108089389f9e93f883a13f85701a844..48b1c901133f54bda7c6a1839ed6c05bad081834 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 5820ea0b376bfaec4cc9d318d91a9c588cac559d..6937bb2843d685a0f60a54586fc133bb23ec7f82 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 8a65d138f7d0b1c93115e20fcacfa28ed11e2d04..58f897536b42b290275fd815a93e27d8d1f2806c 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 0000000000000000000000000000000000000000..8889a3fd413b2b277df2034a8db0987d2f25e228 --- /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 3c1b565ecd0cfad12bae49024c00ed83ddf653f0..b4c91105c891b278fe53360bfde745c57465c04d 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 3974f40a23dd7d16ef24c62a76a091a60a424e2a..486125ee3f21ad59d36ce0f3de282fd10aa85da3 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 2b90c2d1ff9a3189b42876fd1ac2496ee1806d3d..1c4dcf1108cf90835b0e0eb3c16b4a753f709d80 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 49127b6eb248597b93bc3a6b5c999ac9deac26f7..de06540a6cca40eca2d90a886aaf1ef098ca4cfb 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 2918a25449e0ee662fa65fcd39dc779b8dd97665..5788c989f4e6c66b8947d33d14cc83e3fed30885 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 0000000000000000000000000000000000000000..099a2d292f2c98c92c2198d8320ec3edf396d784 --- /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 bffe0edcc67b7bc33787509cd6e09d668bd542a7..f8cbfacb67ee80a20d222439940d5dc66f7e90f4 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 da972bba0e1e923a8d6222b226d8ba4d4189b8a9..0a61c21dd3b24fb95e3d07837ad904e5620f8068 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 297e6a4a9bf5d9e1bc2cda86ccd1663974d1fb70..b79fd1ff8a07c344a3e8cd0ca6edf1f1e4768cf1 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