From 1c8f22e32e870e6b75a41223ad47eda0e08cea0c Mon Sep 17 00:00:00 2001
From: Giacomo Bernini <g.bernini@nextworks.it>
Date: Wed, 14 Oct 2020 17:18:57 +0200
Subject: [PATCH] restored subscriptions tests in SOL002 VNF PM

---
 .../IndividualSubscription.robot              |  98 ++++++
 .../Subscriptions.robot                       | 175 +++++++++++
 .../VNFPerformanceManagementKeywords.robot    | 297 +++++++++++++++++-
 .../environment/variables.txt                 |  37 ++-
 4 files changed, 602 insertions(+), 5 deletions(-)
 create mode 100644 SOL002/VNFPerformanceManagement-API/IndividualSubscription.robot
 create mode 100644 SOL002/VNFPerformanceManagement-API/Subscriptions.robot

diff --git a/SOL002/VNFPerformanceManagement-API/IndividualSubscription.robot b/SOL002/VNFPerformanceManagement-API/IndividualSubscription.robot
new file mode 100644
index 00000000..1d9d2d42
--- /dev/null
+++ b/SOL002/VNFPerformanceManagement-API/IndividualSubscription.robot
@@ -0,0 +1,98 @@
+*** Settings ***
+Library           JSONSchemaLibrary    schemas/
+Resource          environment/variables.txt    # Generic Parameters
+Library           REST    ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}    ssl_verify=false
+Library           OperatingSystem
+Library           JSONLibrary
+Resource          VNFPerformanceManagementKeywords.robot
+
+*** Test Cases ***
+GET Individual VNF Performance Subscription
+    [Documentation]    Test ID: 6.3.3.7.1
+    ...    Test title: GET Individual VNF Performance Subscription
+    ...    Test objective: The objective is to test the retrieval of individual VNF performance subscription and perform a JSON schema and content validation of the returned subscription data structure
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.8.3.2 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Get Individual VNF Performance Subscription
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Body Json Schema Is   PmSubscription
+    Check HTTP Response Body Subscription Identifier matches the requested Subscription
+
+GET Individual VNF Performance Subscription with invalid resource identifier
+    [Documentation]    Test ID: 6.3.3.7.2
+    ...    Test title: GET Individual VNF Performance Subscription with invalid resource identifier
+    ...    Test objective: The objective is to test that the retrieval of an individual VNF performance subscription fails when using an invalid resource identifier
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.8.3.2 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    GET individual VNF Performance Subscription with invalid resource identifier
+    Check HTTP Response Status Code Is    404
+
+DELETE Individual VNF Performance Subscription
+    [Documentation]    Test ID: 6.3.3.7.3
+    ...    Test title: DELETE Individual VNF Performance Subscription
+    ...    Test objective: The objective is to test the deletion of an individual VNF performance subscription
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.8.3.5 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Performance Subscription is not available anymore in the VNFM    
+    Send Delete request for individual VNF Performance Subscription
+    Check HTTP Response Status Code Is    204
+    Check Postcondition VNF Performance Subscription is Deleted
+
+DELETE Individual VNF Performance Subscription with invalid resource identifier
+    [Documentation]    Test ID: 6.3.3.7.4
+    ...    Test title: DELETE Individual VNF Performance Subscription with invalid resource identifier
+    ...    Test objective: The objective is to test that the deletion of an individual VNF performance subscription fails when using an invalid resource identifier
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.8.3.5 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none   
+    Send Delete request for individual VNF Performance Subscription with invalid resource identifier
+    Check HTTP Response Status Code Is    404
+
+POST Individual VNF Performance Subscription - Method not implemented
+    [Documentation]    Test ID: 6.3.3.7.5
+    ...    Test title: POST Individual VNF Performance Subscription - Method not implemented
+    ...    Test objective: The objective is to test that POST method is not allowed to create a new VNF Performance Subscription
+    ...    Pre-conditions: A VNF instance is instantiated
+    ...    Reference: Clause 6.4.8.3.1 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Performance Subscription is not created on the VNFM
+    Send Post request for individual VNF Performance Subscription
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNF Performance Subscription is not Created
+
+PUT Individual VNF Performance Subscription - Method not implemented
+    [Documentation]    Test ID: 6.3.3.7.6
+    ...    Test title: PUT Individual VNF Performance Subscription - Method not implemented
+    ...    Test objective: The objective is to test that PUT method is not allowed to update an existing VNF Performance subscription
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.8.3.3 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Performance subscription is not modified by the operation
+    Send Put request for individual VNF Performance Threshold
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNF Performance Subscription is Unmodified (Implicit)
+
+PATCH Individual VNF Performance Subscription - Method not implemented
+    [Documentation]    Test ID: 6.3.3.7.7
+    ...    Test title: PATCH Individual VNF Performance Subscription - Method not implemented
+    ...    Test objective: The objective is to test that PATCH method is not allowed to modify an existing VNF Performance subscription
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.8.3.4 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Performance subscription is not modified by the operation
+    Send Patch request for individual VNF Performance Threshold
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNF Performance Subscription is Unmodified (Implicit)
\ No newline at end of file
diff --git a/SOL002/VNFPerformanceManagement-API/Subscriptions.robot b/SOL002/VNFPerformanceManagement-API/Subscriptions.robot
new file mode 100644
index 00000000..c9948009
--- /dev/null
+++ b/SOL002/VNFPerformanceManagement-API/Subscriptions.robot
@@ -0,0 +1,175 @@
+*** Settings ***
+Library           JSONSchemaLibrary    schemas/
+Resource          environment/variables.txt    # Generic Parameters
+Library           REST    ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}    ssl_verify=false
+Library           OperatingSystem
+Library           JSONLibrary
+Resource          VNFPerformanceManagementKeywords.robot
+Library           MockServerLibrary
+Library           Process
+Suite Setup       Create Sessions
+Suite Teardown    Terminate All Processes    kill=true
+
+*** Test Cases ***
+GET all VNF Performance Subscriptions
+    [Documentation]    Test ID: 6.3.3.6.1
+    ...    Test title: GET all VNF Performance Subscriptions
+    ...    Test objective: The objective is to test the retrieval of all VNF performance subscriptions and perform a JSON schema validation of the returned subscriptions data structure
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.2 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none    
+    Get all VNF Performance Subscriptions
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Body Json Schema Is    PmSubscriptions
+
+GET VNF Performance Subscriptions with attribute-based filter
+    [Documentation]    Test ID: 6.3.3.6.2
+    ...    Test title: GET VNF Performance Subscriptions with attribute-based filter
+    ...    Test objective: The objective is to test the retrieval of VNF performance subscriptions using attribute-based filter, perform a JSON schema validation of the collected indicators data structure, and verify that the retrieved information matches the issued attribute-based filters 
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.2 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Get VNF Performance Subscriptions with attribute-based filters
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Body Json Schema Is    PmSubscriptions
+    Check HTTP Response Body Subscriptions Match the requested Attribute-Based Filter 
+
+GET VNF Performance Management Subscriptions with invalid attribute-based filter
+    [Documentation]    Test ID: 6.3.3.6.3
+    ...    Test title: GET VNF Performance Management Subscriptions with invalid attribute-based filter
+    ...    Test objective: The objective is to test that the retrieval of VNF performance subscriptions fails when using invalid attribute-based filters, and perform the JSON schema validation of the failed operation HTTP response. 
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.2 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Get VNF Performance Subscriptions with invalid attribute-based filters
+    Check HTTP Response Status Code Is    400
+    Check HTTP Response Body Json Schema Is   ProblemDetails 
+
+GET VNF Performance Subscriptions with invalid resource endpoint
+    [Documentation]    Test ID: 6.3.3.6.4
+    ...    Test title: GET VNF Performance Subscriptions with invalid resource endpoint
+    ...    Test objective: The objective is to test that the retrieval of all VNF performance subscriptions fails when using invalid resource endpoint.
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.2 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none    
+    Get VNF Performance Subscriptions with invalid resource endpoint
+    Check HTTP Response Status Code Is    404
+    
+Create new VNF Performance subscription
+    [Documentation]    Test ID: 6.3.3.6.5
+    ...    Test title: Create new VNF Performance subscription
+    ...    Test objective: The objective is to test the creation of a new VNF performance subscription and perform a JSON schema and content validation of the returned subscription data structure
+    ...    Pre-conditions: A VNF instance is instantiated.
+    ...    Reference: Clause 6.4.7.3.1 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF performance subscription is successfully set and it matches the issued subscription    
+    Send Post Request for VNF Performance Subscription
+    Check HTTP Response Status Code Is    201
+    Check HTTP Response Body Json Schema Is    PmSubscription
+    Check HTTP Response Body PmSubscription Attributes Values Match the Issued Subscription
+    Check Postcondition VNF Performance Subscription Is Set 
+
+
+Create duplicated VNF Performance subscription with VNFM not creating duplicated subscriptions
+    [Tags]    no-duplicated-subs
+    [Documentation]    Test ID: 6.3.3.6.6
+    ...    Test title: Create duplicated VNF Performance subscription with VNFM not creating duplicated subscriptions
+    ...    Test objective: The objective is to test the attempt of a creation of a duplicated VNF performance subscription and check that no new subscription is created by the VNFM and a link to the original subscription is returned
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.1 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: The VNFM does not support the creation of duplicated subscriptions
+    ...    Post-Conditions: The existing VNF performance subscription returned is available in the VNFM 
+    Send Post Request for Duplicated VNF Performance Subscription
+    Check HTTP Response Status Code Is    303
+    Check HTTP Response Body Is Empty
+    Check HTTP Response Header Contains    Location
+    Check Postcondition Subscription Resource Returned in Location Header Is Available
+
+Create duplicated VNF Performance subscription with VNFM creating duplicated subscriptions
+    [Tags]    duplicated-subs
+    [Documentation]    Test ID: 6.3.3.6.7
+    ...    Test title: Create duplicated VNF Performance subscription with VNFM creating duplicated subscriptions
+    ...    Test objective: The objective is to test the creation of a duplicated VNF performance subscription and perform a JSON schema and content validation of the returned duplicated subscription data structure
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.1 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: The VNFM supports the creation of duplicated subscriptions
+    ...    Post-Conditions: The duplicated VNF performance subscription is successfully set and it matches the issued subscription
+    Send Post Request for Duplicated VNF Performance Subscription
+    Check HTTP Response Status Code Is    201
+    Check HTTP Response Body Json Schema Is    PmSubscription
+    Check HTTP Response Body PmSubscription Attributes Values Match the Issued Subscription
+    Check Postcondition VNF Performance Subscription Is Set 
+
+PUT VNF Performance Subscriptions - Method not implemented
+    [Documentation]    Test ID: 6.3.3.6.8
+    ...    Test title: PUT VNF Performance Subscriptions - Method not implemented
+    ...    Test objective: The objective is to test that PUT method is not allowed to modify VNF performance subscriptions
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.3 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send Put Request for VNF Performance Subscriptions
+    Check HTTP Response Status Code Is    405 
+    
+PATCH VNF Performance Subscriptions - Method not implemented
+    [Documentation]    Test ID: 6.3.3.6.9
+    ...    Test title: PATCH VNF Performance Subscriptions - Method not implemented
+    ...    Test objective: The objective is to test that PATCH method is not allowed to update VNF performance subscriptions
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.4 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send Patch Request for VNF Performance Subscriptions
+    Check HTTP Response Status Code Is    405
+    
+DELETE VNF Performance Subscriptions - Method not implemented
+    [Documentation]    Test ID: 6.3.3.6.10
+    ...    Test title: DELETE VNF Performance Subscriptions - Method not implemented
+    ...    Test objective: The objective is to test that DELETE method is not allowed to delete VNF performance subscriptions
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.5 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF performance subscriptions are not deleted by the failed operation   
+    Send Delete Request for VNF Performance Subscriptions
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNF Performance Subscriptions Exists
+    
+GET VNF Performance Subscriptions to get Paged Response
+    [Documentation]    Test ID: 6.3.3.6.11
+    ...    Test title: GET VNF Performance Subscriptions to get Paged Response
+    ...    Test objective: The objective is to test the retrieval of all VNF performance subscriptions to get Paged Response
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.2 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none    
+    Get all VNF Performance Subscriptions
+    Check HTTP Response Status Code Is    200
+    Check LINK in Header
+    
+GET VNF Performance Management Subscriptions for Bad Request Response too big
+    [Documentation]    Test ID: 6.3.3.6.12
+    ...    Test title: GET VNF Performance Management Subscriptions for Bad Request Response too big
+    ...    Test objective: The objective is to test that the retrieval of VNF performance subscriptions fails when response is too big, and perform the JSON schema validation of the failed operation HTTP response. 
+    ...    Pre-conditions: A VNF instance is instantiated. At least one VNF performance subscription is available in the VNFM.
+    ...    Reference: Clause 6.4.7.3.2 - ETSI GS NFV-SOL 002 [2] v2.7.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Get VNF Performance Subscriptions with invalid attribute-based filters
+    Check HTTP Response Status Code Is    400
+    Check HTTP Response Body Json Schema Is   ProblemDetails 
diff --git a/SOL002/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot b/SOL002/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot
index 394c9728..99da3d1a 100644
--- a/SOL002/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot
+++ b/SOL002/VNFPerformanceManagement-API/VNFPerformanceManagementKeywords.robot
@@ -1,8 +1,7 @@
 *** Settings ***
 Library    String
 Resource    environment/variables.txt
-Resource    environment/subscriptions.txt
-Resource    environment/individualSubscription.txt
+
 Library    REST    ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}    ssl_verify=false
 Library    MockServerLibrary 
 Library    OperatingSystem
@@ -13,12 +12,263 @@ Library    JSONSchemaLibrary    schemas/
 Library    Process    
 
 *** Keywords ***
+
+Get all VNF Performance Subscriptions
+    [Documentation]    The client can use this method to query the list of active subscriptions to Performance management notifications
+    ...    subscribed by the client.
+    ...    This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters,
+    ...    request and response data structures, and response codes.
+    Set headers    {"Accept": "application/json"}
+    Set headers    {"Content-Type": "application/json"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": ${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    # Integer    response status    200
+    # Log    Received a 200 OK as expected
+    # ${contentType}=    Output    response headers Content-Type
+    # Should Contain    ${contentType}    application/json
+    # ${result}=    Output    response body
+    # Validate Json    PmSubscriptions.schema.json    ${result}
+    # Log    Validated PmSubscription schema
+
+
+ Get VNF Performance Subscriptions with attribute-based filters
+    [Documentation]    The client can use this method to query the list of active subscriptions to Performance management notifications
+    ...    subscribed by the client.
+    ...    This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters,
+    ...    request and response data structures, and response codes.
+    Set headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": ${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions?${filter_ok}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    # Integer    response status    200
+    # Log    Received a 200 OK as expected
+    # ${contentType}=    Output    response headers Content-Type
+    # Should Contain    ${contentType}    application/json
+    # ${result}=    Output    response body
+    # Validate Json    PmSubscriptions.schema.json    ${result}
+    # Log    Validated PmSubscription schema    
+    
+
+
+Get VNF Performance Subscriptions with invalid attribute-based filters
+    [Documentation]    The client can use this method to query the list of active subscriptions to Performance management notifications
+    ...    subscribed by the client.
+    ...    This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters,
+    ...    request and response data structures, and response codes.
+    Set headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": ${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions?${filter_ko}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    # Integer    response status    400
+    # Log    Received a 400 Bad Request as expected
+    # ${contentType}=    Output    response headers Content-Type
+    # Should Contain    ${contentType}    application/json
+    # ${result}=    Output    response body
+    # Validate Json    ProblemDetails.schema.json    ${result}
+    # Log    Validated ProblemDetails schema
+    
+    
+Get VNF Performance Subscriptions with invalid resource endpoint
+    [Documentation]    The client can use this method to query the list of active subscriptions to Performance management notifications
+    ...    subscribed by the client.
+    ...    This method shall follow the provisions specified in the tables 6.4.7.3.2-1 and 6.4.7.3.2-2 for URI query parameters,
+    ...    request and response data structures, and response codes.
+    Set headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": ${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscription
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    # Integer    response status    404
+    # Log    Received a 404 Not found as expected
+    # ${contentType}=    Output    response headers Content-Type
+    # Should Contain    ${contentType}    application/json
+    # ${result}=    Output    response body
+    # Validate Json    ProblemDetails.schema.json    ${result}
+    # Log    Validated ProblemDetails schema    
+
+
+
+Send Post Request for VNF Performance Subscription
+    [Documentation]    The POST method creates a new subscription.
+    ...    This method shall follow the provisions specified in the tables 6.4.7.3.1-1 and 6.4.7.3.1-2 for URI query parameters,
+    ...    request and response data structures, and response codes.
+    ...    Creation of two subscription resources with the same callbackURI and the same filter can result in performance
+    ...    degradation and will provide duplicates of notifications to the NFVO, and might make sense only in very rare use cases.
+    ...    Consequently, the VNFM may either allow creating a subscription resource if another subscription resource with the
+    ...    same filter and callbackUri already exists (in which case it shall return the "201 Created" response code), or may decide
+    ...    to not create a duplicate subscription resource (in which case it shall return a "303 See Other" response code referencing
+    ...    the existing subscription resource with the same filter and callbackUri).
+    Set headers    {"Content-Type": "${CONTENT_TYPE_JSON}"}
+    Set headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": ${AUTHORIZATION}"}
+    ${body_request}=    Get File    jsons/subscriptions.json
+    POST    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions    ${body_request}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    Run Keyword If    ${VNFM_CHECKS_NOTIF_ENDPOINT} == 1
+    ...       Check Notification Endpoint
+    # Integer    response status    201
+    # Log    Received a 201 Created as expected
+    # ${contentType}=    Output    response headers Content-Type
+    # Should Contain    ${contentType}    application/json
+    # ${result}=    Output    response body
+    # Validate Json    PmSubscription.schema.json    ${result}
+    # Log    Validated PmSubscription schema
+    # Log    Trying to validate the Location header
+    # ${headers}=    Output    response headers
+    # Should Contain    ${headers}    Location
+
+
+Send Post Request for Duplicated VNF Performance Subscription
+    [Documentation]    The POST method creates a new subscription.
+    ...    This method shall follow the provisions specified in the tables 6.4.7.3.1-1 and 6.4.7.3.1-2 for URI query parameters,
+    ...    request and response data structures, and response codes.
+    ...    Creation of two subscription resources with the same callbackURI and the same filter can result in performance
+    ...    degradation and will provide duplicates of notifications to the NFVO, and might make sense only in very rare use cases.
+    ...    Consequently, the VNFM may either allow creating a subscription resource if another subscription resource with the
+    ...    same filter and callbackUri already exists (in which case it shall return the "201 Created" response code), or may decide
+    ...    to not create a duplicate subscription resource (in which case it shall return a "303 See Other" response code referencing
+    ...    the existing subscription resource with the same filter and callbackUri).
+    Set headers    {"Content-Type": "${CONTENT_TYPE_JSON}"}
+    Set headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    ${body_request}=    Get File    jsons/subscriptions.json
+    POST    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions    ${body_request}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}    
+    # Integer    response status    303
+    # Log    Received a 303 See other as expected
+    # ${contentType}=    Output    response headers Content-Type
+    # Should Contain    ${contentType}    application/json
+    # ${result}=    Output    response body
+    # Should Be Empty    ${result}
+    # Log    Body is empty
+    # Log    Trying to validate the Location header
+    # ${headers}=    Output    response headers
+    # Should Contain    ${headers}    Location
+    
+
+
+Send Put Request for VNF Performance Subscriptions
+    [Documentation]    This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method
+    ...    Not Allowed" response as defined in Clause 4.3.5.4.
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    PUT    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    # Integer    response status    405
+    # Log    Received 405 Method not implemented as expected
+
+Send Patch Request for VNF Performance Subscriptions
+    [Documentation]    This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method
+    ...    Not Allowed" response as defined in Clause 4.3.5.4.
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    PATCH    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    # Integer    response status    405
+    # Log    Received 405 Method not implemented as expected
+
+Send Delete Request for VNF Performance Subscriptions
+    [Documentation]    This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method
+    ...    Not Allowed" response as defined in Clause 4.3.5.4.
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    DELETE    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    # Integer    response status    405
+    # Log    Received 405 Method not implemented as expected
+
+Get Individual VNF Performance Subscription
+    Set headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+GET individual VNF Performance Subscription with invalid resource identifier
+    Set headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${erroneousSubscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send Delete request for individual VNF Performance Subscription
+    Set headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    DELETE    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send Delete request for individual VNF Performance Subscription with invalid resource identifier
+    Log    Trying to delete a subscription in the VNFM with invalid id
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    DELETE    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${erroneousSubscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send Post request for individual VNF Performance Subscription
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    POST    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${newSubscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send Put request for individual VNF Performance Threshold
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId}
+    ${origOutput}=    Output    response
+    Set Suite Variable    ${origResponse}    ${origOutput}
+    PUT    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+Send Patch request for individual VNF Performance Threshold
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId}
+    ${origOutput}=    Output    response
+    Set Suite Variable    ${origResponse}    ${origOutput}
+    PATCH    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Check Postcondition VNF Performance Subscription is Unmodified (Implicit)
+    Log    Check postconidtion subscription not modified
+    GET individual VNF Performance Subscription
+    Log    Check Response matches original VNF Threshold
+    ${subscription}=    evaluate    json.loads('''${response['body']}''')    json
+    Should Be Equal As Strings    ${origResponse['body']['id']}    ${subscription.id}
+    Should Be Equal As Strings    ${origResponse['body']['callbackUri']}    ${subscription.callbackUri}
+
+Check Postcondition VNF Performance Subscription is not Created
+    Log    Trying to get a new subscription
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${newSubscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    Check HTTP Response Status Code Is    404 
+
+Check Postcondition VNF Performance Subscription is Deleted
+    Log    Check Postcondition Subscription is deleted
+    GET individual VNF Performance Subscription
+    Check HTTP Response Status Code Is    404 
+
+Check HTTP Response Body Subscription Identifier matches the requested Subscription
+    Log    Trying to check response ID
+    Should Be Equal As Strings    ${response['body']['id']}    ${subscriptionId} 
+    Log    Subscription identifier as expected
     
 Check HTTP Response Status Code Is
     [Arguments]    ${expected_status}    
     Should Be Equal As Strings   ${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
@@ -26,9 +276,48 @@ Check HTTP Response Body Json Schema Is
     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          
+    Log    No json schema is provided. Validation OK  
+
+
+Check HTTP Response Body Subscriptions Match the requested Attribute-Based Filter
+    Log    Check Response includes VNF Performance Management according to filter
+    Should Be Equal As Strings    ${response['body'][0]['callbackUri']}    ${callbackUri_Sub}
+
+Check HTTP Response Body PmSubscription Attributes Values Match the Issued Subscription
+    Log    Check Response matches subscription
+    ${body}=    Get File    jsons/subscriptions.json
+    ${subscription}=    evaluate    json.loads('''${body}''')    json
+    Should Be Equal As Strings    ${response['body']['callbackUri']}    ${subscription['callbackUri']}
+
+Check Postcondition VNF Performance Subscription Is Set
+    Log    Check Postcondition subscription exist
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${response['body']['id']}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    Check HTTP Response Status Code Is    200
+
+Check Postcondition Subscription Resource Returned in Location Header Is Available
+    Log    Going to check postcondition
+    GET    ${response['headers']['Location']}
+    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    PmSubscription.schema.json    ${result}
+    Log    Validated PmSubscription schema
+    ${body}=    Get File    jsons/subscriptions.json
+    ${subscription}=    evaluate    json.loads('''${body}''')    json
+    Should Be Equal    ${result['callbackUri']}    ${subscription['callbackUri']}
+    Log    Validated Issued subscription is same as original
+ 
+Check Postcondition VNF Performance Subscriptions Exists
+    Log    Checking that subscriptions exists
+    Get all VNF Performance Subscriptions         
 
 Check HTTP Response Header Contains
     [Arguments]    ${CONTENT_TYPE}
@@ -59,6 +348,6 @@ Check Notification Endpoint
     Wait Until Keyword Succeeds    ${total_polling_time}   ${polling_interval}   Verify Mock Expectation    ${notification_request}
     Clear Requests  ${callback_endpoint}
     
-Check HTTP Response Header Contain Link
+Check LINK in Header
     ${linkURL}=    Get Value From Json    ${response['headers']}    $..Link
     Should Not Be Empty    ${linkURL}
diff --git a/SOL002/VNFPerformanceManagement-API/environment/variables.txt b/SOL002/VNFPerformanceManagement-API/environment/variables.txt
index c6f2f9a8..8636509c 100644
--- a/SOL002/VNFPerformanceManagement-API/environment/variables.txt
+++ b/SOL002/VNFPerformanceManagement-API/environment/variables.txt
@@ -27,4 +27,39 @@ ${response}        http-response
 
 ${objectInstanceIds}    1f50d68b-82e8-4deb-bd40-c934d4d1ac0a
 
-${subscribe}    /subscribe
\ No newline at end of file
+${subscribe}    /subscribe
+
+
+
+${pmJobId}        29f4ff6a-be91-4ec8-856e-fcf1e2479e4e
+${erroneousPmJobId}    erroneousPmJobId
+${newPmJobId}    newPmJobId
+${OrigResponse}=    httpresponse
+
+${thresholdId}    1f50d68b-82e8-4deb-bd40-c934d4d1ac0a
+${erroneousThresholdId}    erroneousThresholdId
+${newThresholdId}    newThresholdId
+
+${POS_FILTER}     objectInstanceIds=${objectInstanceIds}
+${NEG_FILTER}     criteriaPmJob=erroneousAttributeName
+${fields}         criteria,reports
+${SEPERATOR}      =
+
+${reportId}       0fb4c875-e07f-46ca-a9dd-13907667a568
+${erroneousReportId}    erroneousReportId
+${newReportId}    newReportId
+
+
+${FILTER_OK}      objectInstanceId=1f50d68b-82e8-4deb-bd40-c934d4d1ac0a
+${FILTER_KO}      criterias=erroneousFilter
+
+${subscriptionId}    17563e75-0e14-4bd7-94b4-6bbb869c79aa
+${erroneousSubscriptionId}    erroneousSubscriptionId
+${newSubscriptionId}    newSubsciptionId
+
+${callbackUri_Sub}    http://172.22.1.7:9091/vnfpm/subscriptions
+${filter_ok}      callbackUri=${callbackUri_Sub}
+${filter_ko}      erroneousFilter=erroneous
+${total_polling_time}   2 min
+${polling_interval}     10 sec
+
-- 
GitLab