From ca24fc704f1e3cde2929e6808d446b542957a4ed Mon Sep 17 00:00:00 2001
From: Elian Kraja <e.kraja@nextworks.it>
Date: Mon, 6 May 2019 12:30:07 +0200
Subject: [PATCH] High Level subscriptions test suites for sol002 indicators
 and sol005 package management

---
 SOL002/VNFIndicator-API/Subscriptions.robot   |  24 +-
 .../environment/subscriptions.txt             |   2 +
 .../environment/variables.txt                 |   9 +
 .../Subscriptions.robot                       |   2 +-
 .../Subscriptions.robot                       |   2 +
 .../Subscriptions.robot                       | 200 ++++++----------
 .../VNFPackageManagementKeywords.robot        | 214 ++++++++++++++++++
 .../environment/variables.txt                 |   8 +-
 8 files changed, 329 insertions(+), 132 deletions(-)
 create mode 100644 SOL005/VNFPackageManagement-API/VNFPackageManagementKeywords.robot

diff --git a/SOL002/VNFIndicator-API/Subscriptions.robot b/SOL002/VNFIndicator-API/Subscriptions.robot
index 5fcf4a68..e46abfd3 100644
--- a/SOL002/VNFIndicator-API/Subscriptions.robot
+++ b/SOL002/VNFIndicator-API/Subscriptions.robot
@@ -4,7 +4,11 @@ Resource          environment/variables.txt    # Generic Parameters
 Resource          environment/subscriptions.txt
 Library           OperatingSystem
 Library           JSONLibrary
-Library           REST    ${EM-VNF_SCHEMA}://${EM-VNF_HOST}:${EM-VNF_PORT}
+Library           Process
+Library           MockServerLibrary    
+Library           REST    ${EM-VNF_SCHEMA}://${EM-VNF_HOST}:${EM-VNF_PORT}    ssl_verify=false
+Suite Setup       Create Sessions
+Suite Teardown    Terminate All Processes    kill=true
 
 *** Test Cases ***
 GET VNF Indicators Subscriptions
@@ -151,7 +155,9 @@ Send Post Request for VNF Indicator Subscription
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
     POST    ${apiRoot}/${apiName}/${apiVersion}/subscriptions    ${body}
     ${output}=    Output    response
-    Set Suite Variable    ${response}    ${output}   
+    Set Suite Variable    ${response}    ${output}  
+    Run Keyword If    ${VNFM_CHECKS_NOTIF_ENDPOINT} == 1
+    ...       Check Notification Endpoint 
 
 Send Put Request for VNF Indicator Subscriptions
     Log    Trying to create a new subscription
@@ -215,3 +221,17 @@ Check Postcondition VNF Indicator Subscription Is Set
 Check HTTP Response Body Subscriptions Match the requested Attribute-Based Filter
     Log    Check Response includes VNF Indicators according to filter
     #todo
+
+
+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}
\ No newline at end of file
diff --git a/SOL002/VNFIndicator-API/environment/subscriptions.txt b/SOL002/VNFIndicator-API/environment/subscriptions.txt
index 24a86046..401b374f 100644
--- a/SOL002/VNFIndicator-API/environment/subscriptions.txt
+++ b/SOL002/VNFIndicator-API/environment/subscriptions.txt
@@ -5,3 +5,5 @@ ${erroneousIndicatorId}    erroneousIndicatorId
 ${POS_FILTER}     callbackUri=http://127.0.0.1/subscribe
 ${NEG_FILTER}     callback=http://127.0.0.1/subscribe
 ${response}=    httpresponse
+${total_polling_time}   2 min
+${polling_interval}     10 sec
diff --git a/SOL002/VNFIndicator-API/environment/variables.txt b/SOL002/VNFIndicator-API/environment/variables.txt
index f9328b3c..8c323fca 100644
--- a/SOL002/VNFIndicator-API/environment/variables.txt
+++ b/SOL002/VNFIndicator-API/environment/variables.txt
@@ -14,3 +14,12 @@ ${AUTH_USAGE}     1
 ${apiRoot}        /
 ${apiVersion}     v1
 ${apiName}        vnfind
+
+
+${VNFM_CHECKS_NOTIF_ENDPOINT}    0
+
+${MOCK_SERVER_JAR}    ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar
+${callback_uri}    http://localhost
+${callback_port}    9091
+${callback_endpoint}    /endpoint
+${callback_endpoint_error}    /endpoint_404
\ No newline at end of file
diff --git a/SOL002/VNFPerformanceManagement-API/Subscriptions.robot b/SOL002/VNFPerformanceManagement-API/Subscriptions.robot
index 9eb052c9..ecf9cd79 100644
--- a/SOL002/VNFPerformanceManagement-API/Subscriptions.robot
+++ b/SOL002/VNFPerformanceManagement-API/Subscriptions.robot
@@ -1,7 +1,7 @@
 *** Settings ***
 Library           JSONSchemaLibrary    schemas/
 Resource          environment/variables.txt    # Generic Parameters
-Library           REST    ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}
+Library           REST    ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}    ssl_verify=false
 Library           OperatingSystem
 Library           JSONLibrary
 Resource          VNFPerformanceManagementKeywords.robot
diff --git a/SOL003/VNFPackageManagement-API/Subscriptions.robot b/SOL003/VNFPackageManagement-API/Subscriptions.robot
index 58f89753..11aead93 100644
--- a/SOL003/VNFPackageManagement-API/Subscriptions.robot
+++ b/SOL003/VNFPackageManagement-API/Subscriptions.robot
@@ -44,6 +44,7 @@ Create new VNF Package subscription
 
 
 Create duplicated VNF Package subscription with duplication handler
+    [Tags]    no-duplicated-subs
     Send Post Request for Duplicated VNF Package Subscription
     Check HTTP Response Status Code Is    303
     Check HTTP Response Body Is Empty
@@ -52,6 +53,7 @@ Create duplicated VNF Package subscription with duplication handler
 
 
 Create duplicated VNF Package subscription without duplication handler
+    [Tags]    duplicated-subs
     Send Post Request for Duplicated VNF Package Subscription
     Check HTTP Response Status Code Is    201
     Check HTTP Response Body Json Schema Is    PmSubscription
diff --git a/SOL005/VNFPackageManagement-API/Subscriptions.robot b/SOL005/VNFPackageManagement-API/Subscriptions.robot
index cd61ac93..0a3e5744 100644
--- a/SOL005/VNFPackageManagement-API/Subscriptions.robot
+++ b/SOL005/VNFPackageManagement-API/Subscriptions.robot
@@ -2,135 +2,79 @@
 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)
-    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
-    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)
-    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
-    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)
-    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
-    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    PkgmSubscriptions
+    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
+    [Tags]    no-duplicated-subs
+    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
+    [Tags]    duplicated-subs
+    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/SOL005/VNFPackageManagement-API/VNFPackageManagementKeywords.robot b/SOL005/VNFPackageManagement-API/VNFPackageManagementKeywords.robot
new file mode 100644
index 00000000..309dd8b8
--- /dev/null
+++ b/SOL005/VNFPackageManagement-API/VNFPackageManagementKeywords.robot
@@ -0,0 +1,214 @@
+*** Settings ***
+Library           JSONSchemaLibrary    schemas/
+Resource          environment/variables.txt    # Generic Parameters
+Resource          environment/subscriptions.txt
+Library           OperatingSystem
+Library           JSONLibrary
+Library           REST    ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT}    ssl_verify=false
+Library           Process
+Library           MockServerLibrary
+
+
+*** 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}
+    # 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 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}
+    # 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
+    ${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}
+    # 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 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}
+    # 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
+
+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
+    # 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
+
+Send Post Request for Duplicated VNF Package Subscription
+    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}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    Run Keyword If    ${NFVO_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    PkgmSubscription.schema.json    ${result}
+    # Log    Validation of PkgmSubscription OK
+
+
+Send Put Request for VNF Package Subscriptions
+    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
+    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}    
+    # Integer    response status    405
+    # Log    Received 405 Method not implemented as expected
+
+Send Patch Request for VNF Package Subscriptions
+    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
+    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}  
+    # Integer    response status    405
+    # Log    Received 405 Method not implemented as expected
+
+Send Delete Request for VNF Package Subscriptions
+    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
+    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}  
+    # Integer    response status    405
+    # Log    Received 405 Method not implemented as expected
+
+
+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 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 Subscriptions Match the requested Attribute-Based Filter
+    Log    Check Response includes VNF Package Management according to filter
+    #TODO
+
+
+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}
+
+
+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 Body Is Empty
+    Should Be Empty    ${response['body']}    
+    Log    No json schema is provided. Validation OK  
+    
+    
+Check HTTP Response Header Contains
+    [Arguments]    ${CONTENT_TYPE}
+    Should Contain    ${response.headers}    ${CONTENT_TYPE}
+    Log    Header is present
\ No newline at end of file
diff --git a/SOL005/VNFPackageManagement-API/environment/variables.txt b/SOL005/VNFPackageManagement-API/environment/variables.txt
index 5116423d..31153eec 100644
--- a/SOL005/VNFPackageManagement-API/environment/variables.txt
+++ b/SOL005/VNFPackageManagement-API/environment/variables.txt
@@ -25,4 +25,10 @@ ${callback_uri}    http://localhost
 ${callback_port}    9091
 ${callback_endpoint}    /endpoint
 ${callback_endpoint_error}    /endpoint_404
-${sleep_interval}    20s
\ No newline at end of file
+${sleep_interval}    20s
+${total_polling_time}   2 min
+${polling_interval}     10 sec
+
+${NFVO_CHECKS_NOTIF_ENDPOINT}    1
+
+${response}
-- 
GitLab