From 60389d3e380ef3658fe257fdde0667331f126541 Mon Sep 17 00:00:00 2001
From: Giacomo Bernini <g.bernini@nextworks.it>
Date: Sun, 9 Jun 2019 14:00:25 +0200
Subject: [PATCH] Added doc for SOL003 VNF Pckg mgmt API

---
 .../IndividualSubscription.robot              | 158 +++++-----
 .../Subscriptions.robot                       | 101 +++++-
 .../VNFDInIndividualVNFPackage.robot          | 224 +++++++------
 .../VNFPackageArtifacts.robot                 | 210 +++++++-----
 .../VNFPackageManagementKeywords.robot        | 298 +++++++++++++++++-
 .../environment/individualSubscription.txt    |   3 +
 .../environment/vnfPackageArtifacts.txt       |   1 +
 7 files changed, 726 insertions(+), 269 deletions(-)

diff --git a/SOL003/VNFPackageManagement-API/IndividualSubscription.robot b/SOL003/VNFPackageManagement-API/IndividualSubscription.robot
index 449081a1..dbbe5803 100644
--- a/SOL003/VNFPackageManagement-API/IndividualSubscription.robot
+++ b/SOL003/VNFPackageManagement-API/IndividualSubscription.robot
@@ -2,88 +2,98 @@
 Library           JSONSchemaLibrary    schemas/
 Resource          environment/variables.txt    # Generic Parameters
 Resource          environment/individualSubscription.txt
+Resource          VNFPackageManagementKeywords.robot
 Library           OperatingSystem
 Library           JSONLibrary
 Library           REST    ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT}
 
 *** Test Cases ***
-GET Individual Subscription
-    Log    Trying to get a single subscription identified by subscriptionId
-    Set Headers    {"Accept": "${ACCEPT_JSON}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
-    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    PkgmSubscription.schema.json    ${result}
-    Log    Validated PkgmSubscription schema
+GET Individual VNF Package Subscription
+    [Documentation]    Test ID: 7.3.3.7.1
+    ...    Test title: GET Individual VNF Package Subscription
+    ...    Test objective: The objective is to test the retrieval of individual VNF package subscription and perform a JSON schema and content validation of the returned subscription data structure
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.8.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Get Individual VNF Package Subscription
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Body Json Schema Is   PkgmSubscription
+    Check HTTP Response Body Subscription Identifier matches the requested Subscription
 
-GET Subscription - Negative (Not Found)
-    Log    Trying to perform a request on a subscriptionID which doesn't exist
-    Set Headers    {"Accept": "${ACCEPT_JSON}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${erroneousSubscriptionId}
-    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
+GET Individual VNF Package Subscription with invalid resource identifier
+    [Documentation]    Test ID: 7.3.3.7.2
+    ...    Test title: GET Individual VNF Package Subscription with invalid resource identifier
+    ...    Test objective: The objective is to test that the retrieval of an individual VNF package subscription fails when using an invalid resource identifier
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.8.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    GET individual VNF Package Subscription with invalid resource identifier
+    Check HTTP Response Status Code Is    404
 
-DELETE Subscription
-    Log    Trying to perform a DELETE on a subscriptionId
-    Set Headers    {"Accept": "${ACCEPT_JSON}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    DELETE    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
-    Integer    response status    204
-    Log    Received 204 No Content as expected
-    #Log    Trying to get the deleted element
-    #Create HTTP Context    ${NFVO_HOST}:${NFVO_PORT}    ${NFVO_SCHEMA}
-    #Set Request Header    Accept    ${ACCEPT_JSON}
-    #Run Keyword If    ${AUTH_USAGE} == 1    Set Request Header    Authorization    ${AUTHORIZATION}
-    #GET    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
-    #Response Status Code Should Equal    404
-    #Log    The subscriptionId is not present in database
+DELETE Individual VNF Package Subscription with invalid resource identifier
+    [Documentation]    Test ID: 7.3.3.7.3
+    ...    Test title: DELETE Individual VNF Package Subscription with invalid resource identifier
+    ...    Test objective: The objective is to test that the deletion of an individual VNF package subscription fails when using an invalid resource identifier
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.8.3.5 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none   
+    Send Delete request for individual VNF Package Subscription with invalid resource identifier
+    Check HTTP Response Status Code Is    404
 
-DELETE Subscription - Negative (Not Found)
-    Log    Trying to perform a DELETE on a subscriptionId which doesn't exist
-    Set Headers    {"Accept": "${ACCEPT_JSON}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    DELETE    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${erroneousSubscriptionId}
-    Integer    response status    404
-    Log    The subscriptionId is not present in database
-    ${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 Individual VNF Package Subscription - Method not implemented
+    [Documentation]    Test ID: 7.3.3.7.4
+    ...    Test title: POST Individual VNF Package Subscription - Method not implemented
+    ...    Test objective: The objective is to test that POST method is not allowed to create a new VNF Package Subscription
+    ...    Pre-conditions: none
+    ...    Reference:  section 10.4.8.3.1 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Package Subscription is not created on the NFVO
+    Send Post request for individual VNF Package Subscription
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNF Package Subscription is not Created
 
-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/${subscriptionId}
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
+PUT Individual VNF Package Subscription - Method not implemented
+    [Documentation]    Test ID: 7.3.3.7.5
+    ...    Test title: PUT Individual VNF Package Subscription - Method not implemented
+    ...    Test objective: The objective is to test that PUT method is not allowed to update an existing VNF Package subscription
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.8.3.3 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Package subscription is not modified by the operation
+    Send Put request for individual VNF Package Subscription
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNF Package Subscription is Unmodified (Implicit)
 
-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/${subscriptionId}
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
-
-POST Subscription - (Method not implemented)
-    Log    Trying to perform a POST. This method should not be implemented
-    Set Headers    {"Accept": "${ACCEPT_JSON}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    POST    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
+PATCH Individual VNF Package Subscription - Method not implemented
+    [Documentation]    Test ID: 7.3.3.7.6
+    ...    Test title: PATCH Individual VNF Package Subscription - Method not implemented
+    ...    Test objective: The objective is to test that PATCH method is not allowed to modify an existing VNF Package subscription
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.8.3.4 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Package subscription is not modified by the operation
+    Send Patch request for individual VNF Package Subscription
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNF Package Subscription is Unmodified (Implicit)
 
+DELETE Individual VNF Package Subscription
+    [Documentation]    Test ID: 7.3.3.7.7
+    ...    Test title: DELETE Individual VNF Package Subscription
+    ...    Test objective: The objective is to test the deletion of an individual VNF package subscription
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.8.3.5 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Package Subscription is not available anymore in the NFVO    
+    Send Delete request for individual VNF Package Subscription
+    Check HTTP Response Status Code Is    204
+    Check Postcondition VNF Package Subscription is Deleted
\ No newline at end of file
diff --git a/SOL003/VNFPackageManagement-API/Subscriptions.robot b/SOL003/VNFPackageManagement-API/Subscriptions.robot
index 11aead93..a4b31e32 100644
--- a/SOL003/VNFPackageManagement-API/Subscriptions.robot
+++ b/SOL003/VNFPackageManagement-API/Subscriptions.robot
@@ -13,12 +13,28 @@ Suite Teardown    Terminate All Processes    kill=true
 
 *** Test Cases ***
 Get All VNF Package Subscriptions
+    [Documentation]    Test ID: 7.3.3.6.1
+    ...    Test title: GET all VNF Package Subscriptions
+    ...    Test objective: The objective is to test the retrieval of all VNF package subscriptions and perform a JSON schema validation of the returned subscriptions data structure
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none    
     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
+    [Documentation]    Test ID: 7.3.3.6.2
+    ...    Test title: Get VNF Package Subscriptions with attribute-based filter
+    ...    Test objective: The objective is to test the retrieval of VNF package subscriptions using attribute-based filter, perform a JSON schema validation of the collected data structure, and verify that the retrieved information matches the issued attribute-based filters 
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
     Get VNF Package Subscriptions with attribute-based filters
     Check HTTP Response Status Code Is    200
     Check HTTP Response Body Json Schema Is    PkgmSubscription
@@ -26,55 +42,112 @@ Get VNF Package Subscriptions with attribute-based filter
 
 
 Get VNF Package Subscriptions with invalid attribute-based filter
+    [Documentation]    Test ID: 7.3.3.6.3
+    ...    Test title: Get VNF Package Subscriptions with attribute-based filters
+    ...    Test objective: The objective is to test that the retrieval of VNF package subscriptions fails when using invalid attribute-based filters, and perform the JSON schema validation of the failed operation HTTP response. 
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
     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
+    [Documentation]    Test ID: 7.3.3.6.4
+    ...    Test title: GET VNF Package Subscription with invalid resource endpoint
+    ...    Test objective: The objective is to test that the retrieval of all VNF package subscriptions fails when using invalid resource endpoint.
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none    
     Get VNF Package Subscriptions with invalid resource endpoint
     Check HTTP Response Status Code Is    404
 
-
 Create new VNF Package subscription
+    [Documentation]    Test ID 7.3.3.6.5
+    ...    Test title: Create new VNF Package subscription
+    ...    Test objective: The objective is to test the creation of a new VNF package subscription and perform a JSON schema and content validation of the returned subscription data structure
+    ...    Pre-conditions: none
+    ...    Reference:  section 10.4.7.3.1 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF package subscription is successfully set and it matches the issued 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 HTTP Response Body PkgmSubscription Attributes Values Match the Issued Subscription
     Check Postcondition VNF Package Subscription Is Set 
 
 
-Create duplicated VNF Package subscription with duplication handler
+Create duplicated VNF Package subscription with NFVO not creating duplicated subscriptions
     [Tags]    no-duplicated-subs
+    [Documentation]    Test ID 7.3.3.6.6
+    ...    Test title: Create duplicated VNF Package subscription with NFVO not creating duplicated subscriptions
+    ...    Test objective: The objective is to test the attempt of a creation of a duplicated VNF package subscription and check that no new subscription is created by the NFVO and a link to the original subscription is returned
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.1 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO does not support the creation of duplicated subscriptions
+    ...    Post-Conditions: The existing VNF package subscription returned is available in the NFVO
     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
-
+    Check Postcondition Subscription Resource Returned in Location Header Is Available
 
-Create duplicated VNF Package subscription without duplication handler
+Create duplicated VNF Package subscription with NFVO creating duplicated subscriptions
     [Tags]    duplicated-subs
+    [Documentation]    Test ID 7.3.3.6.7
+    ...    Test title: Create duplicated VNF Package subscription with NFVO creating duplicated subscriptions
+    ...    Test objective: The objective is to test the creation of a duplicated VNF package subscription and perform a JSON schema and content validation of the returned duplicated subscription data structure
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.1 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO supports the creation of duplicated subscriptions
+    ...    Post-Conditions: The duplicated VNF package subscription is successfully set and it matches the issued subscription
     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 HTTP Response Body Json Schema Is    PkgmSubscription
+    Check HTTP Response Body PkgmSubscription Attributes Values Match the Issued Subscription
     Check Postcondition VNF Package Subscription Is Set 
 
-
-
 PUT VNF Package Subscriptions - Method not implemented
+    [Documentation]    Test ID 7.3.3.6.8
+    ...    Test title: PUT VNF Package Subscriptions - Method not implemented
+    ...    Test objective: The objective is to test that PUT method is not allowed to modify VNF package subscriptions
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.3 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
     Send Put Request for VNF Package Subscriptions
     Check HTTP Response Status Code Is    405
     
-    
 PATCH VNF Package Subscriptions - Method not implemented
+    [Documentation]    Test ID 7.3.3.6.9
+    ...    Test title: PATCH VNF Package Subscriptions - Method not implemented
+    ...    Test objective: The objective is to test that PATCH method is not allowed to update VNF package subscriptions
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.4 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
     Send Patch Request for VNF Package Subscriptions
     Check HTTP Response Status Code Is    405
     
         
 DELETE VNF Package Subscriptions - Method not implemented
+    [Documentation]    Test ID 7.3.3.6.10
+    ...    Test title: DELETE VNF Package Subscriptions - Method not implemented
+    ...    Test objective: The objective is to test that DELETE method is not allowed to delete VNF package subscriptions
+    ...    Pre-conditions: At least one VNF package subscription is available in the NFVO.
+    ...    Reference:  section 10.4.7.3.5 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF package subscriptions are not deleted by the failed operation 
     Send Delete Request for VNF Package Subscriptions
     Check HTTP Response Status Code Is    405
-
-
-
+    Check Postcondition VNF Package Subscriptions Exists
diff --git a/SOL003/VNFPackageManagement-API/VNFDInIndividualVNFPackage.robot b/SOL003/VNFPackageManagement-API/VNFDInIndividualVNFPackage.robot
index c67d6574..ee9a1a98 100644
--- a/SOL003/VNFPackageManagement-API/VNFDInIndividualVNFPackage.robot
+++ b/SOL003/VNFPackageManagement-API/VNFDInIndividualVNFPackage.robot
@@ -2,110 +2,148 @@
 Library           JSONSchemaLibrary    schemas/
 Resource          environment/variables.txt    # Generic Parameters
 Resource          environment/vnfdInIndividualVnfPackage.txt
+Resource          VNFPackageManagementKeywords.robot 
 Library           JSONLibrary
 Library           REST    ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT}
 
 *** Test Cases ***
-GET VNFD in Individual VNF Package (PLAIN)
-    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
-    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgPlainVNFD}/vnfd
-    Integer    response status    200
-    ${contentType}=    Output    response headers Content-Type
-    Should Contain    ${contentType}    ${CONTENT_TYPE_PLAIN}
+Get single file VNFD in Individual VNF Package in Plain Format
+    [Documentation]    Test ID: 7.3.3.4.1
+    ...    Test title: Get VNFD in Individual VNF Package in Plain Format
+    ...    Test objective: The objective is to test the retrieval of the VNFD in plain format for an individual VNF package and perform a validation that returned content is in plain format
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.4.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The VNFD is implemented as a single file
+    ...    Post-Conditions: none
+    Get single file VNFD in Individual VNF Package in Plain Format
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Header Content-Type Is    text/plain
 
-GET VNFD in Individual VNF Package (ZIP)
-    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
-    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgZipVNFD}/vnfd
-    Integer    response status    200
-    ${contentType}=    Output    response headers Content-Type
-    Should Contain    ${contentType}    ${CONTENT_TYPE_ZIP}
+Get VNFD in Individual VNF Package in Zip Format
+    [Documentation]    Test ID: 7.3.3.4.2
+    ...    Test title: Get VNFD in Individual VNF Package in Zip Format
+    ...    Test objective: The objective is to test the retrieval of the VNFD in zip format for an individual VNF package and perform a validation that returned content is in zip format
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.4.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Get VNFD in Individual VNF Package in Zip Format
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Header Content-Type Is    application/zip
 
-GET VNFD in Individual VNF Package (PLAIN-ZIP)
-    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
-    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
-    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgZipVNFD}/vnfd
-    Integer    response status    200
-    ${contentType}=    Output    response headers Content-Type
-    Should Contain    ${contentType}    ${CONTENT_TYPE_ZIP}
+Get single file VNFD in Individual VNF Package in Plain or Zip Format
+    [Documentation]    Test ID: 7.3.3.4.3
+    ...    Test title: Get single file VNFD in Individual VNF Package in Plain or Zip Format
+    ...    Test objective: The objective is to test the retrieval of the single file VNFD for an individual VNF package when requesting both Plain and Zip format to NFVO, and perform a validation that returned content is in plain or zip format
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.4.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The VNFD is implemented as a single file
+    ...    Post-Conditions: none
+    Get single file VNFD in Individual VNF Package in Plain or Zip Format
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Header Content-Type Is Any of   text/plain    application/zip
+    
+Get multi file VNFD in Individual VNF Package in Plain or Zip Format
+    [Documentation]    Test ID: 7.3.3.4.4
+    ...    Test title: Get multi file VNFD in Individual VNF Package in Plain or Zip Format
+    ...    Test objective: The objective is to test the retrieval of the multi file VNFD for an individual VNF package when requesting both Plain and Zip format to NFVO, and perform a validation that returned content is in zip format
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.4.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The VNFD is implemented as a multi file
+    ...    Post-Conditions: none
+    Get multi file VNFD in Individual VNF Package in Plain or Zip Format
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Header Content-Type Is    application/zip
 
-GET VNFD in Individual VNF Package - Negative (PLAIN/ZIP)
-    Log    Trying to get a negative case performing a get on a VNFD from a given VNF Package present in the NFVO Catalogue. Accept will be text/plain but VNFD is composed my multiple files.
-    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgZipVNFD}/vnfd
-    Integer    response status    406
-    ${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 multi file VNFD in Individual VNF Package in Plain Format
+    [Documentation]    Test ID: 7.3.3.4.5
+    ...    Test title: Get multi file VNFD in Individual VNF Package in Plain Format
+    ...    Test objective: The objective is to test that the retrieval of the multi file VNFD for an individual VNF package fails when requesting it in Plain format, and perform a validation of the JSON schema validation of the failed operation HTTP response
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.4.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The VNFD is implemented as a multi file
+    ...    Post-Conditions: none
+    Get multi file VNFD in Individual VNF Package in Plain Format
+    Check HTTP Response Status Code Is    406
+    Check HTTP Response Body Json Schema Is   ProblemDetails
 
-GET VNFD in Individual VNF Package - Negative (Not Found)
-    Log    Trying to perform a negative get, using an erroneous package ID
-    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
-    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${erroneousVnfPkgId}/vnfd
-    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
+Get VNFD in Individual VNF Package with invalid resource identifier
+    [Documentation]    Test ID: 7.3.3.4.6
+    ...    Test title: Get VNFD in Individual VNF Package with invalid resource identifier
+    ...    Test objective: The objective is to test that the retrieval of the VNFD for an individual VNF package content fails when using an invalid resource identifier
+    ...    Pre-conditions: none
+    ...    Reference: section 10.4.4.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Get VNFD in Individual VNF Package with invalid resource identifier
+    Check HTTP Response Status Code Is    404
 
-GET VNFD in Individual VNF Package - Negative (onboardingState issue)
-    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
-    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
-    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${onboardingStateVnfPkgId}/vnfd
-    Integer    response status    409
-    Log    Received 409 Conflict 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 VNFD in Individual VNF Package Content with conflict due to onboarding state
+    [Documentation]    Test ID: 7.3.3.4.7
+    ...    Test title: Get VNFD in Individual VNF Package Content with conflict due to onboarding state
+    ...    Test objective: The objective is to test that the retrieval of the VNFD for an individual VNF package content fails due to a conflict when the VNF Package is not in onboarding state ONBOARDED in the NFVO. The test also performs a validation of the JSON schema validation of the failed operation HTTP response
+    ...    Pre-conditions: The onboarding state of the VNF package for which the VNFD is requested is different from ONBOARDED.
+    ...    Reference: section 10.4.4.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none 
+    Get VNFD in Individual VNF Package Content with conflict due to onboarding state
+    Check HTTP Response Status Code Is    409
+    Check HTTP Response Body Json Schema Is   ProblemDetails
 
-POST VNFD in Individual VNF Package (Method not implemented)
-    Log    Trying to perform a POST (method should not be implemented)
-    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    POST    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/vnfd
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
+POST VNFD in Individual VNF Package Content - Method not implemented
+    [Documentation]    Test ID: 7.3.3.4.8
+    ...    Test title: POST VNFD in Individual VNF Package Content - Method not implemented
+    ...    Test objective: The objective is to test that POST method is not allowed to create new VNFD
+    ...    Pre-conditions: none
+    ...    Reference: section 10.4.4.3.1 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send POST Request for VNFD in individual VNF Package
+    Check HTTP Response Status Code Is    405
 
-PUT VNFD in Individual VNF Package (Method not implemented)
-    Log    Trying to perform a PUT. This method should not be implemented
-    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    PUT    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/vnfd
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
+PUT VNFD in Individual VNF Package Content - Method not implemented
+    [Documentation]    Test ID: 7.3.3.4.9
+    ...    Test title: PUT VNFD in Individual VNF Package Content - Method not implemented
+    ...    Test objective: The objective is to test that PUT method is not allowed to modify a VNFD
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.4.3.3 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send PUT Request for VNFD in individual VNF Package
+    Check HTTP Response Status Code Is    405
 
-PATCH VNFD in Individual VNF Package (Method not implemented)
-    Log    Trying to perform a PATCH. This method should not be implemented
-    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    PATCH    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/vnfd
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
+PATCH VNFD in Individual VNF Package Content - Method not implemented
+    [Documentation]    Test ID: 7.3.3.4.10
+    ...    Test title: PATCH VNFD in Individual VNF Package Content - Method not implemented
+    ...    Test objective: The objective is to test that PATCH method is not allowed to update a VNFD
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.4.3.4 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send PATCH Request for VNFD in individual VNF Package
+    Check HTTP Response Status Code Is    405
+
+DELETE VNFD in Individual VNF Package Content - Method not implemented
+    [Documentation]    Test ID: 7.3.3.4.11
+    ...    Test title: DELETE VNFD in Individual VNF Package Content - Method not implemented
+    ...    Test objective: The objective is to test that DELETE  method is not allowed to delete a VNFD
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.4.3.5 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: The VNFD is not deleted by the failed operation
+    Send DELETE Request for VNFD in individual VNF Package
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNFD Exist
 
-DELETE VNFD in Individual VNF Package (Method not implemented)
-    Log    Trying to perform a DELETE. This method should not be implemented
-    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    DELETE    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
 
diff --git a/SOL003/VNFPackageManagement-API/VNFPackageArtifacts.robot b/SOL003/VNFPackageManagement-API/VNFPackageArtifacts.robot
index 38bc4f76..4c3ca405 100644
--- a/SOL003/VNFPackageManagement-API/VNFPackageArtifacts.robot
+++ b/SOL003/VNFPackageManagement-API/VNFPackageArtifacts.robot
@@ -2,97 +2,145 @@
 Library           JSONSchemaLibrary    schemas/
 Resource          environment/variables.txt    # Generic Parameters
 Resource          environment/vnfPackageArtifacts.txt
+Resource          VNFPackageManagementKeywords.robot 
 Library           JSONLibrary
 Library           REST    ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT}
 
 *** Test Cases ***
-GET VNF Package Artifact
-    Log    Trying to get a VNF Package Artifact
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
-    Integer    response status    200
-    Log    Received a 200 OK as expected
-    ${contentType}=    Output    response headers Content-Type
-    Should Contain    ${contentType}    ${CONTENT_TYPE_OCTET}
+GET Individual VNF Package Artifact
+    [Documentation]    Test ID: 7.3.3.5.1
+    ...    Test title: GET Individual VNF Package Artifact
+    ...    Test objective: The objective is to test the retrieval of an individual VNF package artifact
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    GET Individual VNF Package Artifact
+    Check HTTP Response Status Code Is    200
 
-GET VNF Package Artifact - Range
-    Log    Trying to get an Artifact using RANGE Header and using an NFVO that can handle it
-    Pass Execution If    ${NFVO_RANGE_OK} == 0    Skipping this test as NFVO is not able to handle partial Requests.
-    Set Headers    {"Range": "${range}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
-    Integer    response status    206
-    Log    Received 206 Partial Content as expected.
-    ${headers}=    Output    response headers
-    Should Contain    ${headers}    Content-Range
-    Should Contain    ${headers}    Content-Length
+GET Individual VNF Package Artifact in octet stream format
+    [Documentation]    Test ID: 7.3.3.5.2
+    ...    Test title: GET Individual VNF Package Artifact in octet stream format
+    ...    Test objective: The objective is to test the retrieval of an individual VNF package artifact when the NFVO cannot determine the artifact content type. The test performs a validation that the returned artifcat in is octet-stream format 
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO cannot determine the content type of the artifact
+    ...    Post-Conditions: none
+    GET Individual VNF Package Artifact in octet stream format
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Header Content-Type Is    application/octet-stream
 
+GET Individual VNF Package Artifact with Range Request and NFVO supporting Range Requests
+    [Documentation]    Test ID: 7.3.3.5.3
+    ...    Test title: GET Individual VNF Package Artifact with Range Request and NFVO supporting Range Requests
+    ...    Test objective: The objective is to test the retrieval of an individual VNF package artifact when using a range request to return single range of bytes from the file, with the NFVO supporting it. The test also perform a validation that returned content matches the issued range
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO supports range requests to return single range of bytes from the VNF package artifact
+    ...    Post-Conditions: none
+    GET Individual VNF Package Artifact with Range Request
+    Check HTTP Response Status Code Is    206
+    Check HTTP Response Header Content-Range Is Present and Matches the requested range
+    Check HTTP Response Header Content-Length Is Present and Matches the requested range length
 
-GET VNF Package Artifact - Negative Range
-    Log    Trying to get a range of bytes of the limit of the VNF Package
-    Pass Execution If    ${NFVO_RANGE_OK} == 0    Skipping this test as NFVO is not able to handle partial Requests.
-    Set Headers    {"Range": "${erroneousRange}"} 
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
-    Integer    response status    416
-    Log    Received 416 Range not satisfiable 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 Individual VNF Package Artifact with Range Request and NFVO not supporting Range Requests
+    [Documentation]    Test ID: 7.3.3.5.4
+    ...    Test title: GET Individual VNF Package Artifact with Range Request and NFVO not supporting Range Requests
+    ...    Test objective: The objective is to test that the retrieval of an individual VNF package artifact, when using a range request to return single range of bytes from the file and the NFVO not supporting it, returns the full VNF Package artifact.
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO does not support range requests to return single range of bytes from the VNF package artifact
+    ...    Post-Conditions: none    
+    GET Individual VNF Package Artifact with Range Request
+    Check HTTP Response Status Code Is    200
 
-GET VNF Package Artifact- Negative (Not Found)
-    Log    Trying to perform a negative get, using an erroneous package ID
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${erroneousVnfPkgId}/artifacts/${artifactPath}
-    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
+GET Individual VNF Package Artifact with invalid Range Request
+    [Documentation]    Test ID: 7.3.3.5.5
+    ...    Test title: GET Individual VNF Package Artifact with invalid Range Request
+    ...    Test objective: The objective is to test that the retrieval of an individual VNF package artifact fails when using a range request that does not match any available byte range in the file.
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO supports range requests to return single range of bytes from the VNF package artifact
+    ...    Post-Conditions: none      
+    GET Individual VNF Package Artifact with invalid Range Request
+    Check HTTP Response Status Code Is    416
 
-GET VNF Package Artifact - Negative (onboardingState issue)
-    Log    Trying to get a VNF Package artifact present in the NFVO Catalogue, but not in ONBOARDED operationalStatus
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${onboardingStateVnfPkgId}/artifacts/${artifactPath}
-    Integer    response status    409
-    Log    Received 409 Conflict 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 Individual VNF Package Artifact with invalid resource identifier
+    [Documentation]    Test ID: 7.3.3.5.6
+    ...    Test title: GET Individual VNF Package Artifact with invalid resource identifier
+    ...    Test objective: The objective is to test that the retrieval of an individual VNF package artifact fails when using an invalid resource identifier
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none    
+    GET Individual VNF Package Artifact with invalid resource identifier
+    Check HTTP Response Status Code Is    404
 
-POST VNF Package Artifact - (Method not implemented)
-    Log    Trying to perform a POST (method should not be implemented)
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    POST    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
+GET Individual VNF Package Artifact with conflict due to onboarding state
+    [Documentation]    Test ID: 7.3.3.5.7
+    ...    Test title: GET Individual VNF Package Artifact with conflict due to onboarding state
+    ...    Test objective: The objective is to test that the retrieval of an individual VNF package artifact fails due to a conflict when the VNF Package is not in onboarding state ONBOARDED in the NFVO. The test also performs a validation of the JSON schema validation of the failed operation HTTP response
+    ...    Pre-conditions: The onboarding state of the VNF package for which the content is requested is different from ONBOARDED.
+    ...    Reference: section 10.4.6.3.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none   
+    GET Artifact for VNF Package in onboarding state different from ONBOARDED
+    Check HTTP Response Status Code Is    409
+    Check HTTP Response Body Json Schema Is   ProblemDetails
 
-PUT VNF Package Artifact - (Method not implemented)
-    Log    Trying to perform a PUT. This method should not be implemented
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    PUT    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
+POST Individual VNF Package Artifact - Method not implemented
+    [Documentation]    Test ID: 7.3.3.5.8
+    ...    Test title: POST Individual VNF Package Artifact - Method not implemented
+    ...    Test objective: The objective is to test that POST method is not allowed to create new VNF Package artifact
+    ...    Pre-conditions: none
+    ...    Reference: section 10.4.6.3.1 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send POST Request for individual VNF Package Artifact
+    Check HTTP Response Status Code Is    405
 
-PATCH VNF Package Artifact - (Method not implemented)
-    Log    Trying to perform a PATCH. This method should not be implemented
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    PATCH    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
+PUT Individual VNF Package Artifact - Method not implemented
+    [Documentation]    Test ID: 7.3.3.5.9
+    ...    Test title: PUT Individual VNF Package Artifact - Method not implemented
+    ...    Test objective: The objective is to test that PUT method is not allowed to modify a VNF Package artifact
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.3 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send PUT Request for individual VNF Package Artifact
+    Check HTTP Response Status Code Is    405
+
+PATCH Individual VNF Package Artifact - Method not implemented
+    [Documentation]    Test ID: 7.3.3.5.10
+    ...    Test title: PATCH Individual VNF Package Artifact - Method not implemented
+    ...    Test objective: The objective is to test that PATCH  method is not allowed to update a VNF Package artifact
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.4 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send PATCH Request for individual VNF Package Artifact
+    Check HTTP Response Status Code Is    405
+
+DELETE Individual VNF Package Artifact - Method not implemented
+    [Documentation]    Test ID: 7.3.3.5.11
+    ...    Test title: DELETE Individual VNF Package Artifact - Method not implemented
+    ...    Test objective: The objective is to test that DELETE  method is not allowed to delete a VNF Package artifact
+    ...    Pre-conditions: One or more VNF packages are onboarded in the NFVO.
+    ...    Reference: section 10.4.6.3.5 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: The VNF Package artifact is not deleted by the failed operation
+    Send DELETE Request for individual VNF Package Artifact
+    Check HTTP Response Status Code Is    405
+    Check Postcondition VNF Package Artifact Exist
 
-DELETE VNF Package Artifact - (Method not implemented)
-    Log    Trying to perform a DELETE. This method should not be implemented
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    DELETE    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
-    Integer    response status    405
-    Log    Received 405 Method not implemented as expected
diff --git a/SOL003/VNFPackageManagement-API/VNFPackageManagementKeywords.robot b/SOL003/VNFPackageManagement-API/VNFPackageManagementKeywords.robot
index 54c59717..9748467c 100644
--- a/SOL003/VNFPackageManagement-API/VNFPackageManagementKeywords.robot
+++ b/SOL003/VNFPackageManagement-API/VNFPackageManagementKeywords.robot
@@ -1,9 +1,12 @@
 *** Settings ***
 Resource    environment/variables.txt
 Resource    environment/subscriptions.txt
+Resource    environment/IndividualSubscription.txt
 Resource    environment/vnfPackages.txt
 Resource    environment/individualVnfPackage.txt
 Resource    environment/vnfPackageContent.txt
+Resource    environment/vnfPackageArtifacts.txt
+Resource    environment/vnfdInIndividualVnfPackage.txt
 Library    REST    ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT}    ssl_verify=false
 Library    MockServerLibrary 
 Library    OperatingSystem
@@ -379,8 +382,6 @@ Send Post Request for VNF Package Subscription
     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}"}
@@ -391,8 +392,6 @@ Send Post Request for Duplicated VNF Package Subscription
     ${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}"}
@@ -408,8 +407,7 @@ Send Patch Request for VNF Package Subscriptions
     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}"}
@@ -418,6 +416,199 @@ Send Delete Request for VNF Package Subscriptions
     ${output}=    Output    response
     Set Suite Variable    ${response}    ${output} 
 
+Check Postcondition VNF Package Subscriptions Exists
+    Log    Checking that subscriptions exists
+    Get all VNF Package Subscriptions    
+
+Get single file VNFD in Individual VNF Package in Plain Format
+    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
+    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgPlainVNFD}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Get VNFD in Individual VNF Package in Zip Format
+    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgZipVNFD}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Get single file VNFD in Individual VNF Package in Plain or Zip Format
+    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
+    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgPlainVNFD}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+Get multi file VNFD in Individual VNF Package in Plain or Zip Format
+    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
+    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgZipVNFD}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Check HTTP Response Header Content-Type Is Any of
+    [Arguments]   ${header1}    ${header2}
+    Should Contain Any  ${response['headers']['Content-Type']}    ${header1}    ${header2}
+
+Get multi file VNFD in Individual VNF Package in Plain Format
+    Log    Trying to get a negative case performing a get on a VNFD from a given VNF Package present in the NFVO Catalogue. Accept will be text/plain but VNFD is composed my multiple files.
+    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgZipVNFD}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Get VNFD in Individual VNF Package with invalid resource identifier
+    Log    Trying to perform a negative get, using an erroneous package ID
+    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${erroneousVnfPkgId}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Get VNFD in Individual VNF Package Content with conflict due to onboarding state 
+    Log    Trying to get a VNFD from a given VNF Package present in the NFVO Catalogue
+    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${onboardingStateVnfPkgId}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Send POST Request for VNFD in individual VNF Package
+    Log    Trying to perform a POST. This method should not be implemented
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    POST    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Send PUT Request for VNFD in individual VNF Package
+    Log    Trying to perform a PUT. This method should not be implemented
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    PUT    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+    
+Send PATCH Request for VNFD in individual VNF Package
+    Log    Trying to perform a PATCH. This method should not be implemented
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    PATCH    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Send DELETE Request for VNFD in individual VNF Package
+    Log    Trying to perform a DELETE. This method should not be implemented
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    DELETE    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgZipVNFD}/vnfd
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output} 
+
+Check Postcondition VNFD Exist
+    Log    Checking that vnf pacakge still exists
+    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPkgZipVNFD}/vnfd
+    Check HTTP Response Status Code Is    200
+
+GET Individual VNF Package Artifact
+    Log    Trying to get a VNF Package Artifact
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+GET Individual VNF Package Artifact in octet stream format  
+    Log    Trying to get a VNF Package Artifact
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageOctetStreamId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+GET Individual VNF Package Artifact with Range Request
+    Log    Trying to get an Artifact using RANGE Header and using an NFVO that can handle it
+    Pass Execution If    ${NFVO_RANGE_OK} == 0    Skipping this test as NFVO is not able to handle partial Requests.
+    Set Headers    {"Range": "${range}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+GET Individual VNF Package Artifact with invalid Range Request
+    Log    Trying to get a range of bytes of the limit of the VNF Package
+    Pass Execution If    ${NFVO_RANGE_OK} == 0    Skipping this test as NFVO is not able to handle partial Requests.
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Set Headers    {"Range": "${erroneousRange}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+ 
+GET Individual VNF Package Artifact with invalid resource identifier
+    Log    Trying to perform a negative get, using an erroneous package ID
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${erroneousVnfPkgId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+GET Artifact for VNF Package in onboarding state different from ONBOARDED
+    Log    Trying to get a VNF Package artifact present in the NFVO Catalogue, but not in ONBOARDED operationalStatus
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${onboardingStateVnfPkgId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send POST Request for individual VNF Package Artifact
+    Log    Trying to perform a POST (method should not be implemented)
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    POST    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send PUT Request for individual VNF Package Artifact
+    Log    Trying to perform a PUT (method should not be implemented)
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    PUT    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+ 
+Send PATCH Request for individual VNF Package Artifact
+    Log    Trying to perform a PATCH (method should not be implemented)
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    PATCH    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send DELETE Request for individual VNF Package Artifact
+    Log    Trying to perform a DELETE (method should not be implemented)
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    DELETE    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Check Postcondition VNF Package Artifact Exist
+    Log    Checking that vnf pacakge still exists
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/vnf_packages/${vnfPackageId}/artifacts/${artifactPath}
+    Check HTTP Response Status Code Is    200
     
 Check HTTP Response Status Code Is
     [Arguments]    ${expected_status}    
@@ -443,7 +634,7 @@ Check HTTP Response Body Subscriptions Match the requested Attribute-Based Filte
     #TODO
 
 
-Check HTTP Response Body Matches the Subscription
+Check HTTP Response Body PkgmSubscription Attributes Values Match the Issued Subscription
     Log    Check Response matches subscription
     ${body}=    Get File    jsons/subscriptions.json
     ${subscription}=    evaluate    json.loads('''${body}''')    json
@@ -461,13 +652,106 @@ Check Postcondition VNF Package Subscription Is Set
     ${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
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    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    PkgmSubscription.schema.json    ${result}
+    Log    Validated PkgmSubscription schema   
+
+Get Individual VNF Package Subscription
+    Log    Trying to get a single subscription identified by subscriptionId
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+GET individual VNF Package Subscription with invalid resource identifier
+    Log    Trying to perform a request on a subscriptionID which doesn't exist
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${erroneousSubscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send Delete request for individual VNF Package Subscription
+    Log    Trying to perform a DELETE on a subscriptionId
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    DELETE    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Check Postcondition VNF Package Subscription is Deleted
+    Log    Check Postcondition Subscription is deleted
+    GET individual VNF Package Subscription
+    Check HTTP Response Status Code Is    404 
+
+Send Delete request for individual VNF Package Subscription with invalid resource identifier
+    Log    Trying to perform a DELETE on a subscriptionId which doesn't exist
+    Set Headers    {"Accept": "${ACCEPT_JSON}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    DELETE    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${erroneousSubscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send Post request for individual VNF Package Subscription
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": ${AUTHORIZATION}"}
+    POST    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${newSubscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    @{response}    ${output}
+
+Send Put request for individual VNF Package Subscription
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": ${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
+    ${origOutput}=    Output    response
+    Set Suite Variable    ${origResponse}    ${origOutput}
+    PUT    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    @{response}    ${output}
     
+Send Patch request for individual VNF Package Subscription
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": ${AUTHORIZATION}"}
+    GET    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
+    ${origOutput}=    Output    response
+    Set Suite Variable    ${origResponse}    ${origOutput}
+    PATCH    ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    @{response}    ${output}
+   
+Check Postcondition VNF Package Subscription is Unmodified (Implicit)
+    Log    Check postconidtion subscription not modified
+    GET individual VNF Package Subscription
+    Log    Check Response matches original VNF Threshold
+    ${subscription}=    evaluate    json.loads('''${response['body']}''')    json
+    Should Be Equal    ${origResponse['body']['id']}    ${subscription.id}
+    Should Be Equal    ${origResponse['body']['callbackUri']}    ${subscription.callbackUri}
+
+Check Postcondition VNF Package 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}/${apiVersion}/subscriptions/${newSubscriptionId}
+    ${output}=    Output    response
+    Set Suite Variable    @{response}    ${output}
+    Check HTTP Response Status Code Is    404
 
 Check HTTP Response Header Contains
     [Arguments]    ${CONTENT_TYPE}
     Should Contain    ${response.headers}    ${CONTENT_TYPE}
     Log    Header is present
 
+Check HTTP Response Body Subscription Identifier matches the requested Subscription
+    Log    Trying to check response ID
+    Should Be Equal    ${response['body']['id']}    ${subscriptionId} 
+    Log    Subscription identifier as expected
 
 Create Sessions
     Pass Execution If    ${NFVO_CHECKS_NOTIF_ENDPOINT} == 0    MockServer not started as NFVO is not checking the notification endpoint
diff --git a/SOL003/VNFPackageManagement-API/environment/individualSubscription.txt b/SOL003/VNFPackageManagement-API/environment/individualSubscription.txt
index 1bcfe4cc..16f5e6b5 100644
--- a/SOL003/VNFPackageManagement-API/environment/individualSubscription.txt
+++ b/SOL003/VNFPackageManagement-API/environment/individualSubscription.txt
@@ -1,3 +1,6 @@
 *** Variables ***
 ${subscriptionId}    f3ae6df7-07e1-47c9-8924-9ebe10343586
 ${erroneousSubscriptionId}    442e3ee5-0499-4849-9b31-eb91ce1638f1    # Not existing ID on the subscriptions
+${newSubscriptionId}    newSubsciptionId
+${response}    httpresponse
+${origResponse}    httpresponse
diff --git a/SOL003/VNFPackageManagement-API/environment/vnfPackageArtifacts.txt b/SOL003/VNFPackageManagement-API/environment/vnfPackageArtifacts.txt
index b22f355e..d1c4e58d 100644
--- a/SOL003/VNFPackageManagement-API/environment/vnfPackageArtifacts.txt
+++ b/SOL003/VNFPackageManagement-API/environment/vnfPackageArtifacts.txt
@@ -5,3 +5,4 @@ ${NFVO_RANGE_OK}    1    # If 1 means that Range is supported by the NFVO
 ${range}          bytes=0-1023
 ${erroneousRange}    bytes=10000000-1000000000    # Requesting a out of range number of bytes
 ${erroneousVnfPkgId}    erroneousPkgId
+${vnfPackageOctetStreamId}    octetStreamPkgId
-- 
GitLab