diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-07-06 18:04:32 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-07-06 18:04:32 +0200 |
commit | a7f89980e5b3f4b9a74c70dbc5ffe8aabd28be28 (patch) | |
tree | 41c4deec1fdfbafd7821b4ca7a9772ac0abd92f5 /test/testipmi.sh |
Imported Upstream version 2.9.3upstream/2.9.3
Diffstat (limited to 'test/testipmi.sh')
-rwxr-xr-x | test/testipmi.sh | 400 |
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 + |