From 5e01be6aee8cc5a5f2325711244561e66bf750e0 Mon Sep 17 00:00:00 2001
From: Giacomo Bernini <g.bernini@nextworks.it>
Date: Tue, 11 Dec 2018 19:12:38 +0100
Subject: [PATCH] example of VNF instantiation with HL code

---
 ...iateVNFTaskWithCheckAndNotifications.robot | 152 +++++++++---------
 1 file changed, 73 insertions(+), 79 deletions(-)

diff --git a/SOL003/VNFLifecycleManagement-API_egm/InstantiateVNFTaskWithCheckAndNotifications.robot b/SOL003/VNFLifecycleManagement-API_egm/InstantiateVNFTaskWithCheckAndNotifications.robot
index a93b7bdc..a5ed71a7 100644
--- a/SOL003/VNFLifecycleManagement-API_egm/InstantiateVNFTaskWithCheckAndNotifications.robot
+++ b/SOL003/VNFLifecycleManagement-API_egm/InstantiateVNFTaskWithCheckAndNotifications.robot
@@ -1,5 +1,5 @@
 *** Setting ***
-Suite Setup    Create Sessions
+Suite Setup       Initialize System
 Suite Teardown    Terminate All Processes    kill=true
 Resource    variables.txt
 Library    OperatingSystem
@@ -11,39 +11,25 @@ Library    String
 Library    JSONSchemaLibrary    schemas/
 Library    JSONLibrary
 Library    REST    ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}
-Documentation  
-...    Preconditions:
-...    ...    Mock server's jar should be locally present on the same directory when the test will run
-...    ...    The notification endpoint will be configured on http://localhost:8888/subscribe
-...    ...    Subscription to LCM operations previously performed using as callback_URI: http://localhost:8888/subscribe.
 
+*** Variables ***
+${headers} 
+${vnfLcmOpOccId}
+${response}
+&{notification_request}
+&{notification_response}
+${vnfInstanceId}
 
 *** Test Cases ***
-Create VNFInstance
-    Log    Start Notification handler
-    ${req}=    Start Notification Handler     VnfIdentifierCreationNotification    ${callback_endpoint}
-    Log     Create VNF Instance Resource
-    ${resource_response} =    Create VNF Resource
-    Validate Status Code    ${resource_response.status_code}    201
-    Validate Header    ${resource_response.headers}    Location
-    Validate Header    ${resource_response.headers}    Content-Type
-    Validate JsonSchema    ${resource_response.body}    vnfInstance.schema.json
-    Verify Notification Handler     ${req}
-    Log    Instantiate VNF
-    ${req}=    Start Notification Handler     VnfLcmOperationOccurrenceNotification    ${callback_endpoint}
-    ${instance_response}=    Instantiate VNF   ${resource_response.body.id}
-    Validate Status Code    ${instance_response.status_code}    202
-    Validate Header    ${instance_response.headers}    Location
-    Verify Notification Handler     ${req}
-    Wait Until VNF Instantiated    ${instance_response.headers.Location}
-    Log    Retrieve VNF Instance
-    ${get_response}=    Retrieve VNFinstance    ${instance_response.body.id}
-    Should Not Be Empty    ${get_response}
-    Validate Status Code    ${get_response.status_code}    200
-    Should Be Equal    ${instance_response.body.id}    ${get_response.body.id}    
-    Validate Header    ${get_response.headers}    Content-Type
-    Validate JsonSchema    ${get_response.body}    vnfInstance.schema.json
-    
+VNF Instantiation
+    Send VNF Instantiation Request
+    Check HTTP Response Status Code Is    202
+    Check HTTP Response Header Contains    Location
+    Check Operation Occurrence Id
+    Check Operation Notification STARTING
+    Check Operation Notification PROCESSING
+    Check Operation Notification COMPLETED
+    Check Postcondition  
     
 *** Keywords ***
 Create VNF Resource
@@ -52,83 +38,91 @@ Create VNF Resource
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
     ${body}=    Get File    json/createVnfRequest.json
-    Post    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances    ${body}
-    [Return]    response 
+    ${response}=    Post    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances    ${body}
 
-
-Instantiate VNF
-    [Arguments]    ${vnfInstanceId}
-    Log    Instantiate a vnf Instance
+Send VNF Instantiation Request
+    Log    Instantiate a VNF Instance
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
     ${body}=    Get File    json/instantiateVnfRequest.json
-    Post    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/instantiate    ${body}
-    [Return]    response   
-
+    ${response}=    Post    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/instantiate    ${body}
 
-Validate Status Code
-    [Arguments]    ${curr_status}    ${exp_status}    
-    Should Be Equal    ${curr_status}    ${exp_status}
+Check HTTP Response Status Code Is
+    [Arguments]    ${expected_status}    
+    Should Be Equal    ${response.status_code}    ${expected_status}
     Log    Status code validated 
 
-
-Validate Header
-    [Arguments]    ${headers}    ${CONTENT_TYPE}
-    Should Contain    ${headers}    ${CONTENT_TYPE}
+Check HTTP Response Header Contains
+    [Arguments]    ${CONTENT_TYPE}
+    Should Contain    ${response.headers}    ${CONTENT_TYPE}
     Log    Header is present
 
+Check Operation Occurrence Id
+    ${vnfLcmOpOccId}=    Get Value From Json    ${response.headers}    $..Location
+    Should Not Be Empty    ${vnfLcmOpOccId}
 
-Validate JsonSchema
-    [Arguments]    ${body}    ${schema}
-    ${json}=    evaluate    json.loads('''${body}''')    json
+Check HTTP Response Body Json Schema Is
+    [Arguments]    ${schema}
+    ${json}=    evaluate    json.loads('''${response.body}''')    json
     Validate Json    ${schema}    ${json}
-    Log    Validation OK
+    ${vnfInstanceId}=    ${response.body.id}
+    Log    Json Schema Validation OK
     
-Validate VNF Status
+Check VNF Status
     [Arguments]    ${current}    ${expected}
     Should Be Equal As Strings    ${current}    ${expected}
     Log    VNF Status in the correct status
     
-Retrieve VNFinstance
+Check VNF Instance
     [Arguments]    ${vnfId}
     Set Headers  {"Accept":"${ACCEPT}"}  
     Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
     Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
-    Get    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfId}
-	[Return]	response
-	
+    ${response}=    Get    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfId}
+
 Create Sessions
     Start Process  java  -jar  mockserver-netty-5.3.0-jar-with-dependencies.jar  -serverPort  ${callback_port}  alias=mockInstance
     Wait For Process  handle=mockInstance  timeout=5s  on_timeout=continue
     Create Mock Session  ${callback_uri}:${callback_port}
     
-    
-Start Notification Handler
+Configure Notification Handler
     [Arguments]    ${element}    ${endpoint}
     ${json}=	Get File	schemas/${element}.schema.json
     ${BODY}=	evaluate	json.loads('''${json}''')	json
     Log  Creating mock request and response to handle ${element}
-    &{req}=  Create Mock Request Matcher Schema	POST  ${endpoint}  body=${BODY}
-    &{rsp}=  Create Mock Response Schema	headers="Content-Type: application/json"  status_code=204
-    Create Mock Expectation  ${req}  ${rsp}
-    [Return]    ${req}
-
-Verify Notification Handler
-    [Arguments]    ${request}
-    Verify Mock Expectation  ${request}
-    Clear Requests  ${callback_endpoint}
+    &{notification_request}=  Create Mock Request Matcher Schema	POST  ${endpoint}  body=${BODY}
+    &{notification_response}=  Create Mock Response Schema	headers="Content-Type: application/json"  status_code=204
+    Create Mock Expectation  ${notification_request}  ${notification_response}
     
-Wait Until VNF Instantiated
-    [Arguments]    ${vnfLcmOpOccId}
-    ${req}=    Start Notification Handler     VnfLcmOperationOccurrenceNotification    ${callback_endpoint}
-    :FOR    ${i}    IN RANGE    20
-    \    Sleep    10s
-    \    Verify Mock Expectation     ${req}
-    \    Get  ${vnfLcmOpOccId}
-    \    ${body}=    Output    response body
-    \    Exit For Loop If    ${body.operationState} == COMPLETED
-	Clear Requests  ${callback_endpoint}
+Check Operation Notification
+    [Arguments]    ${status}
+    Configure Notification Handler     VnfLcmOperationOccurrenceNotification    ${callback_endpoint}
+    Wait Until Keyword Succeeds    2 min   10 sec   Verify Notification    ${status}
+    Get    ${vnfLcmOpOccId}
+    ${body}=    Output    response body
+    Should Be Equal    ${body.operationState}   ${status}
+    Clear Requests  ${callback_endpoint}
 
-    
-    
\ No newline at end of file
+Verify Notification COMPLETED
+    [Arguments]    ${status}
+    Verify Mock Expectation     ${notification_request} 
+
+Initialize System
+    Create Sessions
+    Configure Notification Handler     VnfIdentifierCreationNotification    ${callback_endpoint}
+    Create VNF Resource
+    Check HTTP Response Status Code Is    201
+    Check HTTP Response Header Contains    Location
+    Check HTTP Response Header Contains    ${response.headers}    Content-Type
+    Check HTTP Response Body Json Schema Is    vnfInstance.schema.json
+
+Check Postcondition
+    Log    Retrieve VNF Instance
+    Check VNF Instance    ${vnfInstanceId}
+    Should Not Be Empty    ${response}
+    Check HTTP Status Code Is    200
+    Should Be Equal    ${response.body.id}    ${vnfInstanceId}    
+    Check HTTP Response Header Contains    Content-Type
+    Check HTTP Response Json Schema    ${response.body}    vnfInstance.schema.json
+    Check VNF Status    ${response.body.instantiationState}    INSTANTIATED 
\ No newline at end of file
-- 
GitLab