blob: fc0d66d16e84687aa11c97597389ef61ded098f3 [file] [log] [blame]
#Number of times to sleep
BOOT_TIMEOUT="20";
#Username/password for for ssh to FSP machines
SSHUSER=${FSPSSHUSER:-}
SSHPASS=${FSPSSHPASS:-}
if [ -z $SSHUSER ] || [ -z $SSHPASS ] ; then
msg "Set FSPSSHUSER and FSPSSHPASS in ENV or ~/.skiboot_boot_tests"
exit 1;
fi
export SSHUSER SSHPASS
#IPMI
IPMI_AUTH="-P ${IPMI_PASS:-foo}";
# Strip control characters from IPMI before grepping?
STRIP_CONTROL=1
# How do we SSH in, cp files across?
SSHCMD="sshpass -e ssh -l $SSHUSER -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $target";
REMOTECPCMD="sshpass -e scp -o User=$SSHUSER -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ";
GET_PROFILE='. /etc/profile; test -e /home/dev/.profile && . /home/dev/.profile';
function sshcmd {
$SSHCMD $*;
}
function is_off {
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
return $([ "$state" = "standby" ]);
}
function poweroff {
i=0;
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
if [ "$state" = "standby" ]; then
# already off
return 0
fi
$SSHCMD "$GET_PROFILE; panlexec -f 8";
msg "Waiting 30 seconds..."
sleep 30
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
while [ "$state" != "standby" -a "$i" -lt "$BOOT_TIMEOUT" ] ; do
msg "Waiting $BOOT_SLEEP_PERIOD more seconds..."
sleep $BOOT_SLEEP_PERIOD;
i=$(expr $i + 1);
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
done;
# sleep a little bit longer --- p81 was getting a bit confused.
sleep 10
msg "Finishing with state '$state'."
}
function force_primary_side {
return 0
}
function flash {
#Make a backup of the current lids
$REMOTECPCMD $target:/opt/extucode/80f00100.lid 80f00100.lid.bak &&
$REMOTECPCMD $target:/opt/extucode/80f00101.lid 80f00101.lid.bak &&
$REMOTECPCMD $target:/opt/extucode/80f00102.lid 80f00102.lid.bak;
if [ $? -ne 0 ] ; then
error "Couldn't make backup of currently installed lids";
fi
if [ "${LID[0]}" != "" ]; then
$REMOTECPCMD ${LID[0]} $target:/opt/extucode/80f00100.lid ||
error "Error copying lid ${LID[0]}";
sum=$(md5sum ${LID[0]} | cut -f 1 -d ' ');
$SSHCMD "$GET_PROFILE;
sumr=\$(md5sum /opt/extucode/80f00100.lid | cut -f 1 -d ' ');
if [ \"$sum\" != \"\$sumr\" ] ; then
exit 1;
fi;" || error "MD5sum doesn't match for ${LID[0]}"
fi
if [ "${LID[1]}" != "" ]; then
$REMOTECPCMD ${LID[1]} $target:/opt/extucode/80f00101.lid ||
error "Error copying lid";
sum=$(md5sum ${LID[1]} | cut -f 1 -d ' ');
$SSHCMD "$GET_PROFILE;
sumr=\$(md5sum /opt/extucode/80f00101.lid | cut -f 1 -d ' ');
if [ \"$sum\" != \"\$sumr\" ] ; then
exit 1;
fi;" || error "MD5sum doesn't match for ${LID[1]}"
fi
if [ "${LID[2]}" != "" ]; then
$REMOTECPCMD ${LID[2]} $target:/opt/extucode/80f00102.lid ||
error "Error copying lid";
sum=$(md5sum ${LID[2]} | cut -f 1 -d ' ');
$SSHCMD "$GET_PROFILE;
sumr=\$(md5sum /opt/extucode/80f00102.lid | cut -f 1 -d ' ');
if [ \"$sum\" != \"\$sumr\" ] ; then
exit 1;
fi;" || error "MD5sum doesn't match for ${LID[2]}"
fi
$SSHCMD "$GET_PROFILE;
if [ \$(smgr mfgState) != 'standby' ] ; then
exit 1;
fi
cupdmfg -opt | grep '80f0010'";
if [ $? -ne 0 ] ; then
error "Could not install lids on the FSP";
fi
sleep 2; #Don't rush the fsp
}
function boot_firmware {
ISTEP_LOG=$(mktemp --tmpdir builder-1.XXXXXX);
$SSHCMD "$GET_PROFILE; istep" &> $ISTEP_LOG &
msg "Waiting 90 seconds for $target to boot";
sleep 90;
i=0;
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
while [ \( "$state" != "runtime" \) -a \( "$i" -lt "$BOOT_TIMEOUT" \) ] ; do
msg "Waiting $BOOT_SLEEP_PERIOD more seconds (istep: `grep iStep $ISTEP_LOG|tail -n 1`)";
sleep "$BOOT_SLEEP_PERIOD";
i=$(expr $i + 1);
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
done;
if [ "$i" -eq "$BOOT_TIMEOUT" ] ; then
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
case "$state" in
"ipling")
echo "$target: still hasn't come up but firmware hasn't specifically crashed";
;;
"dumping")
echo "$target: has crashed";
;;
"runtime")
echo "$target: Oops, looks like system has managed to come up...";
;;
"standby")
echo "$target: System is powered off? How can this be?";
;;
*)
echo "$target: is an unknown state '$state'";
;;
esac
echo "$target: istep log";
cat $ISTEP_LOG;
rm -rf $ISTEP_LOG
error "Boot test on $target failed";
fi
rm -rf $ISTEP_LOG;
}
function machine_sanity_test {
sshcmd true;
if [ $? -ne 0 ]; then
echo "$target: Failed to SSH to $target..."
echo "$target: Command was: $SSHCMD true"
error "Try connecting manually to diagnose the issue."
fi
$SSHCMD "$GET_PROFILE; test -d /nfs/bin"
if [ $? -ne 0 ]; then
echo "$target: Failed to read /nfs/bin"
error "Is /nfs mounted on the FSP?"
fi
$SSHCMD "$GET_PROFILE; which md5sum > /dev/null && which cupdmfg > /dev/null"
if [ $? -ne 0 ]; then
echo "$target: Missing md5sum or cupdmfg on the FSP?"
error "Is /nfs mounted on the FSP?"
fi
}