Get power reading at power off.

Also, creating a keyword for power reading for future test cases.

Resolves openbmc/openbmc-test-automation#1258

Change-Id: Ia7afb025133a3310bdd54f8f8b483ca0061683b5
Signed-off-by: Sweta Potthuri <spotthur@in.ibm.com>
diff --git a/tests/ipmi/test_general_ipmi.robot b/tests/ipmi/test_general_ipmi.robot
index c1f5287..9a0594d 100644
--- a/tests/ipmi/test_general_ipmi.robot
+++ b/tests/ipmi/test_general_ipmi.robot
@@ -253,45 +253,19 @@
 
     REST Power On  stack_mode=skip  quiet=1
 
-    # Example of power reading command output via IPMI.
-    # Instantaneous power reading:                   235 Watts
-    # Minimum during sampling period:                235 Watts
-    # Maximum during sampling period:                235 Watts
-    # Average power reading over sample period:      235 Watts
-    # IPMI timestamp:                           Thu Jan  1 00:00:00 1970
-    # Sampling period:                          00000000 Seconds.
-    # Power reading state is:                   deactivated
+    Verify Power Reading
 
-    ${power_reading}=  Get IPMI Power Reading
-    ${power_reading_ipmi}=  Set Variable
-    ...  ${power_reading['instantaneous_power_reading']}
-    ${power_reading_ipmi}=  Remove String  ${power_reading_ipmi}  ${SPACE}Watts
 
-    ${power_reading_rest}=  Read Attribute
-    ...  ${SENSORS_URI}power/total_power  Value
+Test Power Reading Via IPMI With Host Off
+    [Documentation]  Test power reading via IPMI with host off state and
+    ...  verify using REST.
+    [Tags]  Test_Power_Reading_Via_IPMI_With_Host_Off
 
-    # Example of power reading via REST
-    #  "CriticalAlarmHigh": 0,
-    #  "CriticalAlarmLow": 0,
-    #  "CriticalHigh": 3100000000,
-    #  "CriticalLow": 0,
-    #  "Scale": -6,
-    #  "Unit": "xyz.openbmc_project.Sensor.Value.Unit.Watts",
-    #  "Value": 228000000,
-    #  "WarningAlarmHigh": 0,
-    #  "WarningAlarmLow": 0,
-    #  "WarningHigh": 3050000000,
-    #  "WarningLow": 0
+    REST Power Off  stack_mode=skip  quiet=1
 
-    # Get power value based on scale i.e. Value * (10 power Scale Value)
-    # e.g. from above case 228000000 * (10 power -6) = 228000000/1000000
+    Wait Until Keyword Succeeds  6 min  10 sec  Is Host Off
 
-    ${power_reading_rest}=  Evaluate  ${power_reading_rest}/1000000
-    ${ipmi_rest_power_diff}=
-    ...  Evaluate  abs(${power_reading_rest} - ${power_reading_ipmi})
-
-    Should Be True  ${ipmi_rest_power_diff} <= ${allowed_power_diff}
-    ...  msg=Power reading above allowed threshold ${allowed_power_diff}.
+    Verify Power Reading
 
 
 Test Power Reading Via IPMI Raw Command
@@ -560,3 +534,57 @@
     ${value_fetch}=  Fetch From Right  ${fetch_value}  :${SPACE}
     [Return]  ${value_fetch}
 
+
+Verify Power Reading
+    [Documentation]  Get dcmi power reading via IPMI.
+
+    # Example of power reading command output via IPMI.
+    # Instantaneous power reading:                   235 Watts
+    # Minimum during sampling period:                235 Watts
+    # Maximum during sampling period:                235 Watts
+    # Average power reading over sample period:      235 Watts
+    # IPMI timestamp:                                Thu Jan  1 00:00:00 1970
+    # Sampling period:                               00000000 Seconds.
+    # Power reading state is:                        deactivated
+
+    ${power_reading}=  Get IPMI Power Reading
+
+    ${host_state}=  Get Host State
+    Run Keyword If  '${host_state}' == 'Off'
+    ...  Should Be Equal  ${power_reading['instantaneous_power_reading']}  0 Watts
+
+    Run Keyword If  '${power_reading['instantaneous_power_reading']}' != '0 Watts'
+    ...  Verify Power Reading Using REST  ${power_reading['instantaneous_power_reading']}
+
+
+Verify Power Reading Using REST
+    [Documentation]  Verify power reading using REST.
+    [Arguments]  ${power_reading}
+
+    # Desciption of argument(s):
+    # power_reading  IPMI Power reading
+
+    ${power_reading_rest}=  Read Attribute
+    ...  ${SENSORS_URI}power/total_power  Value
+
+    # Example of power reading via REST
+    #  "CriticalAlarmHigh": 0,
+    #  "CriticalAlarmLow": 0,
+    #  "CriticalHigh": 3100000000,
+    #  "CriticalLow": 0,
+    #  "Scale": -6,
+    #  "Unit": "xyz.openbmc_project.Sensor.Value.Unit.Watts",
+    #  "Value": 228000000,
+    #  "WarningAlarmHigh": 0,
+    #  "WarningAlarmLow": 0,
+    #  "WarningHigh": 3050000000,
+    #  "WarningLow": 0
+
+    # Get power value based on scale i.e. Value * (10 power Scale Value)
+    # e.g. from above case 228000000 * (10 power -6) = 228000000/1000000
+    ${power_reading_rest}=  Evaluate  ${power_reading_rest}/1000000
+    ${ipmi_rest_power_diff}=
+    ...  Evaluate  abs(${power_reading_rest} - ${power_reading})
+
+    Should Be True  ${ipmi_rest_power_diff} <= ${allowed_power_diff}
+    ...  msg=Power reading above allowed threshold ${allowed_power_diff}.