From 4e96f03aee617895e91e6a98bebf5007adba9b7d Mon Sep 17 00:00:00 2001
From: mxzhao <mengxuan.zhao@eglobalmark.com>
Date: Fri, 11 Jan 2019 15:18:50 +0100
Subject: [PATCH] add documentation section to tests

---
 .../VNFConfiguration-API/Configuration.robot  |  30 ++++-
 SOL002/VNFFaultManagement-API/Alarms.robot    |  26 ++++-
 .../EscalatePerceivedSeverityTask.robot       |   9 +-
 .../IndividualAlarm.robot                     |  43 +++++--
 .../IndividualSubscription.robot              |   8 ++
 .../NotificationEndpoint.robot                |  62 +++++++---
 .../Subscriptions.robot                       |  48 ++++++++
 .../environment/variables.txt                 |   3 +-
 .../IndividualSubscription.robot              |   2 +-
 .../Grants.robot                              | 108 +++++++++++++-----
 .../IndividualGrant.robot                     |  27 ++++-
 .../IndividualSubscription.robot              |   8 ++
 .../NotificationEndpoint.robot                |   8 ++
 .../Subscriptions.robot                       |  48 ++++++++
 14 files changed, 359 insertions(+), 71 deletions(-)

diff --git a/SOL002/VNFConfiguration-API/Configuration.robot b/SOL002/VNFConfiguration-API/Configuration.robot
index ee298467..c660a74a 100644
--- a/SOL002/VNFConfiguration-API/Configuration.robot
+++ b/SOL002/VNFConfiguration-API/Configuration.robot
@@ -20,7 +20,15 @@ POST Configuration - Method not implemented
     Log    Validate Status code
     Integer    response status    405
 
-Get information about a configuration  
+Get information about a configuration
+    [Documentation]    Test ID: 9.4.2.1
+    ...    Test title: Get information about a configuration
+    ...    Test objective: The objective is to read configuration information about a VNF instance and/or its VNFC instances
+    ...    Pre-conditions: 
+    ...    Reference: section 9.4.2 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:   
     Log    Query VNF The GET method queries information about a configuration.
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
@@ -46,6 +54,14 @@ PUT Config - Method not implemented
     Integer    response status    405
 
 PATCH Config
+    [Documentation]    Test ID: 9.4.2.2
+    ...    Test title: Set or modify a configuration resource
+    ...    Test objective: The objective is to set or modify a configuration resource
+    ...    Pre-conditions: A VNF instance and its VNFC instances exist
+    ...    Reference: section 9.4.2 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:  Configuration of the VNF instance and/or its VNFC instances has been set 
     log    Trying to perform a PATCH. This method modifies the configuration
     Set Headers  {"Accept":"${ACCEPT}"} 
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"} 
@@ -63,10 +79,14 @@ PATCH Config
     Log    Validation OK
 
 PATCH Config - Precondition failed
-    [Documentation]    Precondition Failed
-    ...    Precondition Failed A precondition given in an HTTP request header is not fulfilled. 
-    ...    Typically, this is due to an ETag mismatch, indicating that the resource was modified by another entity. 
-    ...    The response body should contain a ProblemDetails structure, in which the �detail� attribute should convey more information about the error.
+    [Documentation]    Test ID: 9.4.2.2-1
+    ...    Test title: Set or modify a configuration resource  - Precondition failed
+    ...    Test objective: The objective is to set or modify a configuration resource, but a precondition given in an HTTP request header is not fulfilled
+    ...    Pre-conditions: A VNF instance and its VNFC instances exist, ETag modified in the meanwhile
+    ...    Reference: section 9.4.2 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:  
     Depends On Test    PATCH Alarm    # If the previous test scceeded, it means that Etag has been modified
     log    Trying to perform a PATCH. This method modifies an individual alarm resource
     Set Headers  {"Accept":"${ACCEPT}"} 
diff --git a/SOL002/VNFFaultManagement-API/Alarms.robot b/SOL002/VNFFaultManagement-API/Alarms.robot
index 7da097d1..33fa0f43 100644
--- a/SOL002/VNFFaultManagement-API/Alarms.robot
+++ b/SOL002/VNFFaultManagement-API/Alarms.robot
@@ -16,7 +16,15 @@ POST Alarms - Method not implemented
     Log    Validate Status code
     Integer    response status    405
 
-Get information about multiple alarms  
+Get information about multiple alarms 
+    [Documentation]    Test ID: 7.4.2.1
+    ...    Test title: Get information about multiple alarms
+    ...    Test objective: The objective is to retrieve information about the alarm list
+    ...    Pre-conditions: 
+    ...    Reference: section 7.4.2 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:  
     Log    Query VNF The GET method queries information about multiple alarms.
     Set Headers  {"Accept":"${ACCEPT}"}  
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
@@ -32,6 +40,14 @@ Get information about multiple alarms
     Log    Validation OK
 
 Get information about multiple alarms with filters 
+    [Documentation]    Test ID: 7.4.2.2
+    ...    Test title: Get information about multiple alarms - with filters
+    ...    Test objective: The objective is to retrieve information about the alarm list
+    ...    Pre-conditions: 
+    ...    Reference: section 7.4.2 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     Log    Query VNF The GET method queries information about multiple alarms with filters.
     Set Headers  {"Accept":"${ACCEPT}"}  
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
@@ -47,6 +63,14 @@ Get information about multiple alarms with filters
     Log    Validation OK
 
 Get information about multiple alarms Bad Request Invalid attribute-based filtering parameters
+    [Documentation]    Test ID: 7.4.2.2-1
+    ...    Test title: Get information about multiple alarms - with Invalid attribute-based filtering parameters
+    ...    Test objective: The objective is to retrieve information about the alarm list
+    ...    Pre-conditions: 
+    ...    Reference: section 7.4.2 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     Log    Query VNF The GET method queries information about multiple alarm instances.
     Set Headers  {"Accept":"${ACCEPT}"}  
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"} 
diff --git a/SOL002/VNFFaultManagement-API/EscalatePerceivedSeverityTask.robot b/SOL002/VNFFaultManagement-API/EscalatePerceivedSeverityTask.robot
index 6b8e8578..4ca642eb 100644
--- a/SOL002/VNFFaultManagement-API/EscalatePerceivedSeverityTask.robot
+++ b/SOL002/VNFFaultManagement-API/EscalatePerceivedSeverityTask.robot
@@ -6,7 +6,14 @@ Suite Setup    Check resource existance
 
 *** Test Cases ***
 Escalate the perceived severity 
-    [Documentation]    escalate the perceived severity of an alarm with the VNFM
+    [Documentation]    Test ID: 7.4.4.1
+    ...    Test title: Escalate the perceived severity
+    ...    Test objective: To enable the consumer to escalate the perceived severity of an alarm that is represented by an individual alarm resource.
+    ...    Pre-conditions: The resource representing the individual alarm has been created
+    ...    Reference: section 7.4.4 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:   
     Log    escalate the perceived severity of an alarm with the VNFM
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
diff --git a/SOL002/VNFFaultManagement-API/IndividualAlarm.robot b/SOL002/VNFFaultManagement-API/IndividualAlarm.robot
index acb94943..c38f6622 100644
--- a/SOL002/VNFFaultManagement-API/IndividualAlarm.robot
+++ b/SOL002/VNFFaultManagement-API/IndividualAlarm.robot
@@ -21,7 +21,15 @@ POST Alarm - Method not implemented
     Log    Validate Status code
     Integer    response status    405
 
-Get information about a configuration  
+Get information about a configuration
+    [Documentation]    Test ID: 7.4.3.1
+    ...    Test title: Get information about an alarm
+    ...    Test objective: The objective is to read an individual alarm.
+    ...    Pre-conditions: The related alarm exists
+    ...    Reference: section 7.4.3 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:   
     Log    Query VNF The GET method queries information about an alarm.
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
@@ -47,7 +55,14 @@ PUT Alarm - Method not implemented
     Integer    response status    405
 
 PATCH Alarm
-    [Documentation]    This method modifies an individual alarm resource
+    [Documentation]    Test ID: 7.4.3.2
+    ...    Test title: Modify an individual alarm resource
+    ...    Test objective: The objective is to Modify an individual alarm resource
+    ...    Pre-conditions: The related alarm exists
+    ...    Reference: section 7.4.3 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     log    Trying to perform a PATCH. This method modifies an individual alarm resource
     Set Headers  {"Accept":"${ACCEPT}"} 
     Set Headers  {"Content-Type": "${CONTENT_TYPE_PATCH}"} 
@@ -65,10 +80,14 @@ PATCH Alarm
     Log    Validation OK
 
 PATCH Alarm - Conflict
-    [Documentation]    Conflict
-    ...    The operation cannot be executed currently, due to a conflict with the state of the �Individual alarm� resource. 
-    ...    Typically, this is due to the fact that the alarm is already in the state that is requested to be set (such as trying to acknowledge an already-acknowledged alarm). 
-    ...    The response body shall contain a ProblemDetails structure, in which the �detail� attribute should convey more information about the error.
+    [Documentation]    Test ID: 7.4.3.2-1
+    ...    Test title: Modify an individual alarm resource - Conflict
+    ...    Test objective: The objective is to Modify an individual alarm resource
+    ...    Pre-conditions: The related alarm exists
+    ...    Reference: section 7.4.3 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: The alarm resource is not modified
     Depends On Test    PATCH Alarm    # If the previous test scceeded, it means that the alarm is in ackownledged state
     log    Trying to perform a PATCH. This method modifies an individual alarm resource
     Set Headers  {"Accept":"${ACCEPT}"} 
@@ -84,10 +103,14 @@ PATCH Alarm - Conflict
     Log    Validation OK
 
 PATCH Alarm - Precondition failed
-    [Documentation]    Precondition Failed
-    ...    A precondition given in an HTTP request header is not fulfilled. Typically, this is due to an ETag mismatch, 
-    ...    indicating that the resource was modified by another entity. The response body should contain a ProblemDetails structure, 
-    ...    in which the �detail� attribute should convey more information about the error.
+    [Documentation]    Test ID: 7.4.3.2-1
+    ...    Test title: Modify an individual alarm resource - Precondition failed
+    ...    Test objective: The objective is to Modify an individual alarm resource
+    ...    Pre-conditions: The related alarm exists
+    ...    Reference: section 7.4.3 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: The alarm resource is not modified
     Depends On Test    PATCH Alarm    # If the previous test scceeded, it means that Etag has been modified
     log    Trying to perform a PATCH. This method modifies an individual alarm resource
     Set Headers  {"Accept":"${ACCEPT}"} 
diff --git a/SOL002/VNFFaultManagement-API/IndividualSubscription.robot b/SOL002/VNFFaultManagement-API/IndividualSubscription.robot
index db380227..a6afd61e 100644
--- a/SOL002/VNFFaultManagement-API/IndividualSubscription.robot
+++ b/SOL002/VNFFaultManagement-API/IndividualSubscription.robot
@@ -19,6 +19,14 @@ Post Individual Subscription - Method not implemented
     Integer    response status    405
 
 Get Information about an individual subscription
+    [Documentation]    Test ID: 7.4.6.1
+    ...    Test title: Retrieve the alarm subscriptions
+    ...    Test objective: The objective is to read an individual subscription for VNF alarms subscribed by the client
+    ...    Pre-conditions: The subscription with the given id exists
+    ...    Reference: section 7.4.6 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability:  
+    ...    Post-Conditions: 
     log    Trying to get information about an individual subscription
     Set Headers    {"Accept":"${ACCEPT}"}  
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
diff --git a/SOL002/VNFFaultManagement-API/NotificationEndpoint.robot b/SOL002/VNFFaultManagement-API/NotificationEndpoint.robot
index fcbed86a..8d35da41 100644
--- a/SOL002/VNFFaultManagement-API/NotificationEndpoint.robot
+++ b/SOL002/VNFFaultManagement-API/NotificationEndpoint.robot
@@ -7,25 +7,37 @@ Library    Process
 Library    OperatingSystem
 Library    REST    ${CONSUMER_SCHEMA}://${CONSUMER_HOST}:${notification_port}
 
-*** Variables ***
-${sleep_interval}    20s
-
 *** Test Cases ***
 Deliver a notification - Alarm
+    [Documentation]    Test ID: 7.4.5.1
+    ...    Test title: Deliver a notification - Alarm
+    ...    Test objective: The objective is to notify a VNF alarm or that the alarm list has been rebuilt.
+    ...    Pre-conditions: The VNF has subscribed to the VNFM alarm
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:   
     log    The POST method delivers a notification - Information of a VNF alarm.
     ${json}=	Get File	schemas/alarmNotification.schema.json
     ${BODY}=	evaluate	json.loads('''${json}''')	json
     Log  Creating mock request and response to handle alarmNotification
-    &{req}=  Create Mock Request Matcher	POST  ${notification_ep}    body_type="JSON_SCHEMA"    body=${BODY}
+    &{req}=  Create Mock Request Matcher	POST  ${notification_ep}  body_type="JSON_SCHEMA"    body=${BODY}
     &{rsp}=  Create Mock Response	headers="Content-Type: application/json"  status_code=204
     Create Mock Expectation  ${req}  ${rsp}
-    Sleep  ${sleep_interval}
     Log  Verifying results
-    Verify Mock Expectation  ${req}
+    Wait Until Keyword Succeeds    ${sleep_interval}    Verify Mock Expectation    ${req}
     Log  Cleaning the endpoint
     Clear Requests  ${notification_ep}
 
 Deliver a notification - Alarm Clearance
+    [Documentation]    Test ID: 7.4.5.2
+    ...    Test title: Deliver a notification - Alarm Clearance
+    ...    Test objective: The objective is to notify a VNF alarm or that the alarm list has been rebuilt.
+    ...    Pre-conditions: The VNF has subscribed to the VNFM alarm
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:   
     log    The POST method delivers a notification - Information of a VNF alarm.
     ${json}=	Get File	schemas/alarmClearedNotification.schema.json
     ${BODY}=	evaluate	json.loads('''${json}''')	json
@@ -33,34 +45,48 @@ Deliver a notification - Alarm Clearance
     &{req}=  Create Mock Request Matcher	POST  ${notification_ep}  body_type="JSON_SCHEMA"    body=${BODY}
     &{rsp}=  Create Mock Response	headers="Content-Type: application/json"  status_code=204
     Create Mock Expectation  ${req}  ${rsp}
-    Sleep  ${sleep_interval}
     Log  Verifying results
-    Verify Mock Expectation  ${req}
+    Wait Until Keyword Succeeds    ${sleep_interval}    Verify Mock Expectation    ${req}
     Log  Cleaning the endpoint
     Clear Requests  ${notification_ep}
 
 Deliver a notification - Alarm List Rebuilt
+    [Documentation]    Test ID: 7.4.5.3
+    ...    Test title: Deliver a notification - Alarm List Rebuilt
+    ...    Test objective: The objective is to notify a VNF alarm or that the alarm list has been rebuilt.
+    ...    Pre-conditions: The VNF has subscribed to the VNFM alarm
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:  
     log    The POST method delivers a notification - Information of a VNF alarm.
     ${json}=	Get File	schemas/alarmListRebuiltNotification.schema.json
     ${BODY}=	evaluate	json.loads('''${json}''')	json
     Log  Creating mock request and response to handle alarmNotification
-    &{req}=  Create Mock Request Matcher	POST  ${notification_ep}  body_type="JSON_SCHEMA"    body=${BODY}
+    &{req}=  Create Mock Request Matcher  POST  ${notification_ep}  body_type="JSON_SCHEMA"    body=${BODY}
     &{rsp}=  Create Mock Response	headers="Content-Type: application/json"  status_code=204
     Create Mock Expectation  ${req}  ${rsp}
-    Sleep  ${sleep_interval}
     Log  Verifying results
-    Verify Mock Expectation  ${req}
+    Wait Until Keyword Succeeds    ${sleep_interval}    Verify Mock Expectation    ${req}
     Log  Cleaning the endpoint
     Clear Requests  ${notification_ep}
 
 Test a notification end point
+    [Documentation]    Test ID: 7.4.5.4
+    ...    Test title: Test a notification end point
+    ...    Test objective: The objective is to allow the server to test the notification endpoint that is provided by the client, e.g. during subscription
+    ...    Pre-conditions: 
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:  
     log    The GET method allows the server to test the notification endpoint
-    &{req}=  Create Mock Request Matcher    GET  ${notification_ep}    
-    &{rsp}=  Create Mock Response	headers="Content-Type: application/json"  status_code=204
-    Create Mock Expectation  ${req}  ${rsp}
-    Sleep  ${sleep_interval}
-    Verify Mock Expectation  ${req}
-    Clear Requests  ${notification_ep}
+    Set Headers  {"Accept":"${ACCEPT}"}  
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
+    Get    ${notification_ep}
+    Log    Validate Status code
+    Integer    response status    204
+    Log    Validation OK
 
 PUT notification - Method not implemented
     log    Trying to perform a PUT. This method should not be implemented
@@ -87,4 +113,4 @@ DELETE subscriptions - Method not implemented
 Create Sessions
     Start Process  java  -jar  ../../bin/mockserver-netty-5.3.0-jar-with-dependencies.jar  -serverPort  ${notification_port}  alias=mockInstance
     Wait For Process  handle=mockInstance  timeout=5s  on_timeout=continue
-    Create Mock Session  ${CONSUMER_SCHEMA}://${CONSUMER_HOST}:${notification_port}     #The API producer is set to NFVO according to SOL003-7.3.4
\ No newline at end of file
+    Create Mock Session  ${CONSUMER_SCHEMA}://${CONSUMER_HOST}:${notification_port}     #The API producer is set to NFVO according to SOL002-7.3.4
\ No newline at end of file
diff --git a/SOL002/VNFFaultManagement-API/Subscriptions.robot b/SOL002/VNFFaultManagement-API/Subscriptions.robot
index 7671246a..a2e86ca3 100644
--- a/SOL002/VNFFaultManagement-API/Subscriptions.robot
+++ b/SOL002/VNFFaultManagement-API/Subscriptions.robot
@@ -8,6 +8,14 @@ Library    JSONSchemaLibrary    schemas/
 
 *** Test Cases ***
 Create a new subscription
+    [Documentation]    Test ID: 7.4.5.1
+    ...    Test title: Create a new alarm subscription
+    ...    Test objective: The objective is to create a new subscription.
+    ...    Pre-conditions: no subscription with the same filter and callbackUri exists
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     Log    Create subscription instance by POST to ${apiRoot}/${apiName}/${apiVersion}/subscriptions
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
@@ -26,6 +34,14 @@ Create a new subscription
     Log    Validation OK
 
 Create a new Subscription - DUPLICATION
+     [Documentation]    Test ID: 7.4.5.2
+    ...    Test title: Create a new alarm subscription - DUPLICATION
+    ...    Test objective: The objective is to create a new subscription.
+    ...    Pre-conditions: subscription with the same filter and callbackUri exists
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: the VNFM allows creating a subscription resource if another subscription resource with the same filter and callbackUri already exists
+    ...    Post-Conditions: 
     Log    Trying to create a subscription with an already created content
     Pass Execution If    ${NVFM_DUPLICATION} == 0    NVFO is not permitting duplication. Skipping the test
     Set Headers    {"Accept": "${ACCEPT}"}
@@ -43,6 +59,14 @@ Create a new Subscription - DUPLICATION
     Log    Validation OK
 
 Create a new Subscription - NO-DUPLICATION
+    [Documentation]    Test ID: 7.4.5.3
+    ...    Test title: Create a new alarm subscription - NO DUPLICATION
+    ...    Test objective: The objective is to create a new subscription.
+    ...    Pre-conditions: subscription with the same filter and callbackUri exists
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: the VNFM decides to not create a duplicate subscription resource 
+    ...    Post-Conditions:
     Log    Trying to create a subscription with an already created content
     Pass Execution If    ${NVFM_DUPLICATION} == 1    VNFM permits duplication. Skipping the test
     Set Headers    {"Accept": "${ACCEPT}"}
@@ -57,6 +81,14 @@ Create a new Subscription - NO-DUPLICATION
     Log    Validation OK
 
 GET Subscriptions
+    [Documentation]    Test ID: 7.4.5.4
+    ...    Test title: Retrieve a list of alarm subscriptions
+    ...    Test objective: The objective is to retrieve the list of active subscriptions
+    ...    Pre-conditions: 
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability:  
+    ...    Post-Conditions: 
     Log    Get the list of active subscriptions
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
@@ -71,6 +103,14 @@ GET Subscriptions
     Log    Validation OK
 
 GET Subscription - Filter
+    [Documentation]    Test ID: 7.4.5.5
+    ...    Test title: Retrieve a list of alarm subscriptions
+    ...    Test objective: The objective is to retrieve the list of active subscriptions with filter
+    ...    Pre-conditions: 
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability:  
+    ...    Post-Conditions: 
     Log    Get the list of active subscriptions using a filter
     Set Headers    {"Accept": "${ACCEPT}"}
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
@@ -83,6 +123,14 @@ GET Subscription - Filter
     Log    Validation OK
     
 GET subscriptions - Bad Request Invalid attribute-based filtering parameters
+    [Documentation]    Test ID: 7.4.5.5-1
+    ...    Test title: Retrieve a list of alarm subscriptions
+    ...    Test objective: The objective is to retrieve the list of active subscriptions with Invalid attribute-based filtering parameters
+    ...    Pre-conditions: 
+    ...    Reference: section 7.4.5 - SOL002 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability:  
+    ...    Post-Conditions: 
     Log    Get the list of active subscriptions using an invalid filter
     Set Headers    {"Accept": "${ACCEPT}"}
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
diff --git a/SOL002/VNFFaultManagement-API/environment/variables.txt b/SOL002/VNFFaultManagement-API/environment/variables.txt
index 7bba5b60..1202276c 100644
--- a/SOL002/VNFFaultManagement-API/environment/variables.txt
+++ b/SOL002/VNFFaultManagement-API/environment/variables.txt
@@ -39,4 +39,5 @@ ${notification_port}    9091
 ${AlarmNotification}    {}
 ${AlarmClearedNotification}    {}
 ${AlarmListRebuiltNotification}    {}
-${PerceivedSeverity}    CRITICAL
\ No newline at end of file
+${PerceivedSeverity}    CRITICAL
+${sleep_interval}    20s
\ No newline at end of file
diff --git a/SOL003/VNFFaultManagement-API/IndividualSubscription.robot b/SOL003/VNFFaultManagement-API/IndividualSubscription.robot
index a985d639..45e735fd 100644
--- a/SOL003/VNFFaultManagement-API/IndividualSubscription.robot
+++ b/SOL003/VNFFaultManagement-API/IndividualSubscription.robot
@@ -19,7 +19,7 @@ Post Individual Subscription - Method not implemented
     Integer    response status    405
 
 Get Information about an individual subscription
-    [Documentation]    Test ID: 7.4.4.5
+    [Documentation]    Test ID: 7.4.5.1
     ...    Test title: Retrieve the alarm subscriptions
     ...    Test objective: The objective is to read an individual subscription for VNF alarms subscribed by the client
     ...    Pre-conditions: The subscription with the given id exists
diff --git a/SOL003/VNFLifecycleOperationGranting-API/Grants.robot b/SOL003/VNFLifecycleOperationGranting-API/Grants.robot
index be9b0956..2c0471c1 100644
--- a/SOL003/VNFLifecycleOperationGranting-API/Grants.robot
+++ b/SOL003/VNFLifecycleOperationGranting-API/Grants.robot
@@ -8,45 +8,54 @@ Library    JSONSchemaLibrary    schemas/
 Documentation    This resource represents grants. The client can use this resource to obtain permission
 ...     from the NFVO to perform a particular VNF lifecycle operation.
 
+*** Variables ***
+${response}    {}
+
 *** Test Cases ***
-Create a new Grant - Synchronous mode
+Request a new Grant - Synchronous mode
+    [Documentation]    Test ID: 9.4.2.1
+    ...    Test title: Requests a grant for a particular VNF lifecycle operation - Synchronous mode
+    ...    Test objective: The objective is to request a grant for a particular VNF lifecycle operation 
+    ...    Pre-conditions: 
+    ...    Reference: section 9.4.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: The NFVO can decide immediately what to respond to a grant request
+    ...    Post-Conditions: The grant information is available to the VNFM.
     Log    Request a new Grant for a VNF LCM operation by POST to ${apiRoot}/${apiName}/${apiVersion}/grants
     Pass Execution If    ${SYNC_MODE} == 0    The Granting process is asynchronous mode. Skipping the test
-    Set Headers  {"Accept":"${ACCEPT}"}  
-    Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
-    ${body}=    Get File    json/grantRequest.json
-    Post    ${apiRoot}/${apiName}/${apiVersion}/grants    ${body}
-    Integer    response status    201
-    Log    Status code validated 
-    ${headers}=    Output    response headers
-    Should Contain    ${headers}    Location
-    ${contentType}=    Output    response headers Content-Type
-    Should Contain    ${contentType}    ${CONTENT_TYPE}
-    ${result}=    Output    response body
-    ${json}=    evaluate    json.loads('''${result}''')    json
-    Validate Json    grant.schema.json    ${json}
+    Send Request Grant Request
+    Check HTTP Response Status Code Is    201
+    Check HTTP Response Header Contains    Location
+    Check HTTP Response Body Json Schema Is    grant.schema.json
     Log    Validation OK
 
-Create a new Grant - Asynchronous mode
+Request a new Grant - Asynchronous mode
+    [Documentation]    Test ID: 9.4.2.2
+    ...    Test title: Requests a grant for a particular VNF lifecycle operation - Asynchronous mode
+    ...    Test objective: The objective is to request a grant for a particular VNF lifecycle operation 
+    ...    Pre-conditions: 
+    ...    Reference: section 9.4.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: The NFVO can not decide immediately what to respond to a grant request
+    ...    Post-Conditions: The grant information is available to the VNFM.
     Log    Request a new Grant for a VNF LCM operation by POST to ${apiRoot}/${apiName}/${apiVersion}/grants
     Pass Execution If    ${SYNC_MODE} == 1    The Granting process is synchronous mode. Skipping the test
-    Set Headers    {"Accept": "${ACCEPT}"}
-    Set Headers    {"Content-Type": "${CONTENT_TYPE}"}
-    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-    ${body}=    Get File    json/grantRequest.json
-    Post    ${apiRoot}/${apiName}/${apiVersion}/grants    ${body}
-    Output    response
-    Integer    response status    202
-    Log    Status code validated
-    ${headers}=    Output    response headers
-    Should Contain    ${headers}    Location
-    ${contentType}=    Output    response headers Content-Type
-    Should Contain    ${contentType}    ${CONTENT_TYPE}
+    Send Request Grant Request
+    Check HTTP Response Status Code Is    202
+    Check HTTP Response Header Contains    Location
+    Check HTTP Response Body Json Schema Is    grant.schema.json
+    Wait Until Keyword Succeeds    2 min   10 sec    Get an individual grant - Successful
     Log    Validation OK
 
-Create a new Grant - Forbidden
-    # TODO: How to set up the pre-condition for this test?
+Request a new Grant - Forbidden
+    [Documentation]    Test ID: 9.4.2.3
+    ...    Test title: Requests a grant for a particular VNF lifecycle operation - Forbidden
+    ...    Test objective: The objective is to request a grant for a particular VNF lifecycle operation 
+    ...    Pre-conditions: The grant should not be accorded
+    ...    Reference: section 9.4.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     Log    Request a new Grant for a VNF LCM operation by POST to ${apiRoot}/${apiName}/${apiVersion}/grants
     Log    The grant request should be rejected
     Set Headers    {"Accept": "${ACCEPT}"}
@@ -56,7 +65,7 @@ Create a new Grant - Forbidden
     Post    ${apiRoot}/${apiName}/${apiVersion}/grants    ${body}
     Integer    response status    403
     Log    Status code validated
-     ${problemDetails}=    Output    response body
+    ${problemDetails}=    Output    response body
     ${json}=    evaluate    json.loads('''${problemDetails}''')    json
     Validate Json    ProblemDetails.schema.json    ${json}
     Log    Validation OK
@@ -93,4 +102,41 @@ DELETE Grants - Method not implemented
     Delete    ${apiRoot}/${apiName}/${apiVersion}/grants
     Log    Validate Status code
     Integer    response status    405
+    
+    
+*** Keywords ***
+Send Request Grant Request
+    Set Headers    {"Accept": "${ACCEPT}"}
+    Set Headers    {"Content-Type": "${CONTENT_TYPE}"}
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
+    ${body}=    Get File    json/grantRequest.json
+    ${response}=    Post    ${apiRoot}/${apiName}/${apiVersion}/grants    ${body}
+
+Check HTTP Response Status Code Is
+    [Arguments]    ${expected_status}    
+    Should Be Equal    ${response.status_code}    ${expected_status}
+    Log    Status code validated
+
+Check HTTP Response Header Contains
+    [Arguments]    ${CONTENT_TYPE}
+    Should Contain    ${response.headers}    ${CONTENT_TYPE}
+    Log    Header is present
+    
+Check HTTP Response Body Json Schema Is
+    [Arguments]    ${schema}
+    ${json}=    evaluate    json.loads('''${response.body}''')    json
+    Validate Json    ${schema}    ${json}
+    Log    Json Schema Validation OK
+    
+Get an individual grant - Successful
+    log    Trying to read an individual grant
+    Set Headers    {"Accept":"${ACCEPT}"}  
+    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
+    Get    ${response.headers.Location}
+    Log    Validate Status code
+    Integer    response status    200
+    ${result}=    Output    response body
+    ${json}=    evaluate    json.loads('''${result}''')    json
+    Validate Json    grant.schema.json    ${json}
+    Log    Validation OK
     
\ No newline at end of file
diff --git a/SOL003/VNFLifecycleOperationGranting-API/IndividualGrant.robot b/SOL003/VNFLifecycleOperationGranting-API/IndividualGrant.robot
index fd2e9a0b..5e1cce6b 100644
--- a/SOL003/VNFLifecycleOperationGranting-API/IndividualGrant.robot
+++ b/SOL003/VNFLifecycleOperationGranting-API/IndividualGrant.robot
@@ -20,7 +20,14 @@ Post Individual Grant - Method not implemented
     Integer    response status    405
 
 Get an individual grant - Successful
-    # TODO: How to set up the precondition?
+    [Documentation]    Test ID: 9.4.3.1
+    ...    Test title: Requests a grant for a particular VNF lifecycle operation - Successful
+    ...    Test objective: The objective is to request a grant for a particular VNF lifecycle operation 
+    ...    Pre-conditions: The related grant information is available to the VNFM
+    ...    Reference: section 9.4.3 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     log    Trying to read an individual grant
     Set Headers    {"Accept":"${ACCEPT}"}  
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
@@ -35,7 +42,14 @@ Get an individual grant - Successful
     Log    Validation OK
     
 Get an individual grant - Process ongoing
-    # TODO: How to set up the precondition?
+    [Documentation]    Test ID: 9.4.3.2
+    ...    Test title: Requests a grant for a particular VNF lifecycle operation - Process ongoing
+    ...    Test objective: The objective is to request a grant for a particular VNF lifecycle operation 
+    ...    Pre-conditions: The process of creating the grant is ongoing, no grant is available yet.
+    ...    Reference: section 9.4.3 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     log    Trying to read an individual grant
     Set Headers    {"Accept":"${ACCEPT}"}  
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
@@ -44,7 +58,14 @@ Get an individual grant - Process ongoing
     Integer    response status    202
 
 Get an individual grant - grant rejected
-    # TODO: How to set up the precondition?
+    [Documentation]    Test ID: 9.4.3.3
+    ...    Test title: Requests a grant for a particular VNF lifecycle operation - grant rejected
+    ...    Test objective: The objective is to request a grant for a particular VNF lifecycle operation 
+    ...    Pre-conditions: The related grant is rejected
+    ...    Reference: section 9.4.3 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     log    Trying to read an individual grant
     Set Headers    {"Accept":"${ACCEPT}"}  
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
diff --git a/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/IndividualSubscription.robot b/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/IndividualSubscription.robot
index 65976372..6e1ea344 100644
--- a/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/IndividualSubscription.robot
+++ b/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/IndividualSubscription.robot
@@ -19,6 +19,14 @@ Post Individual Subscription - Method not implemented
     Integer    response status    405
 
 Get Information about an individual subscription
+    [Documentation]    Test ID: 11.4.3.1
+    ...    Test title: Retrieve the resource quota subscriptions
+    ...    Test objective: The objective is to read an individual subscription for resource quota subscribed by the client
+    ...    Pre-conditions: The subscription with the given id exists
+    ...    Reference: section 11.4.3 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability:  
+    ...    Post-Conditions: 
     log    Trying to get information about an individual subscription
     Set Headers    {"Accept":"${ACCEPT}"}  
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
diff --git a/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/NotificationEndpoint.robot b/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/NotificationEndpoint.robot
index bfec540c..57870aef 100644
--- a/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/NotificationEndpoint.robot
+++ b/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/NotificationEndpoint.robot
@@ -10,6 +10,14 @@ ${sleep_interval}    20s
 
 *** Test Cases ***
 Deliver a notification - Vr Quota Availibility
+    [Documentation]    Test ID: 11.4.4.1
+    ...    Test title: Deliver a notification - Vr Quota Availibility
+    ...    Test objective: The objective is to notify related to the availability of the virtualised resources quota.
+    ...    Pre-conditions: The VNF has subscribed to the Vr Quota Availibility resource
+    ...    Reference: section 11.4.4 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions:  
     log    The POST method delivers a notification from the server to the client.
     ${json}=	Get File	schemas/VrQuotaAvailNotification.schema.json
     ${BODY}=	evaluate	json.loads('''${json}''')	json
diff --git a/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/Subscriptions.robot b/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/Subscriptions.robot
index b5b22e67..ee3e1cde 100644
--- a/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/Subscriptions.robot
+++ b/SOL003/VirtualisedResourcesQuotaAvailableNotification-API/Subscriptions.robot
@@ -9,6 +9,14 @@ Library    JSONSchemaLibrary    schemas/
 
 *** Test Cases ***
 Create a new subscription
+    [Documentation]    Test ID: 11.4.2.1
+    ...    Test title: Create a new subscription related to the availability of the virtualised resources quotas
+    ...    Test objective: The objective is to create a new subscription.
+    ...    Pre-conditions: no subscription with the same filter and callbackUri exists
+    ...    Reference: section 11.4.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: 
+    ...    Post-Conditions: 
     Log    Create subscription instance by POST to ${apiRoot}/${apiName}/${apiVersion}/subscriptions
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
@@ -27,6 +35,14 @@ Create a new subscription
     Log    Validation OK
 
 Create a new Subscription - DUPLICATION
+    [Documentation]    Test ID: 11.4.2.2
+    ...    Test title: Create a new resource quota subscription - DUPLICATION
+    ...    Test objective: The objective is to create a new subscription.
+    ...    Pre-conditions: subscription with the same filter and callbackUri exists
+    ...    Reference: section 7.4.4 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: the VNFM allows creating a subscription resource if another subscription resource with the same filter and callbackUri already exists
+    ...    Post-Conditions: 
     Log    Trying to create a subscription with an already created content
     Pass Execution If    ${NFVO_DUPLICATION} == 0    NVFO is not permitting duplication. Skipping the test
     Set Headers    {"Accept": "${ACCEPT}"}
@@ -44,6 +60,14 @@ Create a new Subscription - DUPLICATION
     Log    Validation OK
 
 Create a new Subscription - NO-DUPLICATION
+    [Documentation]    Test ID: 11.4.2.3
+    ...    Test title: Create a new resource quota subscription - NO DUPLICATION
+    ...    Test objective: The objective is to create a new subscription.
+    ...    Pre-conditions: subscription with the same filter and callbackUri exists
+    ...    Reference: section 11.4.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability: the VNFM decides to not create a duplicate subscription resource 
+    ...    Post-Conditions: 
     Log    Trying to create a subscription with an already created content
     Pass Execution If    ${NFVO_DUPLICATION} == 1    VNFM permits duplication. Skipping the test
     Set Headers    {"Accept": "${ACCEPT}"}
@@ -58,6 +82,14 @@ Create a new Subscription - NO-DUPLICATION
     Log    Validation OK
 
 GET Subscriptions
+    [Documentation]    Test ID: 11.4.2.4
+    ...    Test title: Retrieve a list of resource quota subscriptions
+    ...    Test objective: The objective is to retrieve the list of active subscriptions
+    ...    Pre-conditions: 
+    ...    Reference: section 11.4.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability:  
+    ...    Post-Conditions: 
     Log    Get the list of active subscriptions
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
@@ -72,6 +104,14 @@ GET Subscriptions
     Log    Validation OK
 
 GET Subscription - Filter
+    [Documentation]    Test ID: 11.4.2.5
+    ...    Test title: Retrieve a list of resource quota subscriptions
+    ...    Test objective: The objective is to retrieve the list of active subscriptions with filter
+    ...    Pre-conditions: 
+    ...    Reference: section 11.4.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability:  
+    ...    Post-Conditions: 
     Log    Get the list of active subscriptions using a filter
     Set Headers    {"Accept": "${ACCEPT}"}
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
@@ -84,6 +124,14 @@ GET Subscription - Filter
     Log    Validation OK
     
 GET subscriptions - Bad Request Invalid attribute-based filtering parameters
+    [Documentation]    Test ID: 11.4.2.5-1
+    ...    Test title: Retrieve a list of resource quota subscriptions
+    ...    Test objective: The objective is to retrieve the list of active subscriptions with Invalid attribute-based filtering parameters
+    ...    Pre-conditions: 
+    ...    Reference: section 11.4.2 - SOL003 v2.4.1
+    ...    Config ID: Config_prod_VNFM
+    ...    Applicability:  
+    ...    Post-Conditions: 
     Log    Get the list of active subscriptions using an invalid filter
     Set Headers    {"Accept": "${ACCEPT}"}
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization": "${AUTHORIZATION}"}
-- 
GitLab