summaryrefslogtreecommitdiff
path: root/test/testipmi.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/testipmi.sh')
-rwxr-xr-xtest/testipmi.sh400
1 files changed, 400 insertions, 0 deletions
diff --git a/test/testipmi.sh b/test/testipmi.sh
new file mode 100755
index 0000000..798705a
--- /dev/null
+++ b/test/testipmi.sh
@@ -0,0 +1,400 @@
+#!/bin/sh
+# testipmi.sh [node_ip]
+# Main test script for ipmiutil functions
+# Other files used:
+# ./ipmievt.sh
+# ./sensor-TIGW1U.txt
+# ./sensor-CG2100.txt
+#
+# If a remote node is specified as the target, it must be confiugred for
+# IPMI LAN and should have the ipmiutil_asy service running.
+#
+outf=/tmp/testipmi.out
+remote=0
+dosol=0
+# default remote node for SOL test
+node=192.168.1.154
+# use canned username and password, edit as needed.
+user=admin
+pswd=password
+mydir=`pwd`
+indir=`dirname $0`
+c1=`echo $indir |cut -c1`
+if [ "$c1" = "/" ]; then
+ testdir=$indir
+else
+ testdir=$mydir/$indir
+fi
+# datadir=/usr/share/ipmiutil
+datadir=/var/lib/ipmiutil
+# sfil is used only to read from with events -p -s below
+# normally, sfil=$datadir/sensor-out.txt
+sfil=${testdir}/sensor-TIGW1U.txt
+sfil2=${testdir}/sensor-CG2100.txt
+evtsh=${testdir}/ipmievt.sh
+tmpc=/tmp/cfg.tmp
+tmpin=/tmp/sol.in
+npass=0
+nfail=0
+# march=`rpmbuild --showrc |grep " _target_cpu" | head -n1 |awk '{print $3}'`
+uarch=`uname -m`
+LANPARAMS=
+os=`uname -s`
+if [ "$os" = "SunOS" ];then
+TAIL="tail -1"
+TAIL2="tail -2"
+else
+TAIL="tail -n1"
+TAIL2="tail -n2"
+fi
+
+errexit() {
+ rv=$1
+ echo "FAIL $rv"
+ nfail=`expr $nfail + 1`
+ echo "## Passed=$npass, Failed=$nfail, see $outf for detailed results"
+ exit $rv
+}
+
+waitready() {
+ i=0
+ while [ 1 ]; do
+ if [ $i -gt 15 ]; then
+ return 1
+ fi
+ echo "wait for ready: loop $i ..."
+ ipmiutil wdt $LANPARAMS
+ if [ $? -eq 0 ]; then
+ return 0
+ else
+ sleep 1
+ fi
+ i=`expr $i + 1`
+ done
+}
+
+runcmd() {
+ # runcmd checks for the tag 'successful' in the output and exits otherwise.
+ CMD="$*"
+ TAG=`echo $CMD |cut -f1-3 -d' '`
+ tmpcmd=/tmp/cmdout.$$
+ echo -n "$TAG ... "
+ echo "# $CMD" > $tmpcmd
+ $CMD >>$tmpcmd 2>&1
+ rv=$?
+ $TAIL $tmpcmd | grep successful >/dev/null
+ success=$?
+ cat $tmpcmd >>$outf
+ if [ $success -ne 0 ]; then
+ if [ $rv -eq 0 ]; then
+ rv=1
+ fi
+ echo "FAIL $rv"
+ echo "=== $CMD FAIL $rv" >>$outf
+ nfail=`expr $nfail + 1`
+ else
+ echo "PASS"
+ echo "=== $CMD PASS" >>$outf
+ npass=`expr $npass + 1`
+ fi
+ return $rv
+}
+
+runcmdr() {
+ # runcmdr checks only the return value for 0, and exits otherwise.
+ CMD="$*"
+ TAG=`echo $CMD |cut -f1-3 -d' '`
+ tmpcmd=/tmp/cmdoutr.$$
+ echo -n "$TAG ... "
+ echo "# $CMD" > $tmpcmd
+ $CMD >>$tmpcmd 2>&1
+ rv=$?
+ cat $tmpcmd >>$outf
+ if [ $rv -ne 0 ]; then
+ echo "FAIL $rv"
+ echo "=== $CMD FAIL $rv" >>$outf
+ nfail=`expr $nfail + 1`
+ else
+ echo "PASS"
+ echo "=== $CMD PASS" >>$outf
+ npass=`expr $npass + 1`
+ fi
+ return $rv
+}
+
+if [ $# -ge 1 ];then
+ node=$1
+ LANPARAMS="-N $node -U $user -P $pswd"
+ remote=1
+ dosol=1
+fi
+
+>$outf
+pushd /tmp
+
+echo "## testipmi.sh $LANPARAMS" | tee -a $outf
+if [ ! -f $sfil ]; then
+ echo "Cannot find required file $sfil"
+ echo "Make sure that $sfil, $sfil2, and $evtsh are present."
+ exit 1
+fi
+if [ ! -f $sfil2 ]; then
+ echo "Cannot find required file $sfil2"
+ echo "Make sure that $sfil, $sfil2, and $evtsh are present."
+ exit 1
+fi
+if [ ! -x $evtsh ]; then
+ echo "Cannot find required file $evtsh"
+ echo "Make sure that $sfil, $sfil2, and $evtsh are present."
+ exit 1
+fi
+
+runcmd "ipmiutil health $LANPARAMS"
+runcmd "ipmiutil health -x $LANPARAMS"
+runcmd "ipmiutil health -c $LANPARAMS"
+runcmd "ipmiutil health -f -g -h -s -c $LANPARAMS"
+
+runcmd "ipmiutil cmd -x $LANPARAMS 00 20 18 01 "
+runcmdr "ipmiutil cmd -q $LANPARAMS 00 20 18 01 "
+
+runcmd "ipmiutil fru -b $LANPARAMS"
+MODEL=`grep "Chassis OEM Field" $outf| cut -f2 -d':'| awk '{ print $1 }'`
+ASSET=`grep "Product Asset Tag" $outf| cut -f2 -d':'| awk '{ print $1 }'`
+runcmd "ipmiutil fru $LANPARAMS"
+runcmd "ipmiutil fru -c $LANPARAMS"
+runcmd "ipmiutil fru -i 00 -m 002000s $LANPARAMS"
+runcmd "ipmiutil fru -a test_asset $LANPARAMS" -V4
+runcmd "ipmiutil fru -a ${ASSET} $LANPARAMS" -V4
+
+runcmd "ipmiutil config $LANPARAMS -s $tmpc"
+
+runcmd "ipmiutil lan -c $LANPARAMS "
+IPADDR=`grep "IP address" $outf| tail -n1|cut -f2 -d'|'| awk '{ print $1 }'`
+if [ "x$IPADDR" = "x0.0.0.0" ]; then
+ # if not already configured, use value from node variable.
+ IPADDR=$node
+fi
+if [ $remote -eq 0 ]; then
+ runcmd "ipmiutil lan -e -I $IPADDR -u $user -p $pswd $LANPARAMS "
+fi
+runcmd "ipmiutil lan $LANPARAMS "
+if [ $remote -eq 0 ]; then
+ # restore previous IPMI LAN settings
+ runcmd "ipmiutil config $LANPARAMS -r $tmpc"
+fi
+
+ipmiutil serial | grep "No serial channel" >/dev/null 2>&1
+if [ $? -ne 0 ]; then
+ runcmd "ipmiutil serial $LANPARAMS"
+ runcmd "ipmiutil serial -c $LANPARAMS"
+fi
+
+tmpsel=/tmp/selout.$$
+runcmd "ipmiutil sel $LANPARAMS"
+runcmd "ipmiutil sel -e $LANPARAMS"
+runcmd "ipmiutil sel -v $LANPARAMS"
+runcmd "ipmiutil sel -l5 $LANPARAMS"
+echo -n "ipmiutil sel -r"
+ipmiutil sel -r -l20 $LANPARAMS >$tmpsel
+if [ $? -ne 0 ]; then
+ echo "... FAIL $rv" |tee -a $outf
+ nfail=`expr $nfail + 1`
+fi
+echo " ... PASS" |tee -a $outf
+npass=`expr $npass + 1`
+runcmd "ipmiutil sel -f $tmpsel $LANPARAMS "
+
+runcmd "ipmiutil sensor $LANPARAMS"
+runcmd "ipmiutil sensor -v $LANPARAMS"
+runcmd "ipmiutil sensor -g temp,fan,voltage $LANPARAMS"
+runcmd "ipmiutil sensor -c $LANPARAMS"
+if [ $remote -eq 0 ]; then
+ runcmd "$evtsh"
+fi
+
+# Test getevt SEL method
+runcmdr "ipmiutil getevt -s $LANPARAMS -t 3 "
+if [ $remote -eq 0 ]; then
+ # if local, also test getevt MessageBuffer method
+ runcmdr "ipmiutil getevt $LANPARAMS -t 3 "
+fi
+
+# Do not run SOL test if no remote server is configured for SOL.
+if [ $dosol -eq 1 ]; then
+ # runcmd "ipmiutil sol -d $LANPARAMS " (do not check success)
+ echo -n "ipmiutil sol -d ... "
+ echo "# ipmiutil sol -d $LANPARAMS " >> $outf
+ ipmiutil sol -d $LANPARAMS >>$outf 2>&1
+ if [ $? -eq -3 ]; then
+ echo "FAIL"
+ echo "=== ipmiutil sol -d FAIL" >>$outf
+ nfail=`expr $nfail + 1`
+ else
+ echo "PASS"
+ echo "=== ipmiutil sol -d PASS" >>$outf
+ npass=`expr $npass + 1`
+ fi
+
+ cat - <<%%% >$tmpin
+
+root
+password
+ls
+pwd
+echo success
+exit
+~.
+%%%
+ runcmd "ipmiutil sol -a $LANPARAMS -i $tmpin"
+fi
+
+
+runcmd "ipmiutil wdt $LANPARAMS"
+runcmd "ipmiutil wdt -e -a0 -t 5 -p 2 $LANPARAMS"
+runcmd "ipmiutil wdt -c $LANPARAMS"
+runcmd "ipmiutil wdt -r $LANPARAMS"
+sleep 5
+runcmd "ipmiutil wdt -d $LANPARAMS"
+runcmd "ipmiutil sel -l5 $LANPARAMS"
+
+runcmdr "ipmiutil discover -a"
+
+CMD="ipmiutil events 18 00 02 02 00 00 00 20 00 04 09 01 6f 44 0f ff"
+echo -n "ipmiutil events (AC Lost)"
+echo "# $CMD" >>$outf
+$CMD >>$outf
+$TAIL2 $outf |grep "AC Lost" >/dev/null
+if [ $? -ne 0 ]; then
+ echo " ... FAIL 1" |tee -a $outf
+ nfail=`expr $nfail + 1`
+fi
+echo " ... PASS" |tee -a $outf
+npass=`expr $npass + 1`
+
+CMD="ievents -p -s $sfil B3 E8 00 0E 0C C7 1B A0 11 08 12 7F 10 90 FF FF 20 20 00 20 02 15 01 41 0F FF"
+echo -n "ievents -p (Redundancy Lost)"
+echo "# $CMD" >>$outf
+$CMD >>$outf
+$TAIL2 $outf |grep "Redundancy Lost" >/dev/null
+if [ $? -ne 0 ]; then
+ echo " ... FAIL 1" |tee -a $outf
+ nfail=`expr $nfail + 1`
+fi
+echo " ... PASS" |tee -a $outf
+npass=`expr $npass + 1`
+
+CMD="ipmiutil events -s $sfil2 -p B5 19 00 15 17 C6 C9 D0 00 02 B2 76 C1 16 FF FF 20 20 10 20 20 00 00 52 1D 20 00 00 00 00 00 00 00 00 00 00 00 00 C1 00 00 00 00 00 00 00 00 00 00"
+echo -n "ipmiutil events -p (Lo Crit)"
+echo "# $CMD" >>$outf
+$CMD >>$outf
+$TAIL2 $outf |grep "Lo Crit thresh" >/dev/null
+if [ $? -ne 0 ]; then
+ echo " ... FAIL 1" |tee -a $outf
+ nfail=`expr $nfail + 1`
+fi
+echo " ... PASS" |tee -a $outf
+npass=`expr $npass + 1`
+
+# The alarms command will fail on systems without an alarm panel.
+echo "MODEL=$MODEL" >> $outf
+case "$MODEL" in
+ TIGW1U) tamok=1
+ ;;
+ TIGH2U) tamok=1
+ ;;
+ TIGI2U) tamok=1
+ ;;
+ TIGPR2U) tamok=1
+ ;;
+ TIGPT1U) tamok=1
+ ;;
+ TSRLT2) tamok=1
+ ;;
+ TSRMT2) tamok=1
+ ;;
+ CG2100) tamok=1
+ ;;
+ *) tamok=0
+ ;;
+esac
+if [ $tamok -eq 1 ]; then
+ picmg=0
+ runcmd "ipmiutil alarms $LANPARAMS"
+ runcmdr "ipmiutil alarms -m1 -n1 $LANPARAMS"
+ runcmdr "ipmiutil alarms -o $LANPARAMS"
+fi
+runcmd "ipmiutil alarms -i10 $LANPARAMS"
+
+# The rackmount servers with TAM are not PICMG,
+# so if the have TAM, skip the PICMG test.
+# otherwise try a PICMG test.
+if [ $tamok -eq 0 ]; then
+ picmg=1
+ CMD="ipmiutil picmg $LANPARAMS properties"
+ echo -n "$CMD"
+ echo "# $CMD" >>$outf
+ $CMD >>$outf
+ rv=$?
+ if [ $rv -eq 193 ]; then
+ echo " ... N/A"
+ picmg=0
+ elif [ $? -ne 0 ]; then
+ echo " ... FAIL $rv" |tee -a $outf
+ nfail=`expr $nfail + 1`
+ else
+ echo " ... PASS" |tee -a $outf
+ npass=`expr $npass + 1`
+ fi
+fi
+
+# The firmware firewall feature is only for PICMG
+if [ $picmg -eq 1 ]; then
+ CMD="ipmiutil firewall $LANPARAMS info"
+ echo -n "$CMD"
+ echo "# $CMD" >>$outf
+ $CMD >>$outf
+ rv=$?
+ if [ $rv -ne 0 ]; then
+ echo " ... FAIL $rv" |tee -a $outf
+ nfail=`expr $nfail + 1`
+ else
+ echo " ... PASS" |tee -a $outf
+ npass=`expr $npass + 1`
+ fi
+fi
+
+if [ "$uarch" = "ia64" ]
+then
+ # Note that ireset -n (NMI) causes a full reset on ia64
+ echo "ia64, so skip ipmiutil reset -n" |tee -a $outf
+else
+ # Use hwreset -n to send an NMI.
+ runcmd "ipmiutil reset -n $LANPARAMS "
+fi
+if [ $remote -eq 1 ]; then
+ # reset if the system is remote
+ runcmd "ipmiutil reset -o $LANPARAMS "
+ # after soft-reboot, could do waitready here instead
+ sleep 80
+ runcmd "ipmiutil reset -r -w $LANPARAMS "
+ sleep 1
+ runcmd "ipmiutil reset -c -w $LANPARAMS "
+ sleep 1
+ runcmd "ipmiutil reset -d -w $LANPARAMS "
+ sleep 1
+ runcmd "ipmiutil reset -w -u $LANPARAMS "
+ # if the system isn't fully down yet, the up request may be ignored.
+ sleep 1
+ runcmd "ipmiutil reset -u $LANPARAMS "
+ # wait for init to complete
+ sleep 80
+ # Should be up now, but some systems take a bit longer for
+ # everything to come back up. So we do this last.
+fi
+
+echo "## Passed=$npass, Failed=$nfail, see $outf for detailed results"
+# remove temp files (tmpcmdr=/tmp/cmdoutr.$$ tmpcmd=/tmp/cmdout.$$)
+rm -f $tmpc $tmpin /tmp/cmdout* /tmp/selout*
+popd
+exit 0
+