From 103f42497f4fcc04c2c0df4873c293ac2058e248 Mon Sep 17 00:00:00 2001
From: zulfiqar <sana.zulfiqar@xflowresearch.com>
Date: Wed, 10 Mar 2021 14:30:50 +0100
Subject: [PATCH] new test added for Individual NSD Archive Artifact

---
 .../IndividualNSDArchiveArtifact.robot        | 172 ++++++++++++++++++
 .../NSDManagementKeywords.robot               | 107 +++++++++++
 .../environment/variables.txt                 |   9 +-
 3 files changed, 285 insertions(+), 3 deletions(-)
 create mode 100644 SOL005/NSDManagement-API/IndividualNSDArchiveArtifact.robot

diff --git a/SOL005/NSDManagement-API/IndividualNSDArchiveArtifact.robot b/SOL005/NSDManagement-API/IndividualNSDArchiveArtifact.robot
new file mode 100644
index 00000000..3541588a
--- /dev/null
+++ b/SOL005/NSDManagement-API/IndividualNSDArchiveArtifact.robot
@@ -0,0 +1,172 @@
+*** Settings ***
+Library           JSONSchemaLibrary    schemas/
+Resource          environment/variables.txt    # Generic Parameters
+Resource          NSDManagementKeywords.robot
+Library           JSONLibrary
+Library           REST    ${NFVO_SCHEMA}://${NFVO_HOST}:${NFVO_PORT}    ssl_verify=false
+Library           OperatingSystem
+
+*** Test Cases ***
+GET Individual NSD Archive Artifact
+    [Documentation]    Test ID: 5.3.1.16.1
+    ...    Test title: GET Individual NSD Archive Artifact
+    ...    Test objective: The objective is to test the retrieval of an individual NSD Archive artifact
+    ...    Pre-conditions: One or more NSD archives are on-boarded to the NFVO.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    GET Individual NSD Archive Artifact
+    Check HTTP Response Status Code Is    200
+    
+GET Individual NSD Archive Artifact with include_signatures parameter
+    [Documentation]    Test ID: 5.3.1.16.2
+    ...    Test title: GET Individual NSD Archive Artifact with include_signatures parameter
+    ...    Test objective: The objective is to test that the GET request read the whole content of the archive containing the artifact files successfully and also contain security certificates when requested with "include_signature" parameter, and perform a validation that returned content is in Zip format
+    ...    Pre-conditions: One or more NSD archives are on-boarded to the NFVO.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    GET Individual NSD Archive Artifact with include_signatures parameter
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Header Content-Type Is    application/zip
+    
+GET Individual NSD Archive Artifact in octet stream format
+    [Documentation]    Test ID: 5.3.1.16.3
+    ...    Test title: GET Individual NSD Archive Artifact in octet stream format
+    ...    Test objective: The objective is to test the retrieval of an individual NSD Archive 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 NSD archives are on-boarded to the NFVO.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO cannot determine the content type of the artifact
+    ...    Post-Conditions: none
+    GET Individual NSD Archive Artifact in octet stream format
+    Check HTTP Response Status Code Is    200
+    Check HTTP Response Header Content-Type Is    application/octet-stream
+
+GET Individual NSD Archive Artifact with Range Request and NFVO supporting Range Requests
+    [Documentation]    Test ID: 5.3.1.16.4
+    ...    Test title: GET Individual NSD Archive Artifact with Range Request and NFVO supporting Range Requests
+    ...    Test objective: The objective is to test the retrieval of an individual NSD Archive 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 NSD archives are on-boarded to the NFVO.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO supports range requests to return single range of bytes from the NSD Archive artifact
+    ...    Post-Conditions: none
+    GET Individual NSD Archive 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 Individual NSD Archive Artifact with Range Request and NFVO not supporting Range Requests
+    [Documentation]    Test ID: 5.3.1.16.5
+    ...    Test title: GET Individual NSD Archive Artifact with Range Request and NFVO not supporting Range Requests
+    ...    Test objective: The objective is to test that the retrieval of an individual NSD archive artifact, when using a range request to return single range of bytes from the file and the NFVO not supporting it, returns the full NSD Archive artifact.
+    ...    Pre-conditions: One or more NSD archives are on-boarded to the NFVO.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO does not support range requests to return single range of bytes from the NSD Archive artifact
+    ...    Post-Conditions: none    
+    GET Individual NSD Archive Artifact with Range Request
+    Check HTTP Response Status Code Is    200
+    
+GET Individual NSD Archive Artifact with invalid resource identifier
+    [Documentation]    Test ID: 5.3.1.16.6
+    ...    Test title: GET Individual NSD Archive Artifact with invalid resource identifier
+    ...    Test objective: The objective is to test that the retrieval of an individual NSD Archive Artifact fails when using an invalid resource identifier
+    ...    Pre-conditions: One or more NSD archives are on-boarded to the NFVO.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none    
+    GET Individual NSD Archive Artifact with invalid resource identifier
+    Check HTTP Response Status Code Is    404
+    Check HTTP Response Body Json Schema Is   ProblemDetails
+    
+GET Individual NSD Archive Artifact - Not Acceptable
+    [Documentation]    Test ID: 5.3.1.16.7
+    ...    Test title: GET Individual NSD Archive Artifact - Not Acceptable
+    ...    Test objective: The objective is to test that the retrieval of an individual NSD Archive artifact fails when related request contained an "Accept" header not compatible with the Content type "application/zip" but the "include_signatures" flag was provided
+    ...    Pre-conditions: One or more NSD archives are on-boarded to the NFVO.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none      
+    GET Individual NSD Archive Artifact with incompatable header
+    Check HTTP Response Status Code Is    406
+    Check HTTP Response Body Json Schema Is   ProblemDetails
+
+GET Individual NSD Archive Artifact with conflict due to onboarding state
+    [Documentation]    Test ID: 5.3.1.16.8
+    ...    GET Individual NSD Archive Artifact with conflict due to onboarding state
+    ...    Test objective: The objective is to test that the retrieval of an individual NSD Archive Artifact fails due to a conflict when the NSD 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 NSD archive for which the content is requested is different from ONBOARDED.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none   
+    GET Individual NSD Archive Artifact in onboarding state different from ONBOARDED
+    Check HTTP Response Status Code Is    409
+    Check HTTP Response Body Json Schema Is   ProblemDetails
+    
+GET Individual NSD Archive Artifact with invalid Range Request
+    [Documentation]    Test ID: 5.3.1.16.9
+    ...    Test title: GET Individual NSD Archive Artifact with invalid Range Request
+    ...    Test objective: The objective is to test that the retrieval of an Individual NSD Archive fails when using a range request that does not match any available byte range in the file.
+    ...    Pre-conditions: One or more NSD Archives are on-boarded to the NFVO.
+    ...    Reference: Clause 5.4.4c.3.2 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: The NFVO supports range requests to return single range of bytes from the NSD Archive artifact
+    ...    Post-Conditions: none      
+    GET Individual NSD Archive Artifact with invalid Range Request
+    Check HTTP Response Status Code Is    416
+
+POST Individual NSD Archive Artifact - Method not implemented
+    [Documentation]    Test ID: 5.3.1.16.10
+    ...    Test title: POST Individual NSD Archive Artifact - Method not implemented
+    ...    Test objective: The objective is to test that POST method is not allowed to create an individual artifact contained in an NSD archive.
+    ...    Pre-conditions: none
+    ...    Reference: Clause 5.4.4c.3.1 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send POST Request for NSD archive Artifact
+    Check HTTP Response Status Code Is    405
+    
+PUT Individual NSD Archive Artifact - Method not implemented
+    [Documentation]    Test ID: 5.3.1.16.11
+    ...    Test title: PUT Individual NSD Archive Artifact - Method not implemented
+    ...    Test objective: The objective is to test that PUT method is not allowed to modify an Individual NSD Archive artifact
+    ...    Pre-conditions: none
+    ...    Reference: Clause 5.4.4c.3.3 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send PUT Request for Individual NSD Archive Artifact
+    Check HTTP Response Status Code Is    405
+
+PATCH Individual NSD Archive Artifact - Method not implemented
+    [Documentation]    Test ID: 5.3.1.16.12
+    ...    Test title: PATCH Individual NSD Archive Artifact - Method not implemented
+    ...    Test objective: The objective is to test that PATCH  method is not allowed to update an Individual NSD Archive artifact
+    ...    Pre-conditions: none
+    ...    Reference: Clause 5.4.4c.3.4 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send PATCH Request for Individual NSD Archive Artifact
+    Check HTTP Response Status Code Is    405
+
+DELETE Individual NSD Archive Artifact - Method not implemented
+    [Documentation]    Test ID: 5.3.1.16.13
+    ...    Test title: DELETE Individual NSD Archive Artifact - Method not implemented
+    ...    Test objective: The objective is to test that DELETE  method is not allowed to delete an Individual NSD Archive artifact
+    ...    Pre-conditions: none
+    ...    Reference: Clause 5.4.4c.3.5 - ETSI GS NFV-SOL 005 [3] v3.3.1
+    ...    Config ID: Config_prod_NFVO
+    ...    Applicability: none
+    ...    Post-Conditions: none
+    Send DELETE Request for Individual NSD Archive Artifact
+    Check HTTP Response Status Code Is    405
+    
\ No newline at end of file
diff --git a/SOL005/NSDManagement-API/NSDManagementKeywords.robot b/SOL005/NSDManagement-API/NSDManagementKeywords.robot
index c5fd69b6..1ca51d28 100644
--- a/SOL005/NSDManagement-API/NSDManagementKeywords.robot
+++ b/SOL005/NSDManagement-API/NSDManagementKeywords.robot
@@ -1329,6 +1329,113 @@ Send DELETE Request for PNFD Archive Manifest
     REST.DELETE    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${pnfdInfoId}/manifest
     ${output}=    Output    response
     Set Suite Variable    ${response}    ${output}
+    
+Send POST Request for NSD archive Artifact
+    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
+    Log    Trying to perform a POST. This method should not be implemented
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.POST    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+GET Individual NSD Archive Artifact
+    Log    Trying to get a NSD Archive Artifact
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.GET    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+GET Individual NSD Archive Artifact with include_signatures parameter
+    Log    Trying to get NSD Archive Artifact with security certificates
+    Set Headers    {"Accept": "${ACCEPT_ZIP}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.GET    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}/include_signatures
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+GET Individual NSD Archive Artifact in octet stream format
+    Log    Trying to get a NSD Archive Artifact
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.GET    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+GET Individual NSD Archive 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_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.GET    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+Check HTTP Response Header Content-Range Is Present and Matches the requested range
+    Log    Check Content-Range HTTP Header
+    Should Contain    ${response['headers']}    Content-Range
+    Should Be Equal As Strings    ${response['headers']['Content-Range']}    ${range}/${full_lenght}
+    Log    Header Content-Range is present
+    
+Check HTTP Response Header Content-Length Is Present and Matches the requested range length
+    Log    Check Content-Length HTTP Header
+    Should Contain    ${response['headers']}    Content-Length
+    Should Be Equal As Integers    ${response['headers']['Content-Length']}    ${full_lenght}
+    Log    Header Content-Length is present
+    
+GET Individual NSD Archive Artifact with invalid resource identifier
+    Log    Trying to perform a negative get, using an erroneous NSD ID
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    GET    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${erroneous_nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+GET Individual NSD Archive Artifact with incompatable header
+    Log    Trying to get a NSD Archive Artifact
+    Set Headers    {"Accept": "${ACCEPT_PLAIN}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.GET    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}/include_signatures
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+GET Individual NSD Archive Artifact in onboarding state different from ONBOARDED
+    Log    Trying to get a NSD Archive artifact present in the NFVO Catalogue, but not in ONBOARDED nsdOnboardingState
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.GET    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${onboardingStateNsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+GET Individual NSD Archive Artifact with invalid Range Request
+    Log    Trying to get a range of bytes of the limit of the NSD Archive
+    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_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.GET    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+
+Send PUT Request for Individual NSD Archive Artifact
+    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
+    Log    Trying to perform a PUT. This method should not be implemented
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.PUT    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+Send PATCH Request for Individual NSD Archive Artifact
+    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
+    Log    Trying to perform a Patch. This method should not be implemented
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.PATCH    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
+    
+Send DELETE Request for Individual NSD Archive Artifact
+    Pass Execution If    ${testOptionalMethods} == 0    optional methods are not implemented on the FUT. Skipping test.
+    Log    Trying to perform a DELETE. This method should not be implemented
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"}
+    REST.DELETE    ${apiRoot}/${apiName}/${apiMajorVersion}/ns_descriptors/${nsdInfoId}/artifacts/${artifactPath}
+    ${output}=    Output    response
+    Set Suite Variable    ${response}    ${output}
 
 Check HTTP Response Body NsInstance content against NS Descriptor
     #${check_descriptors} flag, 1 to check descriptors
diff --git a/SOL005/NSDManagement-API/environment/variables.txt b/SOL005/NSDManagement-API/environment/variables.txt
index 71dfea8b..52611838 100644
--- a/SOL005/NSDManagement-API/environment/variables.txt
+++ b/SOL005/NSDManagement-API/environment/variables.txt
@@ -61,9 +61,6 @@ ${ACCEPT_ZIP}    application/zip
 ${ACCEPT_PLAIN}    text/plain
 ${CONTENT_TYPE_ZIP}    application/zip
 ${CONTENT_TYPE_PLAIN}    text/plain
-${NFVO_RANGE_OK}    1
-${range}          bytes=0-1023
-${erroneousRange}    bytes=100000-1000000    # Requesting a out of range number of bytes
 ${onboardingStateNsdInfoId}    b992a851-08b1-45a8-9282-a5f7a7df04a6
 ${contentZipNsd}    files/nsd.zip
 ${contentFileNsd}    files/nsd.yml
@@ -77,6 +74,12 @@ ${createdNsdInfoId}    f27200b1-1d8b-48c2-9d98-a993b8ab117f
 ${NSD_NAME}     nsdName=onBoardedNSD
 ${PNFD_NAME}     pnfdName=onBoardedPNFD
 ${SEPERATOR}      =
+${artifactPath}    artifactPath
+${CONTENT_TYPE_OCTET}    application/octet-stream
+${NFVO_RANGE_OK}    1    # If 1 means that Range is supported by the NFVO
+${range}          bytes=0-1023
+${erroneousRange}    bytes=100000-1000000    # Requesting a out of range number of bytes
+${full_lenght}        2000 
 
 
 ${pnfdInfoId}    40853bda-8a8f-4f63-9130-cef439f65348
-- 
GitLab