InstantiateVNFTaskWithCheckAndNotifications.robot 5.61 KB
Newer Older
Suite Setup       Initialize System
Suite Teardown    Terminate All Processes    kill=true
Resource    environment/variables.txt
Library    OperatingSystem
Library    MockServerLibrary
Library    Process
Library    BuiltIn
Library    Collections
Library    String
Library    JSONSchemaLibrary    schemas/
Library    JSONLibrary
Library    REST    ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}

*** Variables ***
${headers} 
${vnfLcmOpOccId}
${response}
&{notification_request}
&{notification_response}
${vnfInstanceId}
VNF Instantiation
    [Documentation]    Test ID: 5.x.y.x
Giacomo Bernini's avatar
Giacomo Bernini committed
    ...    Test title: VNF Instantiation
    ...    Test objective: The objective is to test the instantiation of a VNF instance
    ...    Pre-conditions: VNF instance resources is created (Test ID: 5.a.b.c)
    ...    Reference: section 5.x.y - SOL003 v2.4.1
    ...    Config ID: Config_prod_VNFM
    ...    Applicability: VNFM is in direct mode
    ...    Post-Conditions: VNF instance in INSTANTIATED state
    Send VNF Instantiation Request
    Check HTTP Response Status Code Is    202
    Check HTTP Response Header Contains    Location
    Check Operation Occurrence Id
Giacomo Bernini's avatar
Giacomo Bernini committed
    Check Operation Notification    STARTING
    Check Operation Notification    PROCESSING
    Check Operation Notification    COMPLETED
    Check Postcondition  
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
    ${response}=    Post    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/instantiate    ${body}
Check HTTP Response Status Code Is
    [Arguments]    ${expected_status}    
    Should Be Equal    ${response.status_code}    ${expected_status}
Check HTTP Response Header Contains
    [Arguments]    ${CONTENT_TYPE}
    Should Contain    ${response.headers}    ${CONTENT_TYPE}
Check Operation Occurrence Id
    ${vnfLcmOpOccId}=    Get Value From Json    ${response.headers}    $..Location
    Should Not Be Empty    ${vnfLcmOpOccId}
Check HTTP Response Body Json Schema Is
    [Arguments]    ${schema}
    ${json}=    evaluate    json.loads('''${response.body}''')    json
    Validate Json    ${schema}    ${json}
Giacomo Bernini's avatar
Giacomo Bernini committed
    ${vnfInstanceId}=    evaluate   ${response.body.id}
    Log    Json Schema Validation OK
Check VNF Status
    [Arguments]    ${current}    ${expected}
    Should Be Equal As Strings    ${current}    ${expected}
    Log    VNF Status in the correct status
    
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}"}
    ${response}=    Get    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfId}

    Start Process  java  -jar  ../../bin/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}
    
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}
    &{notification_request}=  Create Mock Request Matcher	POST  ${endpoint}  body_type="JSON_SCHEMA"    body=${BODY}
    &{notification_response}=  Create Mock Response	headers="Content-Type: application/json"  status_code=204
    Create Mock Expectation  ${notification_request}  ${notification_response}
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}
Giacomo Bernini's avatar
Giacomo Bernini committed
Verify Notification
    [Arguments]    ${status}
    Verify Mock Expectation     ${notification_request} 

Giacomo Bernini's avatar
Giacomo Bernini committed
Create VNF Resource
    Log    Create VNF instance by POST to ${apiRoot}/${apiName}/${apiVersion}/vnf_instances
    Set Headers  {"Accept":"${ACCEPT}"}  
    Set Headers  {"Content-Type": "${CONTENT_TYPE}"}
    Run Keyword If    ${AUTH_USAGE} == 1    Set Headers    {"Authorization":"${AUTHORIZATION}"}
    ${body}=    Get File    json/createVnfRequest.json
    ${response}=    Post    ${apiRoot}/${apiName}/${apiVersion}/vnf_instances    ${body}

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
Giacomo Bernini's avatar
Giacomo Bernini committed
    Check HTTP Response Header Contains    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}
Giacomo Bernini's avatar
Giacomo Bernini committed
    Check HTTP Response Status Code Is    200
    Should Be Equal    ${response.body.id}    ${vnfInstanceId}    
    Check HTTP Response Header Contains    Content-Type
Giacomo Bernini's avatar
Giacomo Bernini committed
    Check HTTP Response Body Json Schema Is    vnfInstance.schema.json
Giacomo Bernini's avatar
Giacomo Bernini committed
    Check VNF Status    ${response.body.instantiationState}    INSTANTIATED