blob: 2ca8ad5b9e0b6999c88ea946d7c7c50d448e510d [file] [log] [blame]
George Keishing5e870cd2016-08-24 10:05:47 -05001*** Settings ***
2Documentation Code update utility
3
4Resource ../../lib/rest_client.robot
5Resource ../../lib/connection_client.robot
6Resource ../../lib/utils.robot
7Library OperatingSystem
8
9*** Variables ***
10
George Keishingf26367c2017-10-24 04:59:59 -050011# Fix old org path locally for non-witherspoon system.
12${ORG_OPENBMC_BASE_URI} /org/openbmc/
13${BMC_UPD_METHOD} ${ORG_OPENBMC_BASE_URI}control/flash/bmc/action/update
14${BMC_PREP_METHOD} ${ORG_OPENBMC_BASE_URI}control/flash/bmc/action/PrepareForUpdate
15${BMC_UPD_ATTR} ${ORG_OPENBMC_BASE_URI}control/flash/bmc
16${HOST_SETTING} ${ORG_OPENBMC_BASE_URI}settings/host0
George Keishing5e870cd2016-08-24 10:05:47 -050017
18*** Keywords ***
19
20Preserve BMC Network Setting
21 [Documentation] Preserve Network setting
Gunnar Mills597ffa02016-12-06 11:26:53 -060022 ${policy}= Set Variable ${1}
23 ${value}= create dictionary data=${policy}
George Keishing5e870cd2016-08-24 10:05:47 -050024 Write Attribute ${BMC_UPD_ATTR} preserve_network_settings data=${value}
25 ${data}= Read Properties ${BMC_UPD_ATTR}
Michael Walsh6662d182018-09-11 11:32:53 -050026 Should Be Equal As Strings ${data['preserve_network_settings']} ${True}
27 ... msg=False indicates network is not preserved.
George Keishing5e870cd2016-08-24 10:05:47 -050028
29
30Activate BMC flash image
31 [Documentation] Activate and verify the update status
32 ... The status could be either one of these
33 ... 'Deferred for mounted filesystem. reboot BMC to apply.'
34 ... 'Image ready to apply.'
Gunnar Mills597ffa02016-12-06 11:26:53 -060035 @{img_path}= Create List /tmp/flashimg
36 ${data}= create dictionary data=@{img_path}
George Keishing5e870cd2016-08-24 10:05:47 -050037 ${resp}= openbmc post request ${BMC_UPD_METHOD} data=${data}
38 should be equal as strings ${resp.status_code} ${HTTP_OK}
George Keishing5e870cd2016-08-24 10:05:47 -050039
40 ${data}= Read Properties ${BMC_UPD_ATTR}
George Keishing0229cd32016-08-30 08:32:32 -050041 should be equal as strings ${data["filename"]} /tmp/flashimg
George Keishing5e870cd2016-08-24 10:05:47 -050042 should contain ${data['status']} to apply
43
44
George Keishingdc5aa58e92016-09-27 01:35:11 -050045Prepare For Update
46 [Documentation] Switch to update mode in progress. This method calls
47 ... the Abort method to remove the pending update if there
48 ... is any before code activation.
George Keishing268099f2018-10-05 13:16:27 -050049 ${data}= Create Dictionary data=@{EMPTY}
50 ${resp}= Openbmc Post Request ${BMC_PREP_METHOD} data=${data}
George Keishingdc5aa58e92016-09-27 01:35:11 -050051
George Keishing11319f62017-03-14 13:28:56 -050052 # Update method will reset the BMC, adding delay for reboot to
53 # come into force.
54 Sleep 10s
George Keishingdc5aa58e92016-09-27 01:35:11 -050055
56
George Keishing5e870cd2016-08-24 10:05:47 -050057SCP Tar Image File to BMC
George Keishing7b64a312017-07-11 12:33:45 -050058 [Documentation] Copy BMC tar image to BMC.
59 [Arguments] ${image_file_path}
60 # Description of argument(s):
61 # image_file_path Downloaded BMC tar file image path.
62
63
George Keishing5e870cd2016-08-24 10:05:47 -050064 Open Connection for SCP
George Keishing7b64a312017-07-11 12:33:45 -050065 Open Connection And Log In
66 Loop SCP Retry ${image_file_path}
67
68
69Loop SCP Retry
70 [Documentation] Try transferring the file 4 times.
71 [Arguments] ${image_file_path}
72 # Description of argument(s):
73 # image_file_path Downloaded BMC tar file image path.
74
75 : FOR ${index} IN RANGE 0 4
76 \ ${status}= Retry SCP ${image_file_path}
77 \ Exit For Loop If '${status}' == '${True}'
78
79
80Retry SCP
81 [Documentation] Delete the incomplete file and scp file.
82 [Arguments] ${image_file_path}
83 # Description of argument(s):
84 # image_file_path Downloaded BMC tar file image path.
85
George Keishing1f97fd12017-07-14 14:09:32 -050086 ${targ_file_path}= Set Variable /tmp/flashimg
George Keishing7b64a312017-07-11 12:33:45 -050087
88 # TODO: Need to remove this when new code update in place.
89 # Example output:
90 # root@witherspoon:~# ls -lh /tmp/flashimg
91 # -rwxr-xr-x 1 root root 32.0M Jun 29 01:12 /tmp/flashimg
Joy Onyerikwu2ef965a2018-05-24 15:23:27 -050092 BMC Execute Command rm -f /tmp/flashimg
George Keishing7b64a312017-07-11 12:33:45 -050093 scp.Put File ${image_file_path} ${targ_file_path}
94
Joy Onyerikwu2ef965a2018-05-24 15:23:27 -050095 ${file_size} ${stderr} ${rc}= BMC Execute Command
96 ... ls -lh ${targ_file_path}
George Keishing7b64a312017-07-11 12:33:45 -050097 ${status}= Run Keyword And Return Status
98 ... Should Contain ${file_size} 32.0M msg=Incomplete file transfer.
99 [return] ${status}
George Keishing5e870cd2016-08-24 10:05:47 -0500100
101
George Keishing5e870cd2016-08-24 10:05:47 -0500102Check If File Exist
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500103 [Documentation] Verify that the file exists on this machine.
George Keishing5e870cd2016-08-24 10:05:47 -0500104 [Arguments] ${filepath}
105 Log \n PATH: ${filepath}
106 OperatingSystem.File Should Exist ${filepath}
107 ... msg=${filepath} doesn't exist [ ERROR ]
108
109 Set Global Variable ${FILE_PATH} ${filepath}
110
111
112System Readiness Test
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500113 [Documentation] Verify that the system can be pinged and authenticated through REST.
Gunnar Mills597ffa02016-12-06 11:26:53 -0600114 ${l_status}= Run Keyword and Return Status
George Keishingc4d3dc02016-09-19 03:45:55 -0500115 ... Verify Ping and REST Authentication
George Keishing5e870cd2016-08-24 10:05:47 -0500116 Run Keyword If '${l_status}' == '${False}'
117 ... Fail msg=System not in ideal state to use [ERROR]
118
119
George Keishing5e870cd2016-08-24 10:05:47 -0500120Validate BMC Version
George Keishing830211e2017-07-19 08:44:07 -0500121 [Documentation] Get BMC version from /etc/os-release and compare.
122 [Arguments] ${version}
123
124 # Description of argument(s):
125 # version Software version (e.g. "v1.99.8-41-g86a4abc").
126
George Keishing5e870cd2016-08-24 10:05:47 -0500127 Open Connection And Log In
George Keishing830211e2017-07-19 08:44:07 -0500128 ${cmd}= Set Variable grep ^VERSION_ID= /etc/os-release | cut -f 2 -d '='
Joy Onyerikwu2ef965a2018-05-24 15:23:27 -0500129 ${output} ${stderr} ${rc}= BMC Execute Command ${cmd}
George Keishing830211e2017-07-19 08:44:07 -0500130 Should Be Equal As Strings ${version} ${output[1:-1]}
George Keishing5e870cd2016-08-24 10:05:47 -0500131
132
133Trigger Warm Reset via Reboot
George Keishing6c0f7152016-10-20 08:27:16 -0500134 [Documentation] Execute reboot command on the remote BMC and
135 ... returns immediately. This keyword "Start Command"
136 ... returns nothing and does not wait for the command
137 ... execution to be finished.
George Keishing5e870cd2016-08-24 10:05:47 -0500138 Open Connection And Log In
139
George Keishing6c0f7152016-10-20 08:27:16 -0500140 Start Command /sbin/reboot
George Keishing8db0e1b2016-10-20 13:46:54 -0500141
142Set Policy Setting
143 [Documentation] Set the given test policy
Gunnar Mills38032802016-12-12 13:43:40 -0600144 [Arguments] ${policy}
George Keishing8db0e1b2016-10-20 13:46:54 -0500145
Gunnar Mills597ffa02016-12-06 11:26:53 -0600146 ${valueDict}= create dictionary data=${policy}
George Keishing8db0e1b2016-10-20 13:46:54 -0500147 Write Attribute ${HOST_SETTING} power_policy data=${valueDict}
148 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy
149 Should Be Equal ${currentPolicy} ${policy}