*** Settings ***
Documentation     Test suite for end-end service chain validation for RCORD Lite Profile (without hardware vSG instances)
Suite Setup       Read InputFile
Test Template     Service Chain Validation For Subscriber
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           CORDRobot
Library           ImportResource  resources=CORDRobot

*** Variables ***
${PATHFILE}       ${CURDIR}/data/RCORDLite_Subscriber.json

*** Test Cases ***    TYPE                 LISTINDEX
Test Create Subscriber-1
                      SUBSCRIBER_CREATE    0

Test Create Subscriber-2
                      SUBSCRIBER_CREATE    1

Test Create Subscriber-3
                      SUBSCRIBER_CREATE    2

*** Keywords ***
Read InputFile
    ${subscriberList} =    CORDRobot.jsonToList    ${PATHFILE}    SubscriberInfo
    Set Suite Variable    ${slist}    ${subscriberList}
    @{instanceList}=    Create List
    Set Suite Variable    @{instanceList}

Service Chain Validation For Subscriber
    [Arguments]    ${type}    ${listIndex}
    Run Keyword If    "${type}" == "SUBSCRIBER_CREATE"    Test Post Subscriber Create    ${listIndex}

Test Post Subscriber Create
    [Arguments]    ${listIndex}
    ${subscriberList} =    Get Variable Value    ${slist}
    ${subscriberDict}=    CORDRobot.listToDict    ${subscriberList}    ${listIndex}
    ${api_result_status}   ${api_result_json}=    CORDRobot.ApiPostReturnJson    VOLT_SUBSCRIBER    ${subscriberDict}
    Sleep    90
    Should Be True    ${api_result_status}
    ${Subscriber_Id}=    Get From Dictionary    ${api_result_json}    id
    ${json_result}=    CORDRobot.ApiChameleonGet    VOLT_SUBSCRIBER    ${Subscriber_Id}
    Log    ${json_result}
    ${result}=    CORDRobot.compare_dict    ${subscriberDict}    ${json_result}
    Should Be True    ${result}
    ${instanceList}    Create List
    # Retrieve Subscribed_links_id from Posted Subscriber
    ${subscribed_links_ids_list}=    CORDRobot.getFieldValueFromDict    ${json_result}    subscribed_links_ids
    ${subscribed_links_ids}=    Get From List    ${subscribed_links_ids_list}    0
    # Retrieve Provided_Service_Instance_Id from "ServiceInstanceLinks"
    ${getServiceLink}=    CORDRobot.ApiChameleonGet    CH_CORE_SERVICELINK    ${subscribed_links_ids}
    ${provider_service_instance_id}=    Get From Dictionary    ${getServiceLink}    provider_service_instance_id
    # RETRIEVE VOLT OBJECT USING PROVIDER INSTANCE ID   
    ${getVoltDict}=    CORDRobot.ApiChameleonGet    VOLT_TENANT    ${provider_service_instance_id}
    # RETRIEVE SUBSCRIBED_LINKS_IDS FROM THE VOLT DICTIONARY
    ${subscribed_links_ids_list}=    CORDRobot.getFieldValueFromDict    ${getVoltDict}    subscribed_links_ids
    ${subscribed_links_ids}=    Get From List    ${subscribed_links_ids_list}    0
    # RETRIEVE PROVIDED_SERVICE_INSTANCE_ID 
    ${serviceLinkDict}=    CORDRobot.ApiChameleonGet    CH_CORE_SERVICELINK    ${subscribed_links_ids}
    Log    ${serviceLinkDict}
    ${VSGTenant}=    Get From Dictionary    ${serviceLinkDict}    provider_service_instance_id
    # Retrieve VSGTenant to retrieve instance_id
    ${getVSG_result}=    CORDRobot.ApiChameleonGet    HWVSG_TENANT    ${VSGTenant}
    Should Be True    ${getVSG_result}
