Megatest

mt_laststep at [af3460b16c]
Login

File utils/mt_laststep artifact 14b0f87d14 part of check-in af3460b16c


#!/bin/bash

if [ $MT_CMDINFO == "" ];then
  echo "ERROR: $0 should be run within a megatest test environment"
  exit
fi

# Purpose: run a step, record start and end with exit codes, if sucessful
# update test status with PASS, else update with FAIL
#
# Call like this:
# mt_laststep stepname command ....
# 
# This expects that you have a logpro file named stepname.logpro and must be run
# inside a test environment (click on xterm button on a test control panel
# then source megatest.csh (if you are using tcsh) or megatest.sh (if you are using
# bash, sh or zsh)
# 
# Example: copy files
# mt_runstep copy_files cp $frompath $topath
#
# Use a copy_files.logpro file like this:
# (expect:error in "LogFileBody" = 0 "Any err/error/warn/warning" #/(err|warn)/)
# 
stepname=$1;shift

# Theoretically could call megatest directly like the following line but
# we'll do each individual step so folks can see what is going on.
#
# $MT_MEGATEST -runstep $stepname -logpro ${stepname}.logpro "$*" || exit $?

# First, register the start of this step
$MT_MEGATEST -step $stepname :state start :status n/a 

# Second, run the command (the remaining stuff on the command line after the stepname)
# We could put the results in a log file for processing but we are relying on logpro...
# $* 2>&1 ${stepname}.log

# So lets use a pipe to logpro, put the output from logpro into stepname_logpro.log
$* 2>&1| logpro ${stepname}.logpro ${stepname}.html 2>&1 ${stepname}_logpro.log 

allstatus=(${PIPESTATUS[0]} ${PIPESTATUS[1]})
runstatus=${allstatus[0]}
logprostatus=${allstatus[1]}

echo runstatus: $runstatus logprostatus: $logprostatus

# Record the step completion and exit status
$MT_MEGATEST -step $stepname :state end :status $runstatus

# If the test exits with non-zero, we will record FAIL even if logpro
# says it is a PASS

if [ $runstatus -ne 0 ]; then
    finalstatus=FAIL
    exitstatus=$runstatus
elif [ $logprostatus -eq 0 ]; then
    finalstatus=PASS
    exitstatus=$logprostatus
elif [ $logprostatus -eq 2 ]; then
    finalstatus=WARN
    exitstatus=0
else 
    finalstatus=FAIL
    exitstatus=1
fi

# test ${logprostatus} -eq 0 && finalstatus="PASS"
# test ${logprostatus} -eq 1 && finalstatus="FAIL"
# test ${logprostatus} -eq 2 && finalstatus="WARN"
# test ${logprostatus} -gt 2 && finalstatus="FAIL"

# Set the final test status
$MT_MEGATEST -test-status :state COMPLETED :status $finalstatus

exit $exitstatus