Added new script for IPMI POH Counter Support
POH (Power-On Hours) counter has the incremental count of power ON hours of the system.
Request and Response data defined under data/ipmi_raw_cmd_table.py
Testcases added -
- Get POH Counter Command Via IPMI
- Verify Get POH Counter With Invalid Data Request Via IPMI
- Verify POH Counter Reading With Wait Time
- Verify POH Counter Reading With Host Power Off
- Verify POH Counter Reading With Host Power On
Script compares Minutes per count and Counter reading for the above scenarios.
Minutes per count usually 60 minutes.
Wait Time given - 1 hour in host powered on state, 1 hour 30 minutes when Host power OFF, 1 hour after Host Power ON
Comparison between Initial POH Counter reading and reading after wait time / Power operation.
Tested: Run robot ipmi/test_ipmi_poh_counter.robot
Signed-off-by: chithrag <chithrag@ami.com>
Change-Id: I0137f42cc4af215abfdeef6ad0d9004e9dd2d2dc
diff --git a/data/ipmi_raw_cmd_table.py b/data/ipmi_raw_cmd_table.py
index 5ed4b9b..7e7f84a 100644
--- a/data/ipmi_raw_cmd_table.py
+++ b/data/ipmi_raw_cmd_table.py
@@ -408,5 +408,14 @@
'Invalid value',
'Valid values are serial, 9.6 19.2, 38.4, 57.6 and 115.2',
],
+ },
+ 'Get':
+ {
+ 'POH_Counter':
+ [
+ # raw command, error response
+ '0x00 0x0f',
+ 'Error: Unable to establish IPMI v2 / RMCP+ session'
+ ]
}
}
diff --git a/ipmi/test_ipmi_poh_counter.robot b/ipmi/test_ipmi_poh_counter.robot
new file mode 100644
index 0000000..8f2ff85
--- /dev/null
+++ b/ipmi/test_ipmi_poh_counter.robot
@@ -0,0 +1,163 @@
+*** Settings ***
+Documentation This suite tests IPMI POH Counter Support in OpenBMC.
+... Feature: IPMI POH Counter Support
+...
+... POH (Power-On Hours) counter is the incremental count of power ON hours in the system.
+...
+... Request and Response data defined under data/ipmi_raw_cmd_table.py
+...
+... Testcases added -
+... Get POH Counter Command Via IPMI
+... Verify Get POH Counter With Invalid Data Request Via IPMI
+... Verify POH Counter Reading With Wait Time
+... Verify POH Counter Reading With Host Power Off
+... Verify POH Counter Reading With Host Power On
+...
+... Script compares Minutes per count and Counter reading for the above scenarios.
+...
+... Minutes per count usually 60 minutes.
+...
+... Wait Time given - 1 hour, 1 hour 30minutes when Host power OFF, 1 hour after Host Power ON
+...
+... Comparison between Initial POH Counter reading and reading after wait time / Power operation.
+
+
+Library Collections
+Library ../lib/ipmi_utils.py
+Resource ../lib/ipmi_client.robot
+Resource ../lib/openbmc_ffdc.robot
+Variables ../data/ipmi_raw_cmd_table.py
+
+Suite Setup Suite Setup Execution
+Suite Teardown Suite Teardown Execution
+
+Test Teardown FFDC On Test Case Fail
+
+
+*** Variables ***
+
+
+*** Test Cases ***
+
+Get POH Counter Command Via IPMI
+ [Documentation] Verify get POH counter command Via IPMI.
+ [Tags] Get_POH_Counter_Command_Via_IPMI
+
+ # Verify get POH counter command via IPMI.
+ ${resp}= Run IPMI Command
+ ... ${IPMI_RAW_CMD['Get']['POH_Counter'][0]}
+ Should Not Contain ${resp} ${IPMI_RAW_CMD['Get']['POH_Counter'][1]}
+
+
+Verify Get POH Counter With Invalid Data Request Via IPMI
+ [Documentation] Verify get POH counter with invalid data request via IPMI.
+ [Tags] Verify_Get_POH_Counter_With_Invalid_Data_Request_Via_IPMI
+
+ # verify get POH counter command with invalid data request Via IPMI.
+ ${resp}= Run Keyword and Expect Error *Request data length invalid*
+ ... Run IPMI Command ${IPMI_RAW_CMD['Get']['POH_Counter'][0]} 0x00
+
+
+Verify POH Counter Reading With Wait Time
+ [Documentation] Verify POH counter reading with wait time via IPMI.
+ [Tags] Verify_POH_Counter_Reading_With_Wait_Time
+
+ # Get initial POH command counter reading.
+ ${poh_counter_1}= Run Get POH Command And Return Counter Reading
+
+ # Sleep for given time.
+ Sleep 1h
+
+ # Get POH Counter Reading after waiting for given time period.
+ ${poh_counter_2}= Run Get POH Command And Return Counter Reading
+
+ # Verify difference between initial and present counter readings.
+ # The counter reading should always be incremented by 1 for each hour.
+ ${difference}= Evaluate ${poh_counter_2} - ${poh_counter_1}
+ Should Be Equal As Integers ${difference} 1
+
+
+Verify POH Counter Reading With Host Power Off
+ [Documentation] Verify POH counter reading with wait time after host power off.
+ [Tags] Verify_POH_Counter_Reading_With_Host_Power_Off
+
+ # Get initial POH command counter reading.
+ ${poh_counter_1}= Run Get POH Command And Return Counter Reading
+
+ # Power off the system.
+ IPMI Power Off
+
+ # Sleep for given time.
+ Sleep 1 hours 30 minutes
+
+ # Get POH counter reading after waiting for given time period.
+ ${poh_counter_2}= Run Get POH Command And Return Counter Reading
+
+ # Once the system is powered off,
+ # the poh counter reading should not increment.
+ Should Be Equal As Integers ${poh_counter_2} ${poh_counter_1}
+
+
+Verify POH Counter Reading With Host Power On
+ [Documentation] Verify Get POH Counter with wait time after host power on.
+ [Tags] Verify_POH_Counter_Reading_With_Host_Power_On
+
+ # Get initial POH command counter reading.
+ ${poh_counter_1}= Run Get POH Command And Return Counter Reading
+
+ # Power on the system.
+ IPMI Power On
+
+ # Sleep for given time.
+ Sleep 1h
+
+ # Get POH Counter reading after waiting for given time period.
+ ${poh_counter_2}= Run Get POH Command And Return Counter Reading
+
+ # Once the system is powered on,
+ # the pon counter reading should increment by 1.
+ ${difference}= Evaluate ${poh_counter_2} - ${poh_counter_1}
+ Should Be Equal As Integers ${difference} 1
+
+
+*** Keywords ***
+
+Run Get POH Command And Return Counter Reading
+ [Documentation] Run the IPMI command to Get POH Counter.
+
+ # Get POH counter Via IPMI.
+ ${resp}= Run IPMI Command
+ ... ${IPMI_RAW_CMD['Get']['POH_Counter'][0]}
+
+ # Verify Minutes per count.
+ ${data}= Split String ${resp}
+ Should Be Equal ${data[0]} 3c
+
+ # Get POH Command counter reading.
+ ${poh_counter_reading}= Set Variable ${data[1:]}
+ Reverse List ${poh_counter_reading}
+ ${poh_counter_reading}= Evaluate "".join(${poh_counter_reading})
+ ${poh_counter_reading}= Convert To Integer ${poh_counter_reading} 16
+
+ [Return] ${poh_counter_reading}
+
+
+Suite Setup Execution
+ [Documentation] Suite Setup Execution.
+
+ Redfish.Login
+
+ # Check Host current status.
+ ${current_host_state}= Get Host State Via Redfish
+
+ # If Host state is 'On' then the condition will not be executed.
+ # Host may take approx 5 - 6 minutes to complete power ON process.
+ Run Keyword If '${current_host_state}' == 'Off'
+ ... IPMI Power On
+
+
+Suite Teardown Execution
+ [Documentation] Suite Teardown Execution.
+
+ IPMI Power On
+ Redfish.Logout
diff --git a/lib/state_manager.robot b/lib/state_manager.robot
index b2fc6b5..4952482 100755
--- a/lib/state_manager.robot
+++ b/lib/state_manager.robot
@@ -316,3 +316,12 @@
Wait For BMC Ready
[Documentation] Check BMC state and wait for BMC Ready.
Wait Until Keyword Succeeds 10 min 10 sec Is BMC Ready
+
+
+Get Host State Via Redfish
+ [Documentation] Return the state of the host Via Redfish as a string.
+
+ ${powerstate}=
+ ... Redfish.Get Attribute ${REDFISH_CHASSIS_URI}/${CHASSIS_ID} PowerState
+
+ [Return] ${powerstate}