1*** Settings ***
2Documentation       This suite tests IPMI POH Counter Support in OpenBMC.
3...                 Feature: IPMI POH Counter Support
4...
5...                 POH (Power-On Hours) counter is the incremental count of power ON
6...                 hours in the system.
7...
8...                 Request and Response data defined under data/ipmi_raw_cmd_table.py
9...
10...                 Testcases added -
11...                 Get POH Counter Command Via IPMI
12...                 Verify Get POH Counter With Invalid Data Request Via IPMI
13...                 Verify POH Counter Reading With Wait Time
14...                 Verify POH Counter Reading With Host Power Off
15...                 Verify POH Counter Reading With Host Power On
16...
17...                 Script compares Minutes per count and Counter reading for the above scenarios.
18...
19...                 Minutes per count usually 60 minutes.
20...
21...                 Wait Time given - 1 hour, 1 hour 30minutes when Host power OFF, 1 hour
22...                 after Host Power ON
23...
24...                 Comparison between Initial POH Counter reading and reading after wait
25...                 time / Power operation.
26
27
28Resource            ../lib/ipmi_client.robot
29Resource            ../lib/openbmc_ffdc.robot
30Library             Collections
31Library             ../lib/ipmi_utils.py
32Variables           ../data/ipmi_raw_cmd_table.py
33
34Suite Setup         Suite Setup Execution
35Suite Teardown      Suite Teardown Execution
36
37Test Teardown       FFDC On Test Case Fail
38
39Test Tags          IPMI_Poh_Counter
40
41*** Variables ***
42
43
44*** Test Cases ***
45
46Get POH Counter Command Via IPMI
47    [Documentation]  Verify get POH counter command Via IPMI.
48    [Tags]  Get_POH_Counter_Command_Via_IPMI
49
50    # Verify get POH counter command via IPMI.
51    ${resp}=  Run External IPMI Raw Command
52    ...  ${IPMI_RAW_CMD['Get']['POH_Counter'][0]}
53    Should Not Contain  ${resp}  ${IPMI_RAW_CMD['Get']['POH_Counter'][1]}
54
55
56Verify Get POH Counter With Invalid Data Request Via IPMI
57    [Documentation]  Verify get POH counter with invalid data request via IPMI.
58    [Tags]  Verify_Get_POH_Counter_With_Invalid_Data_Request_Via_IPMI
59
60    # verify get POH counter command with invalid data request Via IPMI.
61    ${resp}=  Run Keyword and Expect Error  *Request data length invalid*
62    ...  Run External IPMI Raw Command  ${IPMI_RAW_CMD['Get']['POH_Counter'][0]} 0x00
63
64
65Verify POH Counter Reading With Wait Time
66    [Documentation]  Verify POH counter reading with wait time via IPMI.
67    [Tags]  Verify_POH_Counter_Reading_With_Wait_Time
68
69    # Get initial POH command counter reading.
70    ${poh_counter_1}=  Run Get POH Command And Return Counter Reading
71
72    # Sleep for given time.
73    Sleep  1h
74
75    # Get POH Counter Reading after waiting for given time period.
76    ${poh_counter_2}=  Run Get POH Command And Return Counter Reading
77
78    # Verify difference between initial and present counter readings.
79    # The counter reading should always be incremented by 1 for each hour.
80    ${difference}=  Evaluate   ${poh_counter_2} - ${poh_counter_1}
81    Should Be Equal As Integers  ${difference}  1
82
83
84Verify POH Counter Reading With Host Power Off
85    [Documentation]  Verify POH counter reading with wait time after host power off.
86    [Tags]  Verify_POH_Counter_Reading_With_Host_Power_Off
87
88    # Get initial POH command counter reading.
89    ${poh_counter_1}=  Run Get POH Command And Return Counter Reading
90
91    # Power off the system.
92    IPMI Power Off
93
94    # Sleep for given time.
95    Sleep  1 hours 30 minutes
96
97    # Get POH counter reading after waiting for given time period.
98    ${poh_counter_2}=  Run Get POH Command And Return Counter Reading
99
100    # Once the system is powered off,
101    # the poh counter reading should not increment.
102    Should Be Equal As Integers  ${poh_counter_2}  ${poh_counter_1}
103
104
105Verify POH Counter Reading With Host Power On
106    [Documentation]  Verify Get POH Counter with wait time after host power on.
107    [Tags]  Verify_POH_Counter_Reading_With_Host_Power_On
108
109    # Get initial POH command counter reading.
110    ${poh_counter_1}=  Run Get POH Command And Return Counter Reading
111
112    # Power on the system.
113    IPMI Power On
114
115    # Sleep for given time.
116    Sleep  1h
117
118    # Get POH Counter reading after waiting for given time period.
119    ${poh_counter_2}=  Run Get POH Command And Return Counter Reading
120
121    # Once the system is powered on,
122    # the pon counter reading should increment by 1.
123    ${difference}=  Evaluate   ${poh_counter_2} - ${poh_counter_1}
124    Should Be Equal As Integers  ${difference}  1
125
126
127*** Keywords ***
128
129Run Get POH Command And Return Counter Reading
130    [Documentation]  Run the IPMI command to Get POH Counter.
131
132    # Get POH counter Via IPMI.
133    ${resp}=  Run External IPMI Raw Command
134    ...  ${IPMI_RAW_CMD['Get']['POH_Counter'][0]}
135
136    # Verify Minutes per count.
137    ${data}=  Split String  ${resp}
138    Should Be Equal  ${data[0]}  3c
139
140    # Get POH Command counter reading.
141    ${poh_counter_reading}=  Set Variable  ${data[1:]}
142    Reverse List  ${poh_counter_reading}
143    ${poh_counter_reading}=  Evaluate  "".join(${poh_counter_reading})
144    ${poh_counter_reading}=  Convert To Integer  ${poh_counter_reading}  16
145
146    RETURN  ${poh_counter_reading}
147
148
149Suite Setup Execution
150    [Documentation]  Suite Setup Execution.
151
152    Redfish.Login
153
154    # Check Host current status.
155    ${current_host_state}=  Get Host State Via Redfish
156
157    # If Host state is 'On' then the condition will not be executed.
158    # Host may take approx 5 - 6 minutes to complete power ON process.
159    Run Keyword If  '${current_host_state}' == 'Off'
160    ...  IPMI Power On
161
162
163Suite Teardown Execution
164    [Documentation]  Suite Teardown Execution.
165
166    IPMI Power On
167    Redfish.Logout
168