| *** Settings *** | 
 |  | 
 | Documentation       eSEL's Test cases. | 
 |  | 
 | Resource            ../lib/ipmi_client.robot | 
 | Resource            ../lib/openbmc_ffdc.robot | 
 | Resource            ../lib/utils.robot | 
 | Variables           ../data/variables.py | 
 | Resource            ../lib/boot_utils.robot | 
 | Resource            ../lib/esel_utils.robot | 
 |  | 
 | Suite Setup         Suite Setup Execution | 
 | Suite Teardown      Suite Teardown Execution | 
 | Test Teardown       FFDC On Test Case Fail | 
 | Test Setup          Delete All Error Logs | 
 |  | 
 | Force Tags  eSEL_Logging | 
 |  | 
 | *** Variables *** | 
 |  | 
 | ${stack_mode}       skip | 
 |  | 
 | ${LOGGING_SERVICE}  xyz.openbmc_project.Logging.service | 
 |  | 
 | ${ESEL_DATA}        ESEL=00 00 df 00 00 00 00 20 00 04 12 35 6f aa 00 00 | 
 |  | 
 | *** Test Cases *** | 
 |  | 
 | Verify eSEL Using REST | 
 |     [Documentation]  Generate eSEL log and verify using REST. | 
 |     [Tags]  Verify_eSEL_Using_REST | 
 |  | 
 |     Create eSEL | 
 |     # New eSEL log should exist | 
 |     ${resp}=  OpenBMC Get Request  ${BMC_LOGGING_ENTRY}list | 
 |     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} | 
 |  | 
 | Verify eSEL Entries Using REST | 
 |     [Documentation]  Verify that eSEL entries have data. | 
 |     [Tags]  Verify_eSEL_Entries_Using_REST | 
 |  | 
 |     Create eSEL | 
 |     Verify eSEL Entries | 
 |  | 
 | Verify eSEL Description And EntryID Using REST | 
 |     [Documentation]  Create eSEL log and verify "Description" and "EntryID" | 
 |     ...  are not empty via REST. | 
 |     [Tags]  Verify_eSEL_Description_And_EntryID_Using_REST | 
 |  | 
 |     # { | 
 |     # "AdditionalData": [ | 
 |     #     "CALLOUT_INVENTORY_PATH=", | 
 |     #     "ESEL=00 00 df 00 00 00 00 20 00 04 12 35 6f aa 00 00", | 
 |     #     "_PID=1175" | 
 |     # ], | 
 |     # "Description": "An error was detected with the base platform, | 
 |     #  but was not able to be deciphered. Contact your next level of support.", | 
 |     # "EventID": "FQPSPAA0011M", | 
 |     # "Id": 1, | 
 |     # "Message": "org.open_power.Host.Error.Event", | 
 |     # "Resolved": 0, | 
 |     # "Severity": "xyz.openbmc_project.Logging.Entry.Level.Error", | 
 |     # "Timestamp": 1524233022072, | 
 |     # "associations": [ | 
 |     #    [ | 
 |     #        "callout", | 
 |     #        "fault", | 
 |     #        "" | 
 |     #    ] | 
 |     # ] | 
 |  | 
 |     Create eSEL | 
 |  | 
 |     ${elog_entry}=  Get URL List  ${BMC_LOGGING_ENTRY} | 
 |     ${desc}=  Read Attribute  ${elog_entry[0]}  Description | 
 |     Should Not Be Empty  ${desc}  msg=${desc} is not populated. | 
 |  | 
 |     ${event_id}=  Read Attribute  ${elog_entry[0]}  EventID | 
 |     Should Not Be Equal  ${event_id}  ${None} | 
 |     ...  msg=${event_id} is populated default "None". | 
 |  | 
 |  | 
 | Verify Multiple eSEL Using REST | 
 |     [Documentation]  Generate multiple eSEL log and verify using REST. | 
 |     [Tags]  Verify_Multiple_eSEL_Using_REST | 
 |  | 
 |     Create eSEL | 
 |     Create eSEL | 
 |     ${entries}=  Count eSEL Entries | 
 |     # 1 eSEL creates 1 error log and 1 association. | 
 |     Should Be Equal As Integers  ${entries}  ${4} | 
 |  | 
 | Check eSEL AdditionalData | 
 |     [Documentation]  Generate eSEL log and verify AdditionalData is | 
 |     ...              not empty. | 
 |     [Tags]  Check_eSEL_AdditionalData | 
 |  | 
 |     Create eSEL | 
 |     ${elog_entry}=  Get URL List  ${BMC_LOGGING_ENTRY} | 
 |     ${resp}=  OpenBMC Get Request  ${elog_entry[0]} | 
 |     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} | 
 |     ${jsondata}=  To JSON  ${resp.content} | 
 |     # "/xyz/openbmc_project/logging/entry/1": { | 
 |     #    "Timestamp": 1487743771812, | 
 |     #    "AdditionalData": [], | 
 |     #    "Message": "org.open_power.Error.Host.Event.Event", | 
 |     #    "Id": 1, | 
 |     #    "Severity": "xyz.openbmc_project.Logging.Entry.Level.Emergency" | 
 |     # } | 
 |     Should Not Be Empty  ${jsondata["data"]["AdditionalData"]} | 
 |  | 
 | Test Wrong Reservation_ID | 
 |     [Documentation]  This testcase is to test BMC can handle multi-requestor's | 
 |     ...              oem partial add command with incorrect reservation id. | 
 |     ...              It simulates sending partial add command with fake content | 
 |     ...              and wrong Reservation ID. This command will be rejected. | 
 |     [Tags]  Test_Wrong_Reservation_ID | 
 |  | 
 |     ${rev_id_1}=   Run Inband IPMI Raw Command  0x0a 0x42 | 
 |     ${rev_id_ls}=   Get Substring   ${rev_id_1}   1   3 | 
 |     ${rev_id_ms}=   Get Substring   ${rev_id_1}   -2 | 
 |     Run Inband IPMI Raw Command   0x0a 0x42 | 
 |     ${output}=  Check IPMI OEMpartialadd Reject | 
 |     ...  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 | 
 |     Should Contain   ${output}   Reservation cancelled | 
 |  | 
 | Test Correct Reservation_ID | 
 |     [Documentation]  This testcase is to test BMC can handle multi-requestor's | 
 |     ...              oem partial add command with correct reservation id. It | 
 |     ...              simulates sending partial add command with fake content | 
 |     ...              and correct Reservation ID. This command will be accepted. | 
 |     [Tags]  Test_Correct_Reservation_ID | 
 |  | 
 |     Run Inband IPMI Raw Command  0x0a 0x42 | 
 |     ${rev_id_2}=    Run Inband IPMI Raw Command  0x0a 0x42 | 
 |     ${rev_id_ls}=   Get Substring   ${rev_id_2}   1   3 | 
 |     ${rev_id_ms}=   Get Substring   ${rev_id_2}   -2 | 
 |     ${output}=  Check IPMI OEMpartialadd Accept | 
 |     ...  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 | 
 |     Should Be Empty    ${output} | 
 |  | 
 |  | 
 | *** Keywords *** | 
 |  | 
 |  | 
 | Suite Teardown Execution | 
 |     [Documentation]  Cleanup test logs and connection. | 
 |     Close All Connections | 
 |  | 
 |  | 
 | Restart Logging Service | 
 |     [Documentation]  Restart Logging to clear eSEL log. | 
 |     ${MainPID}  ${stderr}=  Execute Command | 
 |     ...  systemctl restart ${LOGGING_SERVICE}  return_stderr=True | 
 |     Should Be Empty  ${stderr} | 
 |  | 
 |     Sleep  10s  reason=Wait for service to restart properly. | 
 |  | 
 |  | 
 | Run IPMI Command Returned | 
 |     [Documentation]  Run the IPMI command and return the output. | 
 |     [Arguments]    ${args} | 
 |     ${output_1}=    Execute Command   /tmp/ipmitool -I dbus raw ${args} | 
 |     [Return]    ${output_1} | 
 |  | 
 |  | 
 | Check IPMI OEMpartialadd Reject | 
 |     [Documentation]  Check if IPMI rejects the OEM partial add command. | 
 |     [Arguments]    ${args} | 
 |     Login To OS Host  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD} | 
 |     ${stdout}  ${stderr}  ${output_2}=  Execute Command  ipmitool raw ${args} | 
 |     ...        return_stdout=True  return_stderr=True  return_rc=True | 
 |     [Return]  ${stderr} | 
 |  | 
 |  | 
 | Suite Setup Execution | 
 |     [Documentation]  Validates input parameters & check if HOST OS is up. | 
 |  | 
 |     Should Not Be Empty | 
 |     ...   ${OS_HOST}  msg=You must provide DNS name/IP of the OS host. | 
 |     Should Not Be Empty | 
 |     ...   ${OS_USERNAME}  msg=You must provide OS host user name. | 
 |     Should Not Be Empty | 
 |     ...   ${OS_PASSWORD}  msg=You must provide OS host user password. | 
 |  | 
 |     # Boot to OS. | 
 |     REST Power On | 
 |  | 
 |     Login To OS Host  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD} | 
 |     Open Connection And Log In | 
 |  | 
 |  | 
 | Check IPMI OEMpartialadd Accept | 
 |     [Documentation]  Check if IPMI accepts the OEM partial add command. | 
 |     [Arguments]    ${args} | 
 |     Login To OS Host  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD} | 
 |     ${stdout}  ${stderr}  ${output_3}=  Execute Command  ipmitool raw ${args} | 
 |     ...         return_stdout=True  return_stderr=True  return_rc=True | 
 |     Should Be Equal  ${output_3}  ${0}  msg=${stderr} | 
 |     [Return]  ${stderr} |