1*** Settings ***
2Documentation            Redfish BMC/Host signed and unsigned code update
3...  over BMC functional signed image.
4
5# Test Parameters:
6# IMAGE_FILE_PATH        The path to the BMC/Host image file.
7#
8# Firmware update states:
9#     Enabled            Image is installed and either functional or active.
10#     Disabled           Image installation failed or ready for activation.
11#     Updating           Image installation currently in progress.
12
13Resource                 ../../lib/resource.robot
14Resource                 ../../lib/bmc_redfish_resource.robot
15Resource                 ../../lib/openbmc_ffdc.robot
16Resource                 ../../lib/common_utils.robot
17Resource                 ../../lib/code_update_utils.robot
18Resource                 ../../lib/redfish_code_update_utils.robot
19Library                  ../../lib/gen_robot_valid.py
20Library                  ../../lib/var_funcs.py
21Library                  ../../lib/gen_robot_keyword.py
22
23Suite Setup              Suite Setup Execution
24Suite Teardown           Redfish.Logout
25Test Setup               Printn
26Test Teardown            FFDC On Test Case Fail
27
28Force Tags               Redfish_Signed_Image_Update
29
30*** Variables ***
31
32${ACTIVATION_WAIT_TIMEOUT}     8 min
33
34*** Test Cases ***
35
36Redfish Signed Code Update
37    [Documentation]  BMC/Host signed code update over functional signed
38    ...  image, when FieldMode is set to true value.
39    [Tags]  Redfish_Signed_Code_Update
40    [Template]  Redfish Signed Firmware Update
41
42    # image_file_path
43    ${IMAGE_FILE_PATH}
44
45
46Redfish Fail Unsigned Code Update
47    [Documentation]  BMC/Host unsigned code update over functional signed
48    ...  image, when Field Mode is set to true to value.
49    [Tags]  Redfish_Fail_Unsigned_Code_Update
50    [Template]  Redfish Unsigned Firmware Update
51
52    # image_file_path
53    ${IMAGE_FILE_PATH}
54
55
56REST Failure When Field Mode Set To Disable
57    [Documentation]  Verify error while disabling field mode from enabled mode.
58    [Tags]  REST_Failure_When_Field_Mode_Set_To_Disable
59
60    ${args}=  Create Dictionary  data=${0}
61    ${resp}=  OpenBMC Post Request  ${SOFTWARE_VERSION_URI}attr/FieldModeEnabled  data=${args}
62    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_METHOD_NOT_ALLOWED}
63
64
65*** Keywords ***
66
67Suite Setup Execution
68    [Documentation]  Do the suite setup.
69
70    Valid File Path  IMAGE_FILE_PATH
71    Enable Field Mode And Verify Unmount
72    Redfish.Login
73    Redfish Delete All BMC Dumps
74    Redfish Purge Event Log
75
76
77Redfish Signed Firmware Update
78    [Documentation]  Update the BMC/Host firmware via redfish interface.
79    [Arguments]  ${image_file_path}
80
81    # Description of argument(s):
82    # IMAGE_FILE_PATH  The path to the image file.
83
84    Field Mode Should Be Enabled
85    ${image_version}=  Get Version Tar  ${image_file_path}
86
87    ${post_code_update_actions}=  Get Post Boot Action
88    ${state}=  Get Pre Reboot State
89    Rprint Vars  state
90
91    Run Keyword And Ignore Error  Set ApplyTime  policy=OnReset
92
93    # Python module:  get_member_list(resource_path)
94    ${before_inv_list}=  redfish_utils.Get Member List  /redfish/v1/UpdateService/FirmwareInventory
95    Log To Console   Current images on the BMC before upload: ${before_inv_list}
96
97    # URI : /redfish/v1/UpdateService
98    # "HttpPushUri": "/redfish/v1/UpdateService/update",
99
100    ${redfish_update_uri}=  Get Redfish Update Service URI
101    Redfish Upload Image  ${redfish_update_uri}  ${IMAGE_FILE_PATH}
102
103    # Python module:  get_member_list(resource_path)
104    ${after_inv_list}=  redfish_utils.Get Member List  /redfish/v1/UpdateService/FirmwareInventory
105    Log To Console  Current images on the BMC after upload: ${after_inv_list}
106
107    ${image_id}=  Evaluate  set(${after_inv_list}) - set(${before_inv_list})
108    Should Not Be Empty    ${image_id}
109    ${image_id}=  Evaluate  list(${image_id})[0].split('/')[-1]
110    Log To Console  Firmware installation in progress with image id:: ${image_id}
111
112    Wait Until Keyword Succeeds  ${ACTIVATION_WAIT_TIMEOUT}  10 sec
113    ...  Check Image Update Progress State  match_state='Enabled'  image_id=${image_id}
114
115    # Python module:  get_version_tar(tar_file_path)
116    ${tar_version}=  code_update_utils.Get Version Tar  ${IMAGE_FILE_PATH}
117    ${image_info}=  Get Software Inventory State By Version  ${tar_version}
118
119    Run Key  ${post_code_update_actions['${image_info["image_type"]}']['OnReset']}
120    Redfish.Login
121    Redfish Verify BMC Version  ${IMAGE_FILE_PATH}
122
123
124Redfish Unsigned Firmware Update
125    [Documentation]  Update the BMC/Host firmware via redfish interface.
126    [Arguments]  ${image_file_path}
127
128    # Description of argument(s):
129    # IMAGE_FILE_PATH  The path to the image file.
130
131    Field Mode Should Be Enabled
132    Set ApplyTime  policy=Immediate
133
134    # URI : /redfish/v1/UpdateService
135    # "HttpPushUri": "/redfish/v1/UpdateService/update",
136
137    ${redfish_update_uri}=  Get Redfish Update Service URI
138    Redfish Upload Image  ${redfish_update_uri}  ${image_file_path}
139    ${image_id}=  Get Latest Image ID
140    Rprint Vars  image_id
141    Sleep  5s
142    Wait Until Keyword Succeeds  8 min  20 sec
143    ...  Check Image Update Progress State
144    ...    match_state='Disabled', 'Updating', 'Disabled'  image_id=${image_id}
145    Delete Software Object
146    ...  /xyz/openbmc_project/software/${image_id}
147
148