xref: /openbmc/openbmc-test-automation/pldm/test_pldm_platform.robot (revision 10e74ed2ed37810690d5ae83d4b5cb82d75f523f)
1*** Settings ***
2
3Documentation    Module to test PLDM platform commands.
4
5Library           ../lib/pldm_utils.py
6Variables         ../data/pldm_variables.py
7Resource          ../lib/openbmc_ffdc.robot
8Resource          ../lib/bmc_redfish_resource.robot
9Resource          ../lib/boot_utils.robot
10
11Suite Setup       Redfish.Login
12Test Setup        Printn
13Test Teardown     FFDC On Test Case Fail
14Suite Teardown    Pldmtool Platform Suite Cleanup
15
16Test Tags         Pldm_Platform
17
18*** Test Cases ***
19
20Verify GetPDR
21    [Documentation]  Verify GetPDR (Platform Descpritor Record) response message.
22    [Tags]  Verify_GetPDR
23
24    ${record_handle}=  Set Variable  ${1}
25    # Note: Record handle count is unknown and it is dynamic in nature.
26    #       Assuming there are 100 record handle.
27    FOR   ${i}  IN RANGE  100
28       ${next_record_handle}=  Run Keyword  Verify GetPDR For Record Handle  ${record_handle}
29       IF  ${next_record_handle} == 0  BREAK
30       ${record_handle}=  Set Variable  ${next_record_handle}
31    END
32
33
34Verify GetStateSensorReadings
35    [Documentation]  Verify get state sensor readings response message.
36    [Tags]  Verify_GetStateSensorReadings
37
38    # Poweron the system.
39    Redfish Power On  stack_mode=skip  quiet=1
40
41    ${pldm_output}=  Pldmtool  platform GetStateSensorReadings -i 1 -r 0
42    Rprint Vars  pldm_output
43    Should Be Equal As Integers  ${pldm_output["compositeSensorCount"]}  ${1}
44    Should Be Equal As Strings  ${pldm_output["sensorOpState[0]"]}  Sensor Enabled
45    Should Be Equal As Strings  ${pldm_output["eventState[0]"]}  Sensor Normal
46
47
48Verify SetStateEffecterStates
49    [Documentation]  Verify set state effecter states response message.
50    [Tags]  Verify_SetStateEffecterStates
51    [Template]  Verify SetStateEffecterStates For Effecter States
52
53    # EffecterHandle  Count  EffecterStates (effecterID effecterState)
54
55    '1'              '1'    '1 1'  # (effecterState -> 1 -> 'Boot Not Active')
56    '1'              '1'    '1 2'  # (effecterState -> 2 -> 'Boot Completed')
57    '2'              '1'    '1 9'  # (effecterState -> 9 -> 'System Power is in soft off mode')
58    '3'              '1'    '1 6'  # (effecterState -> 6 -> 'Graceful Restart Requested')
59
60*** Keywords ***
61
62Verify GetPDR For Record Handle
63    [Documentation]  Verify GetPDR (Platform Descpritor Record) for given input
64    ...              record handle and return next record handle.
65    [Arguments]  ${record_handle}
66
67    # Description of argument(s):
68    # ${record_handle}  Record handle.
69    #                   e.g. '1' is record handle 'Boot Progress' (196).
70    #                        '2' is record handle 'System Power State (260)'.
71    #                        '3' is record handle 'Software Termination Status (129)'.
72
73    # pldm_output:
74    # [responseCount]:                               29
75    # [recordHandle]:                                1
76    # [PDRHeaderVersion]:                            1
77    # [PDRType]:                                     11
78    # [recordChangeNumber]:                          0
79    # [dataLength]:                                  19
80    # [PLDMTerminusHandle]:                          0
81    # [effecterID]:                                  1
82    # [entityType]:                                  33
83    # [entityInstanceNumber]:                        0
84    # [containerID]:                                 0
85    # [effecterSemanticID]:                          0
86    # [effecterInit]:                                0
87    # [effecterDescriptionPDR]:                      false
88    # [compositeEffecterCount]:                      1
89    # [stateSetID]:                                  196
90    # [possibleStatesSize]:                          1
91    # [possibleStates]:                              6
92
93    ${pldm_cmd}=  Evaluate  $CMD_GETPDR % ${record_handle}
94    ${pldm_output}=  Pldmtool  ${pldm_cmd}
95    Rprint Vars  pldm_output
96
97    IF  '${pldm_output['PDRType']}' == '${PLDM_PDR_TYPES['PLDM_STATE_EFFECTER_PDR']}'
98        Valid Dict  pldm_output  valid_values=${RESPONSE_DICT_GETPDR_SETSTATEEFFECTER}
99    ELSE IF  '${pldm_output['PDRType']}' == '${PLDM_PDR_TYPES['PLDM_PDR_FRU_RECORD_SET']}'
100        Valid Dict  pldm_output  valid_values=${RESPONSE_DICT_GETPDR_FRURECORDSETIDENTIFIER}
101    ELSE IF  '${pldm_output['PDRType']}' == '${PLDM_PDR_TYPES['PLDM_PDR_ENTITY_ASSOCIATION']}'
102        Log To Console  "Found PDR Type - PLDM_ENTITY_ASSOCIATION_PDR"
103    ELSE IF  '${pldm_output['PDRType']}' == '${PLDM_PDR_TYPES['PLDM_STATE_SENSOR_PDR']}'
104        Valid Dict  pldm_output  valid_values=${RESPONSE_DICT_GETPDR_STATESENSORPDR}
105    ELSE IF  '${pldm_output['PDRType']}' == '${PLDM_PDR_TYPES['PLDM_NUMERIC_EFFECTER_PDR']}'
106        Valid Dict  pldm_output  valid_values=${RESPONSE_DICT_GETPDR_NUMERICEFFECTERPDR}
107    ELSE IF  '${pldm_output['PDRType']}' == '${PLDM_PDR_TYPES['PLDM_TERMINUS_LOCATOR_PDR']}'
108        Valid Dict  pldm_output  valid_values=${RESPONSE_DICT_GETPDR_TERMINUSLOCATORPDR}
109    ELSE IF  '${pldm_output['PDRType']}' == '${PLDM_PDR_TYPES['PLDM_COMPACT_NUMERIC_SENSOR_PDR']}'
110        Log To Console  "Found PDR Type - PLDM_COMPACT_NUMERIC_SENSOR_PDR'
111    ELSE
112        Fail  msg="Unknown PDR Type is received"
113    END
114
115    Should Be Equal As Strings  ${pldm_output['recordHandle']}  ${record_handle}
116    RETURN  ${pldm_output['nextRecordHandle']}
117
118Verify SetStateEffecterStates For Effecter States
119    [Documentation]  Verify set state effecter states for given input effecter states.
120    [Arguments]  ${effecter_handle}  ${count}  ${effecter_states}
121
122    # Description of argument(s):
123    # ${effecter_handle}   A handle that is used to identify and access the effecter (e.g. '1').
124    #                      e.g. '1' is effecter handle 'Boot Progress'.
125    #                           '2' is effecter handle 'System Power State'.
126    # ${count}             The number of individual sets of effecter information (e.g. '1').
127    # ${effecter_states}   (effecterID effecterState).
128    #                      e.g. '1 1'.
129
130    # Example output:
131    # {
132    #     "Response": "SUCCESS"
133    # }
134
135    ${pldm_cmd}=  Evaluate  $CMD_SETSTATEEFFECTERSTATES % (${effecter_handle}, ${count}, ${effecter_states})
136    ${pldm_output}=  Pldmtool  ${pldm_cmd}
137    Rprint Vars  pldm_output
138    Valid Value  pldm_output['Response']  ['SUCCESS']
139
140Pldmtool Platform Suite Cleanup
141    [Documentation]    Reset BMC at suite cleanup.
142
143    Redfish OBMC Reboot (off)
144