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