*** Settings ***
Documentation   Test BMC multiple network interface functionalities via GUI.

Resource        ../../lib/gui_resource.robot
Resource        ../../../lib/resource.robot
Resource        ../../../lib/certificate_utils.robot

Suite Setup     Suite Setup Execution
Test Teardown   FFDC On Test Case Fail

*** Variables ***

${bmc_url}                     https://${OPENBMC_HOST}
${bmc_url_1}                   https://${OPENBMC_HOST_1}
${LDAP_FILE_PATH}              ${EMPTY}
${CA_FILE_PATH}                ${EMPTY}

${xpath_add_new_certificate}   //*[contains(text(), ' Add new certificate ')]
${xpath_certificate_type}      //*[@id="certificate-type"]
${xpath_upload_file}           //*[@id="certificate-file"]
${xpath_load_certificate}      //button[text()=' Add ']
${xpath_close_poup}            //*[@class="close ml-auto mb-1"]

*** Test Cases ***

Verify BMC GUI Is Accessible Via Both Network Interfaces
    [Documentation]  Verify BMC GUI is accessible via both network interfaces.
    [Tags]  Verify_BMC_GUI_Is_Accessible_Via_Both_Network_Interfaces
    [Teardown]  Close All Browsers

    Start Virtual Display
    ${browser_ID}=  Open Browser  ${bmc_url}  alias=tab1
    Set Window Size  1920  1080
    ${browser_ID}=  Open Browser  ${bmc_url_1}  alias=tab2
    Set Window Size  1920  1080
    Switch Browser  tab1
    Run Keywords  Login GUI  AND  Logout GUI
    Switch Browser  tab2
    Run Keywords  Login GUI  AND  Logout GUI


Load Certificates Via Eth1 IP Address And Verify
    [Documentation]  Verify ability to load LDAP certificate using eth1 IP address.
    [Tags]  Load_Certificates_Via_Eth1_IP_Address_And_Verify
    [Template]  Load Certificates On BMC Via GUI

    # bmc_url     certificate_type  file_path
    ${bmc_url_1}  Client            ${LDAP_FILE_PATH}
    ${bmc_url_1}  CA                ${CA_FILE_PATH}


*** keywords ***

Suite Setup Execution
    [Documentation]  Do suite setup task.

    Valid Value  OPENBMC_HOST_1

    # Check both interfaces are configured and reachable.
    Ping Host  ${OPENBMC_HOST}
    Ping Host  ${OPENBMC_HOST_1}


Load Certificates On BMC Via GUI
    [Documentation]  Load certificate on BMC via GUI.
    [Arguments]  ${bmc_url}  ${certificate_type}  ${file_path}  ${delete_cert}=${True}
    [Teardown]  Run Keywords  Logout GUI  AND  Close Browser

    # Description of argument(s):
    # bmc_url            Openbmc GUI URL to be open.
    # certificate_type   Certificate type.
    #                    (e.g. "LDAP Certificate" or "CA Certificate").
    # file_path          Certificate file path (e.g. "/home/folder/file.pem").

    ${path}  ${ext}=  Split Extension  ${file_path}
    Run Keyword If  '${certificate_type}' == 'CA' and '${delete_cert}' == '${True}'
    ...  Delete All CA Certificate Via Redfish
    ...  ELSE IF  '${certificate_type}' == 'Client' and '${delete_cert}' == '${True}'
    ...  Delete Certificate Via BMC CLI  ${certificate_type}

    Set Test Variable  ${obmc_gui_url}  https://${OPENBMC_HOST_1}
    Launch Browser And Login GUI
    Navigate To SSL Certificate Page
    Sleep  10s
    Click Element  ${xpath_add_new_certificate}

    Wait Until Page Contains Element  ${xpath_certificate_type}  timeout=20s
    Run Keyword If  '${certificate_type}' == 'CA'
    ...  Select From List By Label  ${xpath_certificate_type}  CA Certificate
    ...  ELSE IF  '${certificate_type}' == 'Client'
    ...  Select From List By Label  ${xpath_certificate_type}  LDAP Certificate

    Choose File  ${xpath_upload_file}  ${file_path}
    Click Element  ${xpath_load_certificate}

    Run Keyword If  '${ext}' !='pem'   Wait Until Page Contains  Error adding certificate.

    Run Keyword If  '${certificate_type}' == 'CA'
    ...  Wait Until Page Contains  Successfully added CA Certificate.
    ...  ELSE IF  '${certificate_type}' == 'Client'
    ...  Wait Until Page Contains  Successfully added LDAP Certificate.
    Click Element  ${xpath_close_poup}


Navigate To SSL Certificate Page
    [Documentation]  Navigate to SSL Certificate page.

    Click Element  ${xpath_secuity_and_accesss_menu}
    Click Element  ${xpath_certificates_sub_menu}
    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  certificates
    Wait Until Element Is Not Visible   ${xpath_page_loading_progress_bar}  timeout=30
