|  | *** Settings *** | 
|  | Documentation    Utilities for redfish BIOS attribute operations. | 
|  |  | 
|  | Resource         resource.robot | 
|  | Resource         bmc_redfish_resource.robot | 
|  | Resource         common_utils.robot | 
|  | Resource         utils.robot | 
|  | Library          tftp_update_utils.py | 
|  |  | 
|  |  | 
|  | *** Variables *** | 
|  | ${OS_RUNNING_TIMEOUT}            30 | 
|  |  | 
|  |  | 
|  | *** Keywords *** | 
|  |  | 
|  | Set BIOS Attribute Value And Verify | 
|  |  | 
|  | [Documentation]  Set BIOS attribute handle with attribute value and verify. | 
|  | [Arguments]      ${attr_handle}  ${attr_val}  ${verify}=${True} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # ${attr_handle}    BIOS Attribute handle (e.g. 'vmi_if0_ipv4_method'). | 
|  | # @{attr_val}       Attribute value for the given attribute handle. | 
|  | # ${verify}         Verify the new value. | 
|  |  | 
|  | # Check if the BIOS attribute value type is string. | 
|  | ${type_str}=    Evaluate  isinstance($attr_val, str) | 
|  |  | 
|  | IF  ${type_str} | 
|  | # Handling the case when the BIOS attribute value is an empty string. | 
|  | ${attr_value_length}=  Evaluate  len($attr_val.replace('"', '')) | 
|  | IF  ${attr_value_length} | 
|  | ${value}=  Set Variable  "${attr_val}" | 
|  | ELSE | 
|  | ${value}=  Set Variable  ${attr_val} | 
|  | END | 
|  | ELSE | 
|  | ${value}=  Set Variable  ${attr_val} | 
|  | END | 
|  |  | 
|  | # BIOS attribute with _current are ReadOnly can not be updated. | 
|  | IF  'current' in '${attr_handle}' | 
|  | Log To Console  BIOS attribute with _current are ReadOnly can not be updated !! | 
|  | ELSE | 
|  | Redfish.Patch  ${BIOS_ATTR_SETTINGS_URI}  body={"Attributes":{"${attr_handle}": ${value}}} | 
|  | ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] | 
|  |  | 
|  | IF  '${verify}' == '${True}'  Verify BIOS Attribute  ${attr_handle}  ${attr_val} | 
|  | END | 
|  |  | 
|  |  | 
|  | Set Optional BIOS Attribute Values And Verify | 
|  |  | 
|  | [Documentation]  For the given BIOS attribute handle update with optional | 
|  | ...              attribute values and verify. | 
|  | [Arguments]  ${attr_handle}  @{attr_val_list} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # ${attr_handle}    BIOS Attribute handle (e.g. 'vmi_if0_ipv4_method'). | 
|  | # @{attr_val_list}  List of the attribute values for the given attribute handle. | 
|  | #                   (e.g. ['IPv4Static', 'IPv4DHCP']). | 
|  |  | 
|  | FOR  ${attr}  IN  @{attr_val_list} | 
|  | ${new_attr}=  Evaluate  $attr.replace('"', '') | 
|  | Set BIOS Attribute Value And Verify  ${attr_handle}  ${new_attr} | 
|  | END | 
|  |  | 
|  |  | 
|  | Verify BIOS Attribute | 
|  |  | 
|  | [Documentation]  Verify BIOS attribute value. | 
|  | [Arguments]  ${attr_handle}  ${attr_val} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # ${attr_handle}    BIOS Attribute handle (e.g. 'vmi_if0_ipv4_method'). | 
|  | # ${attr_val}       The expected value for the given attribute handle. | 
|  |  | 
|  | ${output}=  Redfish.Get Attribute  ${BIOS_ATTR_URI}  Attributes | 
|  | ${cmd_rsp_status}=  Run Keyword And Return Status  Should Not Be Empty  ${output['${attr_handle}']} | 
|  | IF  ${cmd_rsp_status} | 
|  | Should Be Equal  ${output['${attr_handle}']}  ${attr_val} | 
|  | END | 
|  |  | 
|  |  | 
|  | Switch And Verify BIOS Attribute Firmware Boot Side | 
|  | [Documentation]  Switch BIOS attribute firmware boot side value to Perm/Temp | 
|  | ...              at host power off state and verify firmware boot side | 
|  | ...              value after BMC reboot. | 
|  | [Arguments]      ${set_fw_boot_side} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # set_fw_boot_side    Firmware boot side optional value Perm/Temp. | 
|  |  | 
|  | # Do host power off. | 
|  | Redfish Power Off  stack_mode=skip  quiet=1 | 
|  |  | 
|  | # Get pre reboot state. | 
|  | ${pre_reboot_state}=  Get Pre Reboot State | 
|  |  | 
|  | # Get fw_boot_side value. | 
|  | # fw_boot_side values are not same. | 
|  |  | 
|  | ${cur_boot_side}=  Redfish.Get Attribute  ${BIOS_ATTR_URI}  Attributes | 
|  |  | 
|  | Log To Console  Current firmware boot side :: ${cur_boot_side["fw_boot_side"]} | 
|  | Log To Console  Given firmware boot side :: ${set_fw_boot_side} | 
|  |  | 
|  | IF  "${cur_boot_side["fw_boot_side_current"]}" == "${set_fw_boot_side}" | 
|  | RETURN  ${True} | 
|  | END | 
|  |  | 
|  | # Set the given firmware boot side value. | 
|  | Set BIOS Attribute Value And Verify  fw_boot_side  ${set_fw_boot_side}  False | 
|  |  | 
|  | # Power on BMC and wait for BMC to take reboot. | 
|  | Log To Console  Perform power on operation & expect BMC to take reboot... | 
|  | Redfish Power Operation  On | 
|  |  | 
|  | Log To Console  Wait for the BMC to take reboot and come back online... | 
|  | Wait For Reboot  start_boot_seconds=${pre_reboot_state['epoch_seconds']} | 
|  | ...  wait_state_check=0 | 
|  |  | 
|  | # Post BMC reboot, host should auto power on back to runtime. | 
|  | Log To Console  BMC rebooted, wait for host to boot... | 
|  | Wait Until Keyword Succeeds  ${OS_RUNNING_TIMEOUT} min  20 sec | 
|  | ...  Is Boot Progress At Any State | 
|  |  | 
|  | # Verify firmware boot side values after BMC reboot. | 
|  | Verify BIOS Attribute  fw_boot_side  ${set_fw_boot_side} | 
|  | Verify BIOS Attribute  fw_boot_side_current  ${set_fw_boot_side} |