ganesanb | c288aff | 2022-05-19 19:55:47 +0530 | [diff] [blame] | 1 | *** Settings *** |
| 2 | Documentation Implemented keywords to execute DBUS related commands on BMC. |
| 3 | |
| 4 | Resource resource.robot |
| 5 | Library OperatingSystem |
| 6 | Library Collections |
| 7 | |
| 8 | *** Variable *** |
| 9 | |
| 10 | ${BUSCTL_TREE_COMMAND} busctl tree | less |
| 11 | ${BUSCTL_INTROSPECT_COMMAND} busctl introspect |
| 12 | @{dbus_uri_list} |
| 13 | |
| 14 | *** Keywords *** |
| 15 | |
| 16 | Get DBUS URI List From BMC |
| 17 | [Documentation] Get the available DBUS URIs from device tree on BMC. |
| 18 | [Arguments] ${service_name} ${dbus_url} |
| 19 | |
| 20 | # Return the dbus uris corresponding to the service name provided. |
| 21 | # Description of argument(s): |
| 22 | # service_name Any service uri of the dbus. |
| 23 | # Eg : xyz.openbmc_project.FruDevice |
| 24 | # dbus_url Any dbus url of the dbus. |
| 25 | # Eg : /xyz/openbmc_project/FruDevice |
| 26 | |
| 27 | # Execute dbus tree command |
| 28 | ${bmc_response}= BMC Execute Command ${BUSCTL_TREE_COMMAND} |
| 29 | ${bmc_response}= Convert To List ${bmc_response} |
| 30 | ${bmc_response_output}= Get From List ${bmc_response} 0 |
| 31 | ${bmc_response_output_list}= Split String ${bmc_response_output} \n\n |
| 32 | # Identify the offset of the service name in the response. |
| 33 | ${service_name_index_value}= get_subsequent_value_from_list ${bmc_response_output_list} ${service_name} |
| 34 | ${service_name_index_value}= Get From List ${service_name_index_value} 0 |
| 35 | |
| 36 | # Get the service name and its corresponding URI's. |
| 37 | ${service_name_with_uri_list}= Get From List ${bmc_response_output_list} ${service_name_index_value} |
| 38 | ${service_name_with_uri_list}= Split String ${service_name_with_uri_list} \n |
| 39 | |
| 40 | # Find index of all the uris where the dbus URI matched. |
| 41 | ${uri_list_index}= get_subsequent_value_from_list ${service_name_with_uri_list} ${dbus_url} |
| 42 | FOR ${list_index} IN @{uri_list_index} |
| 43 | # For each index, get the URI and append to list |
| 44 | ${dbus_uri}= Get From List ${service_name_with_uri_list} ${list_index} |
| 45 | Append To List ${dbus_uri_list} ${dbus_uri} |
| 46 | END |
| 47 | |
| 48 | [Return] ${dbus_uri_list[1:]} |
| 49 | |
| 50 | |
| 51 | Fetch DBUS URI List Without Unicode |
| 52 | [Documentation] Gets the list of DBUS URI for the service and returns only sub URIs. |
| 53 | [Arguments] ${dbus_uri_list} |
| 54 | |
| 55 | # Return the dbus uris list without the unicodes. |
| 56 | # Description of argument(s): |
| 57 | # dbus_uri_list List of all the uris for the corresponding service name. |
| 58 | # Example: Converts " ├─/xyz/openbmc_project/FruDevice/device_0", |
| 59 | # ... to '/xyz/openbmc_project/FruDevice/device_0' |
| 60 | |
| 61 | @{dbus_list}= Create List |
| 62 | FOR ${item} IN @{dbus_uri_list} |
| 63 | ${item}= Set Variable ${item.strip()} |
| 64 | ${item}= return_decoded_string ${item} |
| 65 | Append To List ${dbus_list} ${item} |
| 66 | END |
| 67 | |
| 68 | [Return] ${dbus_list} |
| 69 | |
| 70 | |
| 71 | Execute DBUS Introspect Command |
| 72 | [Documentation] Execute the DBUS introspect command and return response. |
| 73 | [Arguments] ${dbus_command} |
| 74 | |
| 75 | # Execute the busctl instrospect command for the service name and dbus uri. |
| 76 | # Description of argument(s): |
| 77 | # dbus_command Command with service name and dbus uri for the fru device. |
| 78 | # Example : xyz.openbmc_project.FruDevice xyz/openbmc_project/FruDevice/device_0 |
| 79 | |
| 80 | ${cmd}= Catenate ${BUSCTL_INTROSPECT_COMMAND} ${dbus_command} |
| 81 | ${resp}= BMC Execute Command ${cmd} |
| 82 | |
| 83 | [Return] ${resp[0]} |