1*** Settings ***
2
3Documentation       eSEL's Test cases.
4
5Resource            ../../../lib/ipmi_client.robot
6Resource            ../../../lib/openbmc_ffdc.robot
7Resource            ../../../lib/utils.robot
8Resource            ../../../lib/boot_utils.robot
9Resource            ../../../lib/esel_utils.robot
10Resource            ../../../lib/boot_utils.robot
11Variables           ../../../data/variables.py
12
13Suite Setup         Suite Setup Execution
14Suite Teardown      Suite Teardown Execution
15Test Setup          Test Setup Execution
16Test Teardown       FFDC On Test Case Fail
17
18Force Tags          eSEL
19
20*** Variables ***
21
22${stack_mode}       skip
23
24${LOGGING_SERVICE}  xyz.openbmc_project.Logging.service
25
26${ESEL_DATA}        ESEL=00 00 df 00 00 00 00 20 00 04 12 35 6f aa 00 00
27
28*** Test Cases ***
29
30Verify eSEL Using Redfish
31    [Documentation]  Generate eSEL log and verify using redfish.
32    [Tags]  Verify_eSEL_Using_Redfish
33
34    Create eSEL
35    Event Log Should Exist
36
37
38Verify eSEL Entries Using Redfish
39    [Documentation]  Verify that eSEL entries have data.
40    [Tags]  Verify_eSEL_Entries_Using_Redfish
41
42    Create eSEL
43    Redfish.Login
44    Verify eSEL Entries
45
46
47# TODO: openbmc/openbmc-test-automation#1789
48Verify eSEL Description And EntryID Using REST
49    [Documentation]  Create eSEL log and verify "Description" and "EntryID"
50    ...  are not empty via REST.
51    [Tags]  Verify_eSEL_Description_And_EntryID_Using_REST
52
53    # {
54    # "AdditionalData": [
55    #     "CALLOUT_INVENTORY_PATH=",
56    #     "ESEL=00 00 df 00 00 00 00 20 00 04 12 35 6f aa 00 00",
57    #     "_PID=1175"
58    # ],
59    # "Description": "An error was detected with the base platform,
60    #  but was not able to be deciphered. Contact your next level of support.",
61    # "EventID": "FQPSPAA0011M",
62    # "Id": 1,
63    # "Message": "org.open_power.Host.Error.Event",
64    # "Resolved": 0,
65    # "Severity": "xyz.openbmc_project.Logging.Entry.Level.Error",
66    # "Timestamp": 1524233022072,
67    # "Associations": [
68    #    [
69    #        "callout",
70    #        "fault",
71    #        ""
72    #    ]
73    # ]
74
75    Create eSEL
76
77    ${elog_entry}=  Get URL List  ${BMC_LOGGING_ENTRY}
78    ${desc}=  Read Attribute  ${elog_entry[0]}  Description
79    Should Not Be Empty  ${desc}  msg=${desc} is not populated.
80
81    ${event_id}=  Read Attribute  ${elog_entry[0]}  EventID
82    Should Not Be Equal  ${event_id}  ${None}
83    ...  msg=${event_id} is populated default "None".
84
85
86Verify Multiple eSEL Using Redfish
87    [Documentation]  Generate multiple eSEL log and verify using redfish
88    [Tags]  Verify_Multiple_eSEL_Using_Redfish
89
90    Create eSEL
91    Create eSEL
92    ${entries}=  Count eSEL Entries
93    Should Be Equal As Integers  ${entries}  ${2}
94    ...  msg=Expecting 2 eSELs but found ${entries}.
95
96
97# TODO: openbmc/openbmc-test-automation#1789
98Check eSEL AdditionalData
99    [Documentation]  Generate eSEL log and verify AdditionalData is
100    ...              not empty.
101    [Tags]  Check_eSEL_AdditionalData
102
103    Create eSEL
104    ${elog_entry}=  Get URL List  ${BMC_LOGGING_ENTRY}
105    ${resp}=  OpenBMC Get Request  ${elog_entry[0]}
106    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
107    # "/xyz/openbmc_project/logging/entry/1": {
108    #    "Timestamp": 1487743771812,
109    #    "AdditionalData": [],
110    #    "Message": "org.open_power.Error.Host.Event.Event",
111    #    "Id": 1,
112    #    "Severity": "xyz.openbmc_project.Logging.Entry.Level.Emergency"
113    # }
114    Should Not Be Empty  ${resp.json()["data"]["AdditionalData"]}
115
116
117Test Wrong Reservation_ID
118    [Documentation]  This testcase is to test BMC can handle multi-requestor's
119    ...              oem partial add command with incorrect reservation id.
120    ...              It simulates sending partial add command with fake content
121    ...              and wrong Reservation ID. This command will be rejected.
122    [Tags]  Test_Wrong_Reservation_ID
123
124    ${rev_id_1}=   Run Inband IPMI Raw Command  0x0a 0x42
125    ${rev_id_ls}=   Get Substring   ${rev_id_1}   1   3
126    ${rev_id_ms}=   Get Substring   ${rev_id_1}   -2
127    Run Inband IPMI Raw Command   0x0a 0x42
128    ${output}=  Check IPMI OEMpartialadd Reject
129    ...  0x3a 0xf0 0x${rev_id_ls} 0x${rev_id_ms} 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0xa 0xb 0xc 0xd 0xe 0xf
130    Should Contain   ${output}   Reservation cancelled
131
132Test Correct Reservation_ID
133    [Documentation]  This testcase is to test BMC can handle multi-requestor's
134    ...              oem partial add command with correct reservation id. It
135    ...              simulates sending partial add command with fake content
136    ...              and correct Reservation ID. This command will be accepted.
137    [Tags]  Test_Correct_Reservation_ID
138
139    Run Inband IPMI Raw Command  0x0a 0x42
140    ${rev_id_2}=    Run Inband IPMI Raw Command  0x0a 0x42
141    ${rev_id_ls}=   Get Substring   ${rev_id_2}   1   3
142    ${rev_id_ms}=   Get Substring   ${rev_id_2}   -2
143    ${output}=  Check IPMI OEMpartialadd Accept
144    ...  0x3a 0xf0 0x${rev_id_ls} 0x${rev_id_ms} 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0xa 0xb 0xc 0xd 0xe 0xf
145    Should Be Empty    ${output}
146
147
148*** Keywords ***
149
150
151Suite Teardown Execution
152    [Documentation]  Cleanup test logs and connection.
153    Close All Connections
154    Redfish.Logout
155
156
157Restart Logging Service
158    [Documentation]  Restart Logging to clear eSEL log.
159    ${MainPID}  ${stderr}=  Execute Command
160    ...  systemctl restart ${LOGGING_SERVICE}  return_stderr=True
161    Should Be Empty  ${stderr}
162
163    Sleep  10s  reason=Wait for service to restart properly.
164
165
166Run IPMI Command Returned
167    [Documentation]  Run the IPMI command and return the output.
168    [Arguments]    ${args}
169    ${output_1}=    Execute Command   /tmp/ipmitool -I dbus raw ${args}
170    [Return]    ${output_1}
171
172
173Check IPMI OEMpartialadd Reject
174    [Documentation]  Check if IPMI rejects the OEM partial add command.
175    [Arguments]    ${args}
176    Login To OS Host  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD}
177    ${stdout}  ${stderr}  ${output_2}=  Execute Command  ipmitool raw ${args}
178    ...        return_stdout=True  return_stderr=True  return_rc=True
179    [Return]  ${stderr}
180
181
182Test Setup Execution
183   [Documentation]  Do test case setup tasks.
184
185    Redfish.Login
186    Redfish Purge Event Log
187
188
189Suite Setup Execution
190    [Documentation]  Validates input parameters & check if HOST OS is up.
191
192    Should Not Be Empty
193    ...   ${OS_HOST}  msg=You must provide DNS name/IP of the OS host.
194    Should Not Be Empty
195    ...   ${OS_USERNAME}  msg=You must provide OS host user name.
196    Should Not Be Empty
197    ...   ${OS_PASSWORD}  msg=You must provide OS host user password.
198
199    # Boot to OS.
200    Redfish Power On
201
202    Redfish.Login
203    Redfish Purge Event Log
204
205    Login To OS Host  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD}
206    Open Connection And Log In
207
208
209Check IPMI OEMpartialadd Accept
210    [Documentation]  Check if IPMI accepts the OEM partial add command.
211    [Arguments]    ${args}
212    Login To OS Host  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD}
213    ${stdout}  ${stderr}  ${output_3}=  Execute Command  ipmitool raw ${args}
214    ...         return_stdout=True  return_stderr=True  return_rc=True
215    Should Be Equal  ${output_3}  ${0}  msg=${stderr}
216    [Return]  ${stderr}
217
218
219Event Log Should Exist
220    [Documentation]  Event log entries should exist.
221
222    ${elogs}=  Get Event Logs
223    Should Not Be Empty  ${elogs}  msg=System event log entry is not empty.
224