*** Settings ***
Documentation    This suite test various boot types with boot source.
Resource         ../../lib/resource.robot
Resource         ../../lib/bmc_redfish_resource.robot
Resource         ../../lib/common_utils.robot
Resource         ../../lib/openbmc_ffdc.robot
Resource         ../../lib/ipmi_client.robot

Test Setup       Test Setup Execution
Test Teardown    Test Teardown Execution
Suite Teardown   Suite Teardown Execution

Test Tags       Boot_Devices

*** Variables ***
# Maps for correlating redfish data values to IPMI data values.
# The redfish values are obtained with Redfish.Get or Redfish.Get Properties.
# The corresponding IPMI values are obtained with the "chassis bootparam get
# 5" IPMI command.

# This dictionary maps the redfish 'BootSourceOverrideEnabled' value to the
# corresponding IPMI output value.
&{redfish_ipmi_enabled_map}  Once=Options apply to only next boot
...                          Continuous=Options apply to all future boots
...                          Disabled=Boot Flag Invalid

# This dictionary maps the redfish 'BootSourceOverrideTarget' value to the
# corresponding IPMI output value.
&{redfish_ipmi_target_map}  Hdd=Force Boot from default Hard-Drive
...                         Pxe=Force PXE
...                         Diags=Force Boot from default Hard-Drive, request Safe-Mode
...                         Cd=Force Boot from CD/DVD
...                         BiosSetup=Force Boot into BIOS Setup
...                         None=No override

# This dictionary maps the redfish 'BootSourceOverrideMode' value to the
# corresponding IPMI output value.
&{redfish_ipmi_mode_map}  Legacy=BIOS PC Compatible (legacy) boot
...                       UEFI=BIOS EFI boot

${loop_count}             2

*** Test Cases ***

Verify BMC Redfish Boot Source Override with Enabled Mode As Once
    [Documentation]  Verify BMC Redfish Boot Source Override with Enabled Mode As Once.
    [Tags]           Verify_BMC_Redfish_Boot_Source_Override_with_Enabled_Mode_As_Once
    [Template]  Set And Verify Boot Source Override

    #BootSourceOverrideEnabled    BootSourceOverrideTarget    BootSourceOverrideMode
    Once                          Hdd                         UEFI
    Once                          Pxe                         UEFI
    Once                          Diags                       UEFI
    Once                          Cd                          UEFI
    Once                          BiosSetup                   UEFI
    Once                          None                        UEFI
    Once                          Hdd                         Legacy
    Once                          Pxe                         Legacy
    Once                          Diags                       Legacy
    Once                          Cd                          Legacy
    Once                          BiosSetup                   Legacy
    Once                          None                        Legacy


Verify BMC Redfish Boot Source Override with Enabled Mode As Continuous
    [Documentation]  Verify BMC Redfish Boot Source Override with Enabled Mode As Continuous.
    [Tags]           Verify_BMC_Redfish_Boot_Source_Override_with_Enabled_Mode_As_Continuous
    [Template]  Set And Verify Boot Source Override

    #BootSourceOverrideEnabled    BootSourceOverrideTarget    BootSourceOverrideMode
    Continuous                    Hdd                         UEFI
    Continuous                    Pxe                         UEFI
    Continuous                    Diags                       UEFI
    Continuous                    Cd                          UEFI
    Continuous                    BiosSetup                   UEFI
    Continuous                    None                        UEFI
    Continuous                    Hdd                         Legacy
    Continuous                    Pxe                         Legacy
    Continuous                    Diags                       Legacy
    Continuous                    Cd                          Legacy
    Continuous                    BiosSetup                   Legacy
    Continuous                    None                        Legacy


Verify BMC Redfish Boot Source Override with Enabled Mode As Disabled
    [Documentation]  Verify BMC Redfish Boot Source Override with Enabled Mode As Disabled.
    [Tags]           Verify_BMC_Redfish_Boot_Source_Override_with_Enabled_Mode_As_Disabled
    [Template]  Set And Verify Boot Source Override

    #BootSourceOverrideEnabled    BootSourceOverrideTarget    BootSourceOverrideMode
    Disabled                      Hdd                         UEFI
    Disabled                      Pxe                         UEFI
    Disabled                      Diags                       UEFI
    Disabled                      Cd                          UEFI
    Disabled                      BiosSetup                   UEFI
    Disabled                      None                        UEFI
    Disabled                      Hdd                         Legacy
    Disabled                      Pxe                         Legacy
    Disabled                      Diags                       Legacy
    Disabled                      Cd                          Legacy
    Disabled                      BiosSetup                   Legacy
    Disabled                      None                        Legacy


Verify Boot Source Override Policy Persistency With Enabled Mode As Once After BMC Reboot
    [Documentation]  Verify Boot Source Override Policy Persistency with Enabled Mode As Once After BMC Reboot.
    [Tags]           Verify_Boot_Source_Override_Policy_Persistency_With_Enabled_Mode_As_Once_After_BMC_Reboot
    [Template]  Verify Boot Source Override After BMC Reboot

    #BootSourceOverrideEnabled    BootSourceOverrideTarget    BootSourceOverrideMode
    Once                          Hdd                         UEFI
    Once                          Pxe                         UEFI
    Once                          Diags                       UEFI
    Once                          Cd                          UEFI
    Once                          BiosSetup                   UEFI
    Once                          None                        UEFI
    Once                          Hdd                         Legacy
    Once                          Pxe                         Legacy
    Once                          Diags                       Legacy
    Once                          Cd                          Legacy
    Once                          BiosSetup                   Legacy
    Once                          None                        Legacy


Verify Boot Source Override Policy Persistency With Enabled Mode As Continuous After BMC Reboot
    [Documentation]  Verify Boot Source Override Policy Persistency with Enabled Mode As Continuous After BMC Reboot.
    [Tags]           Verify_Boot_Source_Override_Policy_Persistency_With_Enabled_Mode_As_Continuous_After_BMC_Reboot
    [Template]  Verify Boot Source Override After BMC Reboot

    #BootSourceOverrideEnabled    BootSourceOverrideTarget    BootSourceOverrideMode
    Continuous                    Hdd                         UEFI
    Continuous                    Pxe                         UEFI
    Continuous                    Diags                       UEFI
    Continuous                    Cd                          UEFI
    Continuous                    BiosSetup                   UEFI
    Continuous                    None                        UEFI
    Continuous                    Hdd                         Legacy
    Continuous                    Pxe                         Legacy
    Continuous                    Diags                       Legacy
    Continuous                    Cd                          Legacy
    Continuous                    BiosSetup                   Legacy
    Continuous                    None                        Legacy


Verify Boot Source Override Policy With Enabled Mode As Once After Host Reboot
    [Documentation]  Verify Boot Source Override Policy with Enabled Mode As Once After Host Reboot.
    [Tags]           Verify_Boot_Source_Override_Policy_With_Enabled_Mode_As_Once_After_Host_Reboot
    [Template]  Verify Boot Source Override with Enabled Mode As Once After Host Reboot

    #BootSourceOverrideTarget    BootSourceOverrideMode
    Hdd                         UEFI
    Pxe                         UEFI
    Diags                       UEFI
    Cd                          UEFI
    None                        UEFI
    Hdd                         Legacy
    Pxe                         Legacy
    Diags                       Legacy
    Cd                          Legacy
    None                        Legacy


Verify Boot Source Override Policy With Enabled Mode As Continuous After Host Reboot
    [Documentation]  Verify Boot Source Override Policy With Enabled Mode As Continuous After Host Reboot.
    [Tags]           Verify_Boot_Source_Override_Policy_With_Enabled_Mode_As_Continuous_After_Host_Reboot
    [Template]  Verify Boot Source Override with Enabled Mode As Continuous After Host Reboot

    #BootSourceOverrideTarget    BootSourceOverrideMode
    Hdd                         UEFI
    Pxe                         UEFI
    Diags                       UEFI
    Cd                          UEFI
    None                        UEFI
    Hdd                         Legacy
    Pxe                         Legacy
    Diags                       Legacy
    Cd                          Legacy
    None                        Legacy


Verify Boot Source Override With Enabled Mode As Once After Host Reboot For Bios Setup
    [Documentation]  Verify Boot Source Override with Enabled Mode As Once After Host Reboot For Bios Setup.
    [Tags]           Verify_Boot_Source_Override_With_Enabled_Mode_As_Once_After_Host_Reboot_For_Bios_Setup
    [Template]  Verify Boot Source Override with Enabled Mode As Once After Host Reboot

    #BootSourceOverrideTarget   BootSourceOverrideMode   Biosflag
    BiosSetup                   UEFI                     True
    BiosSetup                   Legacy                   True


Verify Boot Source Override With Enabled Mode As Continuous After Host Reboot For Bios Setup
    [Documentation]  Verify Boot Source Override with Enabled Mode As Continuous After Host Reboot For Bios Setup.
    [Tags]           Verify_Boot_Source_Override_With_Enabled_Mode_As_Continuous_After_Host_Reboot_For_Bios_Setup
    [Template]  Verify Boot Source Override with Enabled Mode As Continuous After Host Reboot

    #BootSourceOverrideTarget   BootSourceOverrideMode   Biosflag
    BiosSetup                   UEFI                     True
    BiosSetup                   Legacy                   True


*** Keywords ***

Set And Verify Boot Source Override
    [Documentation]  Set and Verify Boot source override.
    [Arguments]      ${override_enabled}  ${override_target}  ${override_mode}=UEFI

    # Description of argument(s):
    # override_enabled    Boot source override enable type.
    #                     ('Once', 'Continuous', 'Disabled').
    # override_target     Boot source override target.
    #                     ('Pxe', 'Cd', 'Hdd', 'Diags', 'BiosSetup', 'None').
    # override_mode       Boot source override mode (relevant only for x86 arch).
    #                     ('Legacy', 'UEFI').

    # Example:
    # "Boot": {
    # "BootSourceOverrideEnabled": "Disabled",
    # "BootSourceOverrideMode": "Legacy",
    # "BootSourceOverrideTarget": "None",
    # "BootSourceOverrideTarget@Redfish.AllowableValues": [
    # "None",
    # "Pxe",
    # "Hdd",
    # "Cd",
    # "Diags",
    # "BiosSetup"]}

    # The values set using Redfish are verified via IPMI using the command:
    # chassis bootparam get 5
    # Option 5 returns the boot parameters.
    #
    # Sample output:
    # Boot parameter version: 1
    # Boot parameter 5 is valid/unlocked
    # Boot parameter data: c000000000
    # Boot Flags :
    # - Boot Flag Valid
    # - Options apply to all future boots
    # - BIOS PC Compatible (legacy) boot
    # - Boot Device Selector : No override
    # - Console Redirection control : System Default
    # - BIOS verbosity : Console redirection occurs per BIOS configuration
    #   setting (default)
    # - BIOS Mux Control Override : BIOS uses recommended setting of the mux at
    #   the end of POST

    Redfish Set Boot Default  ${override_enabled}  ${override_target}  ${override_mode}

    ${output}=  Run IPMI Standard Command  chassis bootparam get 5
    Should Contain  ${output}  ${redfish_ipmi_enabled_map['${override_enabled}']}
    Should Contain  ${output}  ${redfish_ipmi_target_map['${override_target}']}
    Run Keyword If  '${PLATFORM_ARCH_TYPE}' == 'x86'
    ...  Should Contain  ${output}  ${redfish_ipmi_mode_map['${override_mode}']}


Verify Boot Source Override After BMC Reboot
    [Documentation]  Verify Boot Source Override After BMC Reboot.
    [Arguments]      ${override_enabled}  ${override_target}  ${override_mode}=UEFI

    # Description of argument(s):
    # override_enabled    Boot source override enable type.
    #                     ('Once', 'Continuous', 'Disabled').
    # override_target     Boot source override target.
    #                     ('Pxe', 'Cd', 'Hdd', 'Diags', 'BiosSetup', 'None').
    # override_mode       Boot source override mode (relevant only for x86 arch).
    #                     ('Legacy', 'UEFI').

    # Example:
    # "Boot": {
    # "BootSourceOverrideEnabled": "Disabled",
    # "BootSourceOverrideMode": "Legacy",
    # "BootSourceOverrideTarget": "None",
    # "BootSourceOverrideTarget@Redfish.AllowableValues": [
    # "None",
    # "Pxe",
    # "Hdd",
    # "Cd",
    # "Diags",
    # "BiosSetup"]}

    # The values set using Redfish are verified via IPMI using the command:
    # chassis bootparam get 5
    # Option 5 returns the boot parameters.
    #
    # Sample output:
    # Boot parameter version: 1
    # Boot parameter 5 is valid/unlocked
    # Boot parameter data: c000000000
    # Boot Flags :
    # - Boot Flag Valid
    # - Options apply to all future boots
    # - BIOS PC Compatible (legacy) boot
    # - Boot Device Selector : No override
    # - Console Redirection control : System Default
    # - BIOS verbosity : Console redirection occurs per BIOS configuration
    #   setting (default)
    # - BIOS Mux Control Override : BIOS uses recommended setting of the mux at
    #   the end of POST

    Redfish Set Boot Default  ${override_enabled}  ${override_target}  ${override_mode}

    Redfish OBMC Reboot (run)

    ${output}=  Run IPMI Standard Command  chassis bootparam get 5
    Should Contain  ${output}  ${redfish_ipmi_enabled_map['${override_enabled}']}
    Should Contain  ${output}  ${redfish_ipmi_target_map['${override_target}']}
    Run Keyword If  '${PLATFORM_ARCH_TYPE}' == 'x86'
    ...  Should Contain  ${output}  ${redfish_ipmi_mode_map['${override_mode}']}


Verify Boot Source Override with Enabled Mode As Once After Host Reboot
    [Documentation]  Verify Boot Source Override with Enabled Mode As Once After Host Reboot.
    [Arguments]      ${override_target}  ${override_mode}=UEFI  ${is_bios_setup}=False

    # Description of argument(s):
    # override_enabled    Boot source override enable type.
    #                     ('Once', 'Continuous', 'Disabled').
    # override_target     Boot source override target.
    #                     ('Pxe', 'Cd', 'Hdd', 'Diags', 'BiosSetup', 'None').
    # override_mode       Boot source override mode (relevant only for x86 arch).
    #                     ('Legacy', 'UEFI').

    # Example:
    # "Boot": {
    # "BootSourceOverrideEnabled": "Disabled",
    # "BootSourceOverrideMode": "Legacy",
    # "BootSourceOverrideTarget": "None",
    # "BootSourceOverrideTarget@Redfish.AllowableValues": [
    # "None",
    # "Pxe",
    # "Hdd",
    # "Cd",
    # "Diags",
    # "BiosSetup"]}

    # The values set using Redfish are verified via IPMI using the command:
    # chassis bootparam get 5
    # Option 5 returns the boot parameters.
    #
    # Sample output:
    # Boot parameter version: 1
    # Boot parameter 5 is valid/unlocked
    # Boot parameter data: c000000000
    # Boot Flags :
    # - Boot Flag Valid
    # - Options apply to all future boots
    # - BIOS PC Compatible (legacy) boot
    # - Boot Device Selector : No override
    # - Console Redirection control : System Default
    # - BIOS verbosity : Console redirection occurs per BIOS configuration
    #   setting (default)
    # - BIOS Mux Control Override : BIOS uses recommended setting of the mux at
    #   the end of POST

    Redfish Set Boot Default  Once  ${override_target}  ${override_mode}

    IF  '${is_bios_setup}' == 'True'
         Repeat Keyword  ${loop_count} times  Host Reboot For Bios Setup
    ELSE
         RF SYS GracefulRestart
         ${output}=  Run IPMI Standard Command  chassis bootparam get 5
         Should Contain  ${output}  ${redfish_ipmi_enabled_map['Once']}
         Should Contain  ${output}  ${redfish_ipmi_target_map['None']}
         IF  '${PLATFORM_ARCH_TYPE}' == 'x86'
             Should Contain  ${output}  ${redfish_ipmi_mode_map['Legacy']}
         END
    END

    ${resp}=  Redfish.Get Attribute  /redfish/v1/Systems/system  Boot
    Should Be Equal As Strings  ${resp["BootSourceOverrideEnabled"]}  Disabled
    Should Be Equal As Strings  ${resp["BootSourceOverrideTarget"]}  None
    Run Keyword If  '${PLATFORM_ARCH_TYPE}' == 'x86'
    ...  Should Be Equal As Strings  ${resp["BootSourceOverrideMode"]}  Legacy


Verify Boot Source Override with Enabled Mode As Continuous After Host Reboot
    [Documentation]  Verify Boot Source Override with Enabled Mode As Continuous After Host Reboot.
    [Arguments]      ${override_target}  ${override_mode}=UEFI  ${is_bios_setup}=False

    # Description of argument(s):
    # override_enabled    Boot source override enable type.
    #                     ('Once', 'Continuous', 'Disabled').
    # override_target     Boot source override target.
    #                     ('Pxe', 'Cd', 'Hdd', 'Diags', 'BiosSetup', 'None').
    # override_mode       Boot source override mode (relevant only for x86 arch).
    #                     ('Legacy', 'UEFI').

    # Example:
    # "Boot": {
    # "BootSourceOverrideEnabled": "Disabled",
    # "BootSourceOverrideMode": "Legacy",
    # "BootSourceOverrideTarget": "None",
    # "BootSourceOverrideTarget@Redfish.AllowableValues": [
    # "None",
    # "Pxe",
    # "Hdd",
    # "Cd",
    # "Diags",
    # "BiosSetup"]}

    # The values set using Redfish are verified via IPMI using the command:
    # chassis bootparam get 5
    # Option 5 returns the boot parameters.
    #
    # Sample output:
    # Boot parameter version: 1
    # Boot parameter 5 is valid/unlocked
    # Boot parameter data: c000000000
    # Boot Flags :
    # - Boot Flag Valid
    # - Options apply to all future boots
    # - BIOS PC Compatible (legacy) boot
    # - Boot Device Selector : No override
    # - Console Redirection control : System Default
    # - BIOS verbosity : Console redirection occurs per BIOS configuration
    #   setting (default)
    # - BIOS Mux Control Override : BIOS uses recommended setting of the mux at
    #   the end of POST

    Redfish Set Boot Default  Continuous  ${override_target}  ${override_mode}

    IF  '${is_bios_setup}' == 'True'
         Repeat Keyword  ${loop_count} times  Host Reboot For Bios Setup
    ELSE
         RF SYS GracefulRestart
         ${output}=  Run IPMI Standard Command  chassis bootparam get 5
         Should Contain  ${output}  ${redfish_ipmi_enabled_map['Continuous']}
         Should Contain  ${output}  ${redfish_ipmi_target_map['${override_target}']}
         IF  '${PLATFORM_ARCH_TYPE}' == 'x86'
             Should Contain  ${output}  ${redfish_ipmi_mode_map['${override_mode}']}
         END
    END

    ${resp}=  Redfish.Get Attribute  /redfish/v1/Systems/system  Boot
    Should Be Equal As Strings  ${resp["BootSourceOverrideEnabled"]}  Continuous
    Should Be Equal As Strings  ${resp["BootSourceOverrideTarget"]}  ${override_target}
    Run Keyword If  '${PLATFORM_ARCH_TYPE}' == 'x86'
    ...  Should Be Equal As Strings  ${resp["BootSourceOverrideMode"]}  ${override_mode}


Host Reboot For Bios Setup
    [Documentation]  Rebooting Host without checking Host state.

    Redfish Power Operation  GracefulRestart

    Sleep  1min


Suite Teardown Execution
    [Documentation]  Do the post suite teardown.

    Redfish.Login
    Set And Verify Boot Source Override  Disabled  None  UEFI
    Redfish.Logout


Test Setup Execution
    [Documentation]  Do test case setup tasks.

    Redfish.Login


Test Teardown Execution
    [Documentation]  Do the post test teardown.

    FFDC On Test Case Fail
    Redfish.Logout
