Enhancement : External ipmitool enablement
With this enhancement, a user can
- send IPMI command using external ipmitool
- by default dbus method will be used for ipmi command
Resolves openbmc/openbmc-test-automation#64
Change-Id: Ibd49dc8cdaf30e32da468c8b04abbff29f673c8b
Signed-off-by: Rahul Maheshwari <rahulmaheshwari@in.ibm.com>
diff --git a/README.md b/README.md
index ab7e697..2b1befb 100755
--- a/README.md
+++ b/README.md
@@ -16,9 +16,11 @@
Initilize the following environment variable which will used while testing
```shell
$ export OPENBMC_HOST=<openbmc machine ip address>
- $ export OPENBMC_PASSWORD=<openbmc username>
- $ export OPENBMC_USERNAME=<openbmc password>
+ $ export OPENBMC_PASSWORD=<openbmc password>
+ $ export OPENBMC_USERNAME=<openbmc username>
$ export OPENBMC_MODEL=[./data/Barreleye.py, ./data/Palmetto.py, etc]
+ $ export IPMI_COMMAND=<Dbus/External>
+ $ export IPMI_PASSWORD=<External IPMI password>
```
There are two different set of test suite existing based on the usage.
@@ -86,7 +88,14 @@
It can also be run by pasing variables from the cli...
```shell
- $ pybot -v OPENBMC_HOST:<ip> -v OPENBMC_USERNAME:root -v OPENBMC_PASSWORD:0penBmc -v OPENBMC_MODEL:<model path>
+ Run one test suite using using pybot
+ $ pybot -v OPENBMC_HOST:<ip> -v OPENBMC_USERNAME:root -v OPENBMC_PASSWORD:0penBmc -v OPENBMC_MODEL:<model path> tests/test_time.robot
+
+ Run entire test suite using using pybot
+ $ pybot -v OPENBMC_HOST:<ip> -v OPENBMC_USERNAME:root -v OPENBMC_PASSWORD:0penBmc -v OPENBMC_MODEL:<model path> tests
+
+ Run entire test suite using external ipmitool
+ $ pybot -v OPENBMC_HOST:<ip> -v OPENBMC_USERNAME:root -v OPENBMC_PASSWORD:0penBmc -v IPMI_COMMAND:External -v IPMI_PASSWORD:PASSW0RD -v OPENBMC_MODEL:<model path> tests
```
Run extended tests
diff --git a/lib/ipmi_client.robot b/lib/ipmi_client.robot
index 6e50e8b..079804c 100755
--- a/lib/ipmi_client.robot
+++ b/lib/ipmi_client.robot
@@ -9,13 +9,38 @@
*** Variables ***
${dbusHostIpmicmd1} = dbus-send --system /org/openbmc/HostIpmi/1
${dbusHostIpmiCmdReceivedMsg} = org.openbmc.HostIpmi.ReceivedMessage
-${netfnByte} = ${EMPTY}
-${cmdByte} = ${EMPTY}
-${arrayByte} = array:byte:
+${netfnByte} = ${EMPTY}
+${cmdByte} = ${EMPTY}
+${arrayByte} = array:byte:
+${IPMI_EXT_CMD} = ipmitool -I lanplus -C 1 -P
+${HOST} = -H
+${RAW} = raw
*** Keywords ***
+
Run IPMI Command
[arguments] ${args}
+ ${resp}= Run Keyword If '${IPMI_COMMAND}'=='External'
+ ... Run External IPMI RAW Command ${args}
+ ... ELSE IF '${IPMI_COMMAND}'=='Dbus'
+ ... Run Dbus IPMI RAW Command ${args}
+ ... ELSE Fail
+ ... msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
+ [return] ${resp}
+
+Run IPMI Standard Command
+ [arguments] ${args}
+ ${resp}= Run Keyword If '${IPMI_COMMAND}'=='External'
+ ... Run External IPMI Standard Command ${args}
+ ... ELSE IF '${IPMI_COMMAND}'=='Dbus'
+ ... Run Dbus IPMI Standard Command ${args}
+ ... ELSE Fail
+ ... msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
+
+ [return] ${resp}
+
+Run Dbus IPMI RAW Command
+ [arguments] ${args}
${valueinBytes} = Byte Conversion ${args}
${cmd} = Catenate ${dbushostipmicmd1} ${dbusHostIpmiCmdReceivedMsg}
${cmd} = Catenate ${cmd} ${valueinBytes}
@@ -23,13 +48,34 @@
Should Be Empty ${stderr}
set test variable ${OUTPUT} "${output}"
-Run IPMI Standard Command
+Run Dbus IPMI Standard Command
[arguments] ${args}
Copy ipmitool
- ${stdout} ${stderr} ${output}= Execute Command /tmp/ipmitool -I dbus ${args} return_stdout=True return_stderr= True return_rc=True
+ ${stdout} ${stderr} ${output}= Execute Command
+ ... /tmp/ipmitool -I dbus ${args} return_stdout=True
+ ... return_stderr= True return_rc=True
Should Be Equal ${output} ${0} msg=${stderr}
[return] ${stdout}
+Run External IPMI RAW Command
+ [arguments] ${args}
+ ${ipmi_raw_cmd}= Catenate SEPARATOR=
+ ... ${IPMI_EXT_CMD}${SPACE}${IPMI_PASSWORD}${SPACE}
+ ... ${HOST}${SPACE}${OPENBMC_HOST}${SPACE}${RAW}${SPACE}${args}
+ ${rc} ${output}= Run and Return RC and Output ${ipmi_raw_cmd}
+ Should Be Equal ${rc} ${0} msg=${output}
+ [return] ${output}
+
+Run External IPMI Standard Command
+ [arguments] ${args}
+ ${ipmi_cmd}= Catenate SEPARATOR=
+ ... ${IPMI_EXT_CMD}${SPACE}${IPMI_PASSWORD}${SPACE}
+ ... ${HOST}${SPACE}${OPENBMC_HOST}${SPACE}${args}
+ ${rc} ${output}= Run and Return RC and Output ${ipmi_cmd}
+ Should Be Equal ${rc} ${0} msg=${output}
+ [return] ${output}
+
+
Byte Conversion
[Documentation] Byte Conversion method receives IPMI RAW commands as
... argument in string format.
diff --git a/lib/resource.txt b/lib/resource.txt
index 37c3234..4982c08 100755
--- a/lib/resource.txt
+++ b/lib/resource.txt
@@ -13,9 +13,11 @@
${AUTH_URI} https://${OPENBMC_HOST}${AUTH_SUFFIX}
${OPENBMC_USERNAME} root
${OPENBMC_PASSWORD} 0penBmc
+${IPMI_PASSWORD} PASSW0RD
${MACHINE_TYPE} palmetto
${DBUS_POLL_INTERVAL} 15s
${OPENBMC_REBOOT_TIMEOUT} ${10}
+${IPMI_COMMAND} Dbus # Dbus/External
# PDU related parameters
${PDU_TYPE} ${EMPTY}
diff --git a/tools/generate_argumentfile.sh b/tools/generate_argumentfile.sh
index 5387beb..281ed19 100755
--- a/tools/generate_argumentfile.sh
+++ b/tools/generate_argumentfile.sh
@@ -15,3 +15,4 @@
echo "--variable SSH_PORT:$SSH_PORT" >> $ARG_FILE
echo "--variable HTTPS_PORT:$HTTPS_PORT" >> $ARG_FILE
echo "--variable PNOR_IMAGE_PATH:$PNOR_IMAGE_PATH" >> $ARG_FILE
+echo "--variable IPMI_COMMAND:$IPMI_COMMAND" >> $ARG_FILE