*** Settings ***
Documentation     Test suite for checking the subscriber status after discovery
Suite Setup       Read InputFile
Test Template     Subscriber Status Test
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           ../Framework/utils/utils.py
Library           ../Framework/utils/utils.robot
Library           ../Framework/restApi.py

*** Variables ***
${PATHFILE}       ${CURDIR}/data/Subscriber_TopDown.json
&{input_dict}    mac_address=test    ip_address=test2
&{status}    status=test
${src_ip}         X.X.X.X
${src_gateway}    X.X.X.X
${src_user}       user
${src_pass}       pass
${dst_ip}         X.X.X.X
${dst_gateway}    X.X.X.X
${dst_host_ip}    X.X.X.X

*** Test Cases ***    TYPE                         LISTINDEX
Test Status Subscriber-1
                      STATUS                       0
Change Subscriber status
                      STATUSCHANGE             0
Push MACandIP Subscriber-1
                      PUSH                     0
Test Status Subscriber-2
                      STATUS                       1
Change Subscriber-2 status
                      STATUSCHANGE             1
Push MACandIP Subscriber-2
                      PUSH                     1

*** Keywords ***
Read InputFile
    ${SubscriberList}=    utils.jsonToList    ${PATHFILE}   SubscriberInfo 
    Set Suite Variable    ${slist}    ${SubscriberList}
    Set Global Variable    ${Subscriber_Id}    ${EMPTY}
    Set Global Variable    ${status}    ${EMPTY}

Subscriber Status Test
    [Arguments]    ${type}    ${listIndex}
    Run Keyword If    "${type}" == "PUSH"    Push MAC and IP For Subscriber    ${listIndex}
    Run Keyword If    "${type}" == "STATUS"    Wait Until Keyword Succeeds    60s    5s    Subscriber Status Check    ${listIndex}
    Run Keyword If    "${type}" == "STATUSCHANGE"    Subscriber Status Change   ${listIndex}

Subscriber Status Check
    [Arguments]    ${listIndex}
    Set Global Variable    ${Subscriber_Id}    ${EMPTY}
    Log    ${Subscriber_Id}
    ${json_result}=    restApi.ApiGet    VOLT_SUBSCRIBER
    Log    ${json_result}
    ${SubscriberList} =    Get Variable Value    ${slist}
    ${SubscriberDict}=    utils.listToDict    ${SubscriberList}    ${listIndex}
    Log    ${SubscriberDict}
    ${onu_device}=    utils.getFieldValueFromDict    ${subscriberDict}   onu_device
    ${json_result_list}=    Get From dictionary    ${json_result}    items
    ${getJsonDict}=    utils.getDictFromListOfDict    ${json_result_list}    onu_device    ${onu_device}
    ${status}=	Get From Dictionary    ${getJsonDict}    status
    ${Subscriber_Id}=    Get From Dictionary    ${getJsonDict}   id
    Set Global Variable    ${Subscriber_Id}
    Should Be Equal    ${status}    awaiting_auth
    Wait Until Keyword Succeeds    300s    5s    Test Ping    FAIL    ${src_user}    ${src_pass}    ${dst_ip}
    #Set Global Variable    ${Subscriber_Id}

Subscriber Status Change
    [Arguments]    ${listIndex}
    ${status}=    Create Dictionary    status=enabled
    ${api_result_status}=    restApi.ApiChameleonPut    VOLT_SUBSCRIBER    ${status}    ${Subscriber_Id}
    Should Be True    ${api_result_status}
    Wait Until Keyword Succeeds    300s    5s    Test Ping    PASS    ${src_user}    ${src_pass}    ${dst_ip}

Push MAC and IP For Subscriber
    [Arguments]    ${listIndex}
    ${SubscriberList} =    Get Variable Value    ${slist}
    ${SubscriberDict}=    utils.listToDict    ${SubscriberList}    ${listIndex}
    ${mac_address}=    utils.getFieldValueFromDict    ${subscriberDict}   mac_address
    ${ip_address}=    utils.getFieldValueFromDict    ${subscriberDict}   ip_address
    ${input_dict}=    Create Dictionary    mac_address=${mac_address}    ip_address=${ip_address}
    ${api_result_status}=    restApi.ApiChameleonPut    VOLT_SUBSCRIBER    ${input_dict}    ${Subscriber_Id}
    Should Be True    ${api_result_status}
