1*** Settings ***
2Documentation            Update firmware on a target BMC via Redifsh.
3
4# Test Parameters:
5# IMAGE_FILE_PATH        The path to the BMC image file.
6#
7# Firmware update states:
8#     Enabled            Image is installed and either functional or active.
9#     Disabled           Image installation failed or ready for activation.
10#     Updating           Image installation currently in progress.
11
12Resource                 ../../lib/resource.robot
13Resource                 ../../lib/bmc_redfish_resource.robot
14Resource                 ../../lib/openbmc_ffdc.robot
15Resource                 ../../lib/common_utils.robot
16Resource                 ../../lib/code_update_utils.robot
17Resource                 ../../lib/dump_utils.robot
18Resource                 ../../lib/logging_utils.robot
19Resource                 ../../lib/redfish_code_update_utils.robot
20Library                  ../../lib/gen_robot_valid.py
21Library                  ../../lib/tftp_update_utils.py
22
23Suite Setup              Suite Setup Execution
24Suite Teardown           Redfish.Logout
25Test Setup               Printn
26Test Teardown            FFDC On Test Case Fail
27
28Force Tags               BMC_Code_Update
29
30*** Test Cases ***
31
32Redfish Code Update With ApplyTime OnReset
33    [Documentation]  Update the firmaware image with ApplyTime of OnReset.
34    [Tags]  Redfish_Code_Update_With_ApplyTime_OnReset
35    [Template]  Redfish Update Firmware
36
37    # policy
38    OnReset
39
40
41Redfish Code Update With ApplyTime Immediate
42    [Documentation]  Update the firmaware image with ApplyTime of Immediate.
43    [Tags]  Redfish_Code_Update_With_ApplyTime_Immediate
44    [Template]  Redfish Update Firmware
45
46    # policy
47    Immediate
48
49
50Redfish Code Update With Multiple Firmware
51    [Documentation]  Update the firmaware image with ApplyTime of Immediate.
52    [Tags]  Redfish_Code_Update_With_Multiple_Firmware
53    [Template]  Redfish Multiple Upload Image And Check Progress State
54
55    # policy   image_file_path     alternate_image_file_path
56    Immediate  ${IMAGE_FILE_PATH}  ${ALTERNATE_IMAGE_FILE_PATH}
57
58
59*** Keywords ***
60
61Suite Setup Execution
62    [Documentation]  Do the suite setup.
63
64    Valid File Path  IMAGE_FILE_PATH
65    Redfish.Login
66    Delete All BMC Dump
67    Redfish Purge Event Log
68
69
70Redfish Update Firmware
71    [Documentation]  Update the BMC firmware via redfish interface.
72    [Arguments]  ${apply_time}
73
74    # Description of argument(s):
75    # policy     ApplyTime allowed values (e.g. "OnReset", "Immediate").
76
77    ${state}=  Get Pre Reboot State
78    Rprint Vars  state
79
80    Set ApplyTime  policy=${apply_Time}
81    Redfish Upload Image And Check Progress State
82    Reboot BMC And Verify BMC Image
83    ...  ${apply_time}  start_boot_seconds=${state['epoch_seconds']}
84    Verify Get ApplyTime  ${apply_time}
85
86
87Redfish Multiple Upload Image And Check Progress State
88    [Documentation]  Update multiple BMC firmware via redfish interface and check status.
89    [Arguments]  ${apply_time}  ${IMAGE_FILE_PATH}  ${ALTERNATE_IMAGE_FILE_PATH}
90
91    # Description of argument(s):
92    # apply_time                 ApplyTime allowed values (e.g. "OnReset", "Immediate").
93    # IMAGE_FILE_PATH            The path to BMC image file.
94    # ALTERNATE_IMAGE_FILE_PATH  The path to alternate BMC image file.
95
96    Valid File Path  ALTERNATE_IMAGE_FILE_PATH
97    ${state}=  Get Pre Reboot State
98    Rprint Vars  state
99
100    Set ApplyTime  policy=${apply_time}
101    Redfish Upload Image  ${REDFISH_BASE_URI}UpdateService  ${IMAGE_FILE_PATH}
102
103    ${first_image_id}=  Get Latest Image ID
104    Rprint Vars  first_image_id
105    Sleep  5s
106    Redfish Upload Image  ${REDFISH_BASE_URI}UpdateService  ${ALTERNATE_IMAGE_FILE_PATH}
107
108    ${second_image_id}=  Get Latest Image ID
109    Rprint Vars  second_image_id
110
111    Check Image Update Progress State
112    ...  match_state='Updating', 'Disabled'  image_id=${second_image_id}
113
114    Check Image Update Progress State
115    ...  match_state='Updating'  image_id=${first_image_id}
116
117    Wait Until Keyword Succeeds  8 min  20 sec
118    ...  Check Image Update Progress State
119    ...    match_state='Enabled'  image_id=${first_image_id}
120    Reboot BMC And Verify BMC Image  ${apply_time}  start_boot_seconds=${state['epoch_seconds']}
121
122