Skip to content
Snippets Groups Projects
InstantiateVNFTaskWithCheckAndNotifications.robot 5.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • Suite Setup       Initialize System
    
    Suite Teardown    Terminate All Processes    kill=true
    Resource    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
        ...    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
    
        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}
    
        ${vnfInstanceId}=    ${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}
    
    
    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}
        
    
    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 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}
    
    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}
    
    Verify Notification COMPLETED
        [Arguments]    ${status}
        Verify Mock Expectation     ${notification_request} 
    
    
    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
        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