blob: 5ec74c89979c4f1624176ccba7264dc269640c23 [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 Keishing0fd3b242016-11-24 09:01:41 -060011${BMC_UPD_METHOD} ${OPENBMC_BASE_URI}control/flash/bmc/action/update
12${BMC_PREP_METHOD} ${OPENBMC_BASE_URI}control/flash/bmc/action/PrepareForUpdate
13${BMC_UPD_ATTR} ${OPENBMC_BASE_URI}control/flash/bmc
14${HOST_SETTING} ${OPENBMC_BASE_URI}settings/host0
George Keishing5e870cd2016-08-24 10:05:47 -050015
16*** Keywords ***
17
18Preserve BMC Network Setting
19 [Documentation] Preserve Network setting
Gunnar Mills597ffa02016-12-06 11:26:53 -060020 ${policy}= Set Variable ${1}
21 ${value}= create dictionary data=${policy}
George Keishing5e870cd2016-08-24 10:05:47 -050022 Write Attribute ${BMC_UPD_ATTR} preserve_network_settings data=${value}
23 ${data}= Read Properties ${BMC_UPD_ATTR}
24 should be equal as strings ${data['preserve_network_settings']} ${1}
25 ... msg=0 indicates network is not preserved
26
27
28Activate BMC flash image
29 [Documentation] Activate and verify the update status
30 ... The status could be either one of these
31 ... 'Deferred for mounted filesystem. reboot BMC to apply.'
32 ... 'Image ready to apply.'
Gunnar Mills597ffa02016-12-06 11:26:53 -060033 @{img_path}= Create List /tmp/flashimg
34 ${data}= create dictionary data=@{img_path}
George Keishing5e870cd2016-08-24 10:05:47 -050035 ${resp}= openbmc post request ${BMC_UPD_METHOD} data=${data}
36 should be equal as strings ${resp.status_code} ${HTTP_OK}
George Keishing5e870cd2016-08-24 10:05:47 -050037
38 ${data}= Read Properties ${BMC_UPD_ATTR}
George Keishing0229cd32016-08-30 08:32:32 -050039 should be equal as strings ${data["filename"]} /tmp/flashimg
George Keishing5e870cd2016-08-24 10:05:47 -050040 should contain ${data['status']} to apply
41
42
George Keishingdc5aa58e92016-09-27 01:35:11 -050043Prepare For Update
44 [Documentation] Switch to update mode in progress. This method calls
45 ... the Abort method to remove the pending update if there
46 ... is any before code activation.
Gunnar Mills597ffa02016-12-06 11:26:53 -060047 ${data}= create dictionary data=@{EMPTY}
George Keishingdc5aa58e92016-09-27 01:35:11 -050048 ${resp}= openbmc post request ${BMC_PREP_METHOD} data=${data}
49 should be equal as strings ${resp.status_code} ${HTTP_OK}
50
George Keishing11319f62017-03-14 13:28:56 -050051 # Update method will reset the BMC, adding delay for reboot to
52 # come into force.
53 Sleep 10s
George Keishingdc5aa58e92016-09-27 01:35:11 -050054
55
George Keishing5e870cd2016-08-24 10:05:47 -050056SCP Tar Image File to BMC
George Keishing7b64a312017-07-11 12:33:45 -050057 [Documentation] Copy BMC tar image to BMC.
58 [Arguments] ${image_file_path}
59 # Description of argument(s):
60 # image_file_path Downloaded BMC tar file image path.
61
62
George Keishing5e870cd2016-08-24 10:05:47 -050063 Open Connection for SCP
George Keishing7b64a312017-07-11 12:33:45 -050064 Open Connection And Log In
65 Loop SCP Retry ${image_file_path}
66
67
68Loop SCP Retry
69 [Documentation] Try transferring the file 4 times.
70 [Arguments] ${image_file_path}
71 # Description of argument(s):
72 # image_file_path Downloaded BMC tar file image path.
73
74 : FOR ${index} IN RANGE 0 4
75 \ ${status}= Retry SCP ${image_file_path}
76 \ Exit For Loop If '${status}' == '${True}'
77
78
79Retry SCP
80 [Documentation] Delete the incomplete file and scp file.
81 [Arguments] ${image_file_path}
82 # Description of argument(s):
83 # image_file_path Downloaded BMC tar file image path.
84
George Keishing1f97fd12017-07-14 14:09:32 -050085 ${targ_file_path}= Set Variable /tmp/flashimg
George Keishing7b64a312017-07-11 12:33:45 -050086
87 # TODO: Need to remove this when new code update in place.
88 # Example output:
89 # root@witherspoon:~# ls -lh /tmp/flashimg
90 # -rwxr-xr-x 1 root root 32.0M Jun 29 01:12 /tmp/flashimg
91 Execute Command On BMC rm -f /tmp/flashimg
92 scp.Put File ${image_file_path} ${targ_file_path}
93
94 ${file_size}= Execute Command On BMC ls -lh ${targ_file_path}
95 ${status}= Run Keyword And Return Status
96 ... Should Contain ${file_size} 32.0M msg=Incomplete file transfer.
97 [return] ${status}
George Keishing5e870cd2016-08-24 10:05:47 -050098
99
George Keishing5e870cd2016-08-24 10:05:47 -0500100Check If File Exist
101 [Arguments] ${filepath}
102 Log \n PATH: ${filepath}
103 OperatingSystem.File Should Exist ${filepath}
104 ... msg=${filepath} doesn't exist [ ERROR ]
105
106 Set Global Variable ${FILE_PATH} ${filepath}
107
108
109System Readiness Test
Gunnar Mills597ffa02016-12-06 11:26:53 -0600110 ${l_status}= Run Keyword and Return Status
George Keishingc4d3dc02016-09-19 03:45:55 -0500111 ... Verify Ping and REST Authentication
George Keishing5e870cd2016-08-24 10:05:47 -0500112 Run Keyword If '${l_status}' == '${False}'
113 ... Fail msg=System not in ideal state to use [ERROR]
114
115
George Keishing5e870cd2016-08-24 10:05:47 -0500116Validate BMC Version
117 [Arguments] ${args}=post
118 # Check BMC installed version
119 Open Connection And Log In
120 ${version} ${stderr}= Execute Command cat /etc/version
121 ... return_stderr=True
122 Should Be Empty ${stderr}
123 # The File name contains the version installed
124 Run Keyword If '${args}' == 'before'
125 ... Should not Contain ${FILE_PATH} ${version}
126 ... msg=Same version already installed
127 ... ELSE
128 ... Should Contain ${FILE_PATH} ${version}
129 ... msg=Code update Failed
130
131
132Trigger Warm Reset via Reboot
George Keishing6c0f7152016-10-20 08:27:16 -0500133 [Documentation] Execute reboot command on the remote BMC and
134 ... returns immediately. This keyword "Start Command"
135 ... returns nothing and does not wait for the command
136 ... execution to be finished.
George Keishing5e870cd2016-08-24 10:05:47 -0500137 Open Connection And Log In
138
George Keishing6c0f7152016-10-20 08:27:16 -0500139 Start Command /sbin/reboot
George Keishing8db0e1b2016-10-20 13:46:54 -0500140
141Set Policy Setting
142 [Documentation] Set the given test policy
Gunnar Mills38032802016-12-12 13:43:40 -0600143 [Arguments] ${policy}
George Keishing8db0e1b2016-10-20 13:46:54 -0500144
Gunnar Mills597ffa02016-12-06 11:26:53 -0600145 ${valueDict}= create dictionary data=${policy}
George Keishing8db0e1b2016-10-20 13:46:54 -0500146 Write Attribute ${HOST_SETTING} power_policy data=${valueDict}
147 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy
148 Should Be Equal ${currentPolicy} ${policy}