xref: /openbmc/openbmc-test-automation/redfish/update_service/test_redfish_bmc_code_update.robot (revision 2104d5f9bca1ab3b460f5255f6093d7b25a13c1a)
1 *** Settings ***
2 Documentation            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 
12 Resource                 ../../lib/resource.robot
13 Resource                 ../../lib/bmc_redfish_resource.robot
14 Resource                 ../../lib/openbmc_ffdc.robot
15 Resource                 ../../lib/common_utils.robot
16 Resource                 ../../lib/code_update_utils.robot
17 Resource                 ../../lib/dump_utils.robot
18 Resource                 ../../lib/logging_utils.robot
19 Resource                 ../../lib/redfish_code_update_utils.robot
20 Resource                 ../../lib/utils.robot
21 Resource                 ../../lib/bmc_redfish_utils.robot
22 Library                  ../../lib/gen_robot_valid.py
23 Library                  ../../lib/tftp_update_utils.py
24 Library                  ../../lib/gen_robot_keyword.py
25 
26 Suite Setup              Suite Setup Execution
27 Suite Teardown           Redfish.Logout
28 Test Setup               Printn
29 Test Teardown            FFDC On Test Case Fail
30 
31 Force Tags               BMC_Code_Update
32 
33 *** Variables ***
34 
35 @{ADMIN}          admin_user  TestPwd123
36 &{USERS}          Administrator=${ADMIN}
37 
38 *** Test Cases ***
39 
40 Redfish Code Update With ApplyTime OnReset
41     [Documentation]  Update the firmware image with ApplyTime of OnReset.
42     [Tags]  Redfish_Code_Update_With_ApplyTime_OnReset
43     [Template]  Redfish Update Firmware
44 
45     # policy
46     OnReset
47 
48 
49 Redfish Code Update With ApplyTime Immediate
50     [Documentation]  Update the firmware image with ApplyTime of Immediate.
51     [Tags]  Redfish_Code_Update_With_ApplyTime_Immediate
52     [Template]  Redfish Update Firmware
53 
54     # policy
55     Immediate
56 
57 
58 Redfish Code Update With Multiple Firmware
59     [Documentation]  Update the firmware image with ApplyTime of Immediate.
60     [Tags]  Redfish_Code_Update_With_Multiple_Firmware
61     [Template]  Redfish Multiple Upload Image And Check Progress State
62 
63     # policy   image_file_path     alternate_image_file_path
64     Immediate  ${IMAGE_FILE_PATH}  ${ALTERNATE_IMAGE_FILE_PATH}
65 
66 
67 Verify If The Modified Admin Credential Is Valid Post Image Switched To Backup
68     [Documentation]  Verify updated admin credential remain same post switch to back up image.
69     [Tags]  Verify_If_The_Modified_Admin_Credential_Is_Valid_Post_Image_Switched_To_Backup
70     [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
71     [Teardown]  Run Keywords  Redfish.Login  AND  Delete BMC Users Via Redfish  users=${USERS}
72 
73     ${post_code_update_actions}=  Get Post Boot Action
74     ${state}=  Get Pre Reboot State
75     Expire And Update New Password Via Redfish  ${ADMIN[0]}  ${ADMIN[1]}  0penBmc123
76 
77     Redfish.Login
78     # change to backup image and reset the BMC.
79     Switch Backup Firmware Image To Functional
80     Wait For Reboot  start_boot_seconds=${state['epoch_seconds']}
81 
82     # verify modified admin password on backup image.
83     Redfish.Login  admin_user  0penBmc123
84     Redfish.Logout
85 
86 
87 Verify If The Modified Admin Credential Is Valid Post Update
88     [Documentation]  Verify updated admin credential remain same post code update image.
89     [Tags]  Verify_If_The_Modified_Admin_Credential_Is_Valid_Post_Update
90     [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
91     [Teardown]  Run Keywords  Redfish.Login  AND  Delete BMC Users Via Redfish  users=${USERS}
92 
93     Expire And Update New Password Via Redfish  ${ADMIN[0]}  ${ADMIN[1]}  0penBmc123
94 
95     Redfish.Login
96     # Flash latest firmware using redfish.
97     Redfish Update Firmware  OnReset
98 
99     # verify modified admin credentails on latest image.
100     Redfish.Login  admin_user  0penBmc123
101     Redfish.Logout
102 
103 *** Keywords ***
104 
105 Suite Setup Execution
106     [Documentation]  Do the suite setup.
107 
108     Valid File Path  IMAGE_FILE_PATH
109     Redfish.Login
110     Redfish Delete All BMC Dumps
111     Redfish Purge Event Log
112 
113 
114 Redfish Update Firmware
115     [Documentation]  Update the BMC firmware via redfish interface.
116     [Arguments]  ${apply_time}
117 
118     # Description of argument(s):
119     # policy     ApplyTime allowed values (e.g. "OnReset", "Immediate").
120 
121     ${post_code_update_actions}=  Get Post Boot Action
122     ${state}=  Get Pre Reboot State
123     Rprint Vars  state
124     Set ApplyTime  policy=${apply_Time}
125     Redfish Upload Image And Check Progress State
126     Run Key  ${post_code_update_actions['BMC image']['${apply_time}']}
127     Redfish.Login
128     Redfish Verify BMC Version  ${IMAGE_FILE_PATH}
129     Verify Get ApplyTime  ${apply_time}
130 
131 
132 Redfish Multiple Upload Image And Check Progress State
133     [Documentation]  Update multiple BMC firmware via redfish interface and check status.
134     [Arguments]  ${apply_time}  ${IMAGE_FILE_PATH}  ${ALTERNATE_IMAGE_FILE_PATH}
135 
136     # Description of argument(s):
137     # apply_time                 ApplyTime allowed values (e.g. "OnReset", "Immediate").
138     # IMAGE_FILE_PATH            The path to BMC image file.
139     # ALTERNATE_IMAGE_FILE_PATH  The path to alternate BMC image file.
140 
141     ${post_code_update_actions}=  Get Post Boot Action
142     Valid File Path  ALTERNATE_IMAGE_FILE_PATH
143     ${state}=  Get Pre Reboot State
144     Rprint Vars  state
145 
146     Set ApplyTime  policy=${apply_time}
147     Redfish Upload Image  ${REDFISH_BASE_URI}UpdateService  ${IMAGE_FILE_PATH}
148 
149     ${first_image_id}=  Get Latest Image ID
150     Rprint Vars  first_image_id
151     Sleep  5s
152     Redfish Upload Image  ${REDFISH_BASE_URI}UpdateService  ${ALTERNATE_IMAGE_FILE_PATH}
153 
154     ${second_image_id}=  Get Latest Image ID
155     Rprint Vars  second_image_id
156 
157     Check Image Update Progress State
158     ...  match_state='Updating', 'Disabled'  image_id=${second_image_id}
159 
160     Check Image Update Progress State
161     ...  match_state='Updating'  image_id=${first_image_id}
162 
163     Wait Until Keyword Succeeds  8 min  20 sec
164     ...  Check Image Update Progress State
165     ...    match_state='Enabled'  image_id=${first_image_id}
166     Run Key  ${post_code_update_actions['BMC image']['${apply_time}']}
167     Redfish.Login
168     Redfish Verify BMC Version  ${IMAGE_FILE_PATH}
169