1*** Settings ***
2Documentation    This suite tests Redfish Host power operations.
3
4Resource         ../../lib/boot_utils.robot
5Resource         ../../lib/common_utils.robot
6Resource         ../../lib/open_power_utils.robot
7
8Test Setup       Test Setup Execution
9Test Teardown    Test Teardown Execution
10
11*** Variables ***
12
13# Extended code to check OCC state, power metric and others.
14${additional_power_check}      ${1}
15
16*** Test Cases ***
17
18Verify Redfish Host GracefulShutdown
19    [Documentation]  Verify Redfish host graceful shutdown operation.
20    [Tags]  Verify_Redfish_Host_GracefulShutdown
21
22    Redfish Power Off
23
24
25Verify Redfish BMC PowerOn With OCC State
26    [Documentation]  Verify Redfish host power on operation.
27    [Tags]  Verify_Redfish_BMC_PowerOn_With_OCC_State
28
29    Redfish Power On
30
31    # TODO: Replace OCC state check with redfish property when available.
32    Verify OCC State
33
34
35Verify Redfish BMC PowerOn
36    [Documentation]  Verify Redfish host power on operation.
37    [Tags]  Verify_Redfish_Host_PowerOn
38
39    Redfish Power On
40
41    Run Keyword If  ${additional_power_check} == ${1}
42    ...  Wait Until Keyword Succeeds  3 mins  30 secs  Match OCC And CPU State Count
43
44    Run Keyword If  ${additional_power_check} == ${1}  Power Check
45
46
47Verify Redfish BMC GracefulRestart
48    [Documentation]  Verify Redfish host graceful restart operation.
49    [Tags]  Verify_Redfish_Host_GracefulRestart
50
51    RF SYS GracefulRestart
52
53
54Verify Redfish BMC PowerOff
55    [Documentation]  Verify Redfish host power off operation.
56    [Tags]  Verify_Redfish_Host_PowerOff
57
58    Redfish Hard Power Off
59
60*** Keywords ***
61
62Test Setup Execution
63    [Documentation]  Do test case setup tasks.
64
65    Printn
66    Start SOL Console Logging
67    Redfish.Login
68
69
70Test Teardown Execution
71    [Documentation]  Collect FFDC and SOL log.
72
73    FFDC On Test Case Fail
74    ${sol_log}=    Stop SOL Console Logging
75    Log   ${sol_log}
76
77    Run Keyword If  ${REDFISH_SUPPORTED}
78    ...    Redfish Set Auto Reboot  RetryAttempts
79    ...  ELSE
80    ...    Set Auto Reboot  ${1}
81    Redfish.Logout
82
83
84Power Check
85    [Documentation]  Verify PowerConsumedWatts property.
86
87    ${power_uri_list}=  redfish_utils.Get Members URI  /redfish/v1/Chassis/  PowerControl
88    Log List  ${power_uri_list}
89
90    # Power entries could be seen across different redfish path, remove the URI
91    # where the attribute is non-existent.
92    # Example:
93    #     ['/redfish/v1/Chassis/chassis/Power',
94    #      '/redfish/v1/Chassis/motherboard/Power']
95    FOR  ${idx}  IN  @{power_uri_list}
96        ${power_control}=  redfish_utils.Get Attribute  ${idx}  PowerControl
97        Log Dictionary  ${power_control[0]}
98
99        # Ensure the path does have the attribute else set to EMPTY as default to skip.
100        ${value}=  Get Variable Value  ${power_control[0]['PowerConsumedWatts']}  ${EMPTY}
101        Run Keyword If  "${value}" == "${EMPTY}"
102        ...  Remove Values From List  ${power_uri_list}  ${idx}
103
104        # Check the next available element in the list.
105        Continue For Loop If  "${value}" == "${EMPTY}"
106
107        Valid Dict  power_control[${0}]  ['PowerConsumedWatts']
108
109    END
110
111    # Double check, the validation has at least one valid path.
112    Should Not Be Empty  ${power_uri_list}
113    ...  msg=Should contain at least one element in the list.
114