d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# CDDL HEADER START
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# The contents of this file are subject to the terms of the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Common Development and Distribution License (the "License").
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# You may not use this file except in compliance with the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# or http://www.opensolaris.org/os/licensing.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# See the License for the specific language governing permissions
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# and limitations under the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# CDDL HEADER END
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Use is subject to license terms.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy. ${STF_TOOLS}/include/stf.shlib
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Output an assertion
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - assertion text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_assert
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printline ASSERTION: "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Output a comment
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - comment text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_note
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printline NOTE: "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Execute and print command with status where success equals non-zero result
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - command to execute
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# return 0 if command fails, otherwise return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_neg
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_neg_expect "" "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $?
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Execute a positive test and exit $STF_FAIL is test fails
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - command to execute
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_must
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_pos "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( $? != 0 )) && log_fail
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Execute a negative test and exit $STF_FAIL if test passes
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - command to execute
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_mustnot
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_neg "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( $? != 0 )) && log_fail
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Execute a negative test with keyword expected, and exit
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $STF_FAIL if test passes
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 - keyword expected
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2-$@ - command to execute
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_mustnot_expect
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_neg_expect "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( $? != 0 )) && log_fail
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Execute and print command with status where success equals non-zero result
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# or output includes expected keyword
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 - keyword expected
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2-$@ - command to execute
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# return 0 if command fails, or the output contains the keyword expected,
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# return 1 otherwise
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_neg_expect
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset out=""
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset logfile="/tmp/log.$$"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset ret=1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset expect=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy shift
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while [[ -e $logfile ]]; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy logfile="$logfile.$$"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy "$@" 2>$logfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset status=$?
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy out="/usr/bin/cat $logfile"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # unexpected status
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( $status == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -u2 $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printerror "$@" "unexpectedly exited $status"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # missing binary
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy elif (( $status == 127 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -u2 $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printerror "$@" "unexpectedly exited $status (File not found)"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # bus error - core dump
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy elif (( $status == 138 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -u2 $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printerror "$@" "unexpectedly exited $status (Bus Error)"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # segmentation violation - core dump
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy elif (( $status == 139 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -u2 $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printerror "$@" "unexpectedly exited $status (SEGV)"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $out | /usr/bin/egrep -i "internal error|assertion failed" \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # internal error or assertion failed
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( $? == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -u2 $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printerror "$@" "internal error or assertion failure" \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy " exited $status"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy elif [[ -n $expect ]] ; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $out | /usr/bin/grep -i "$expect" > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( $? == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ret=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -u2 $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printerror "$@" "unexpectedly exited $status"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ret=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( $ret == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ -n $LOGAPI_DEBUG ]] && print $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printsuccess "$@" "exited $status"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _recursive_output $logfile "false"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $ret
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Execute and print command with status where success equals zero result
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ command to execute
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# return command exit status
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_pos
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset out=""
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset logfile="/tmp/log.$$"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while [[ -e $logfile ]]; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy logfile="$logfile.$$"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy "$@" 2>$logfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset status=$?
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy out="/usr/bin/cat $logfile"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( $status != 0 )) ; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -u2 $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printerror "$@" "exited $status"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $out | /usr/bin/egrep -i "internal error|assertion failed" \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # internal error or assertion failed
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $? -eq 0 ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -u2 $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printerror "$@" "internal error or assertion failure" \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy " exited $status"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy status=1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ -n $LOGAPI_DEBUG ]] && print $($out)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printsuccess "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _recursive_output $logfile "false"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $status
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Set an exit handler
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - function(s) to perform on exit
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_onexit
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _CLEANUP="$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Exit functions
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_PASS
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_pass
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_PASS "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_FAIL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_fail
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_FAIL "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_UNRESOLVED
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_unresolved
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_UNRESOLVED "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_NOTINUSE
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_notinuse
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_NOTINUSE "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_UNSUPPORTED
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_unsupported
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_UNSUPPORTED "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_UNTESTED
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_untested
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_UNTESTED "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_UNINITIATED
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_uninitiated
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_UNINITIATED "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_NORESULT
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_noresult
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_NORESULT "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_WARNING
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_warning
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_WARNING "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_TIMED_OUT
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_timed_out
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_TIMED_OUT "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit $STF_OTHER
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction log_other
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _endlog $STF_OTHER "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Internal functions
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov# Execute custom callback scripts on test failure
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov#
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov# callback script paths are stored in TESTFAIL_CALLBACKS, delimited by ':'.
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharovfunction _execute_testfail_callbacks
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov{
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov typeset callback
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov print "$TESTFAIL_CALLBACKS:" | while read -d ":" callback; do
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov if [[ -n "$callback" ]] ; then
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov log_note "Performing test-fail callback ($callback)"
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov $callback
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov fi
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov done
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov}
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Perform cleanup and exit
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 - stf exit code
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2-$n - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction _endlog
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset logfile="/tmp/log.$$"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _recursive_output $logfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov if [[ $1 == $STF_FAIL ]] ; then
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov _execute_testfail_callbacks
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov fi
55a13001fbd9772352bc050632ef966a249dc73bPavel Zakharov
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -n $_CLEANUP ]] ; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset cleanup=$_CLEANUP
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_onexit ""
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_note "Performing local cleanup via log_onexit ($cleanup)"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $cleanup
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset exitcode=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy shift
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( ${#@} > 0 )) && _printline "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy exit $exitcode
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Output a formatted line
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction _printline
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Output an error message
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction _printerror
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printline ERROR: "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Output a success message
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $@ - message text
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction _printsuccess
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy _printline SUCCESS: "$@"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Output logfiles recursively
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 - start file
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 - indicate whether output the start file itself, default as yes.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction _recursive_output #logfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset logfile=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while [[ -e $logfile ]]; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -z $2 || $logfile != $1 ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy /usr/bin/cat $logfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy /usr/bin/rm -f $logfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy logfile="$logfile.$$"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}