1*** 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
11${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
15
16*** Keywords ***
17
18Preserve BMC Network Setting
19    [Documentation]   Preserve Network setting
20    ${policy}=       Set Variable   ${1}
21    ${value}=    create dictionary   data=${policy}
22    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.'
33    @{img_path}=   Create List    /tmp/flashimg
34    ${data}=   create dictionary   data=@{img_path}
35    ${resp}=    openbmc post request    ${BMC_UPD_METHOD}   data=${data}
36    should be equal as strings   ${resp.status_code}   ${HTTP_OK}
37
38    ${data}=      Read Properties     ${BMC_UPD_ATTR}
39    should be equal as strings   ${data["filename"]}   /tmp/flashimg
40    should contain    ${data['status']}   to apply
41
42
43Prepare 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.
47    ${data}=   create dictionary   data=@{EMPTY}
48    ${resp}=    openbmc post request    ${BMC_PREP_METHOD}   data=${data}
49    should be equal as strings   ${resp.status_code}   ${HTTP_OK}
50
51    ${data}=      Read Properties     ${BMC_UPD_ATTR}
52    should contain    ${data['status']}   Switch to update mode in progress
53
54
55SCP Tar Image File to BMC
56    [Arguments]         ${filepath}
57    Open Connection for SCP
58    scp.Put File      ${filepath}   /tmp/flashimg
59
60
61Check If File Exist
62    [Arguments]  ${filepath}
63    Log   \n PATH: ${filepath}
64    OperatingSystem.File Should Exist  ${filepath}
65    ...    msg=${filepath} doesn't exist [ ERROR ]
66
67    Set Global Variable   ${FILE_PATH}  ${filepath}
68
69
70System Readiness Test
71    ${l_status}=   Run Keyword and Return Status
72    ...   Verify Ping and REST Authentication
73    Run Keyword If  '${l_status}' == '${False}'
74    ...   Fail  msg=System not in ideal state to use [ERROR]
75
76
77Validate BMC Version
78    [Arguments]   ${args}=post
79    # Check BMC installed version
80    Open Connection And Log In
81    ${version}   ${stderr}=    Execute Command   cat /etc/version
82    ...    return_stderr=True
83    Should Be Empty     ${stderr}
84    # The File name contains the version installed
85    Run Keyword If   '${args}' == 'before'
86    ...    Should not Contain  ${FILE_PATH}   ${version}
87    ...    msg=Same version already installed
88    ...    ELSE
89    ...    Should Contain      ${FILE_PATH}   ${version}
90    ...    msg=Code update Failed
91
92
93Trigger Warm Reset via Reboot
94    [Documentation]    Execute reboot command on the remote BMC and
95    ...                returns immediately. This keyword "Start Command"
96    ...                returns nothing and does not wait for the command
97    ...                execution to be finished.
98    Open Connection And Log In
99
100    Start Command   /sbin/reboot
101
102Set Policy Setting
103    [Documentation]   Set the given test policy
104    [Arguments]   ${policy}
105
106    ${valueDict}=     create dictionary  data=${policy}
107    Write Attribute    ${HOST_SETTING}    power_policy   data=${valueDict}
108    ${currentPolicy}=  Read Attribute     ${HOST_SETTING}   power_policy
109    Should Be Equal    ${currentPolicy}   ${policy}
110