#!/bin/sh # # Command library that provides a boilerplate set of functions and variables # required for all bourne shell based scripts. # # Copyright (C) 2009, Cisco Systems Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Ngie Cooper, August 2009 # set -u export SHELL_DEBUG=${SHELL_DEBUG:=0} if [ "x$SHELL_DEBUG" = x1 ] ; then set -x fi #============================================================================= # FUNCTION: tst_cleanup # PURPOSE: Clean up after a testcase. #============================================================================= tst_cleanup() { # Disable the trap EXIT handler. trap '' EXIT # To ensure set -u passes... TCtmp=${TCtmp:=} tst_resm TINFO "Cleaning up." # Nuke the testcase temporary directory if it exists. [ -d "$TCtmp" ] && rm -rf "$TCtmp" } #============================================================================= # FUNCTION: setup # PURPOSE: Setup the test environment. #============================================================================= tst_setup() { TST_COUNT=1 TST_TOTAL=${TST_TOTAL:=1} export TCID TST_COUNT TST_TOTAL for varname in TST_TOTAL; do if eval "test -z \"\$${varname}\""; then end_testcase "You must set ${varname} before calling setup()." fi done LTPROOT=${LTPROOT:="../../../../"} TEMPDIR=${TEMPDIR:=/tmp} TCtmp=${TCtmp:=$TEMPDIR/$TC$$} # User wants a temporary sandbox to play with. if [ -n "$TCtmp" -a "$TCtmp" != "$TEMPDIR/$$" ] ; then test -d "$TCtmp" || mkdir -p "$TCtmp" # Clean up on exit. trap tst_cleanup EXIT fi } #============================================================================= # FUNCTION NAME: end_testcase # # FUNCTION DESCRIPTION: Print out whether or not a test failed. Do not use # this when TBROK messages should be applied. # # PARAMETERS: Failure message, or "" / unset if passed. # # RETURNS: None. #============================================================================= end_testcase() { if [ $# -eq 0 ]; then tst_resm TPASS "Test successful" exit 0 else tst_resm TFAIL "Test broken: $*" exit 1 fi } #============================================================================= # FUNCTION: exists # PURPOSE: Check if command(s) used by this test script exist. #============================================================================= exists() { for cmd in $*; do if ! command -v $cmd >/dev/null 2>&1; then end_testcase "$cmd: command not found" exit 1 fi done } incr_tst_count() { : $(( TST_COUNT += 1 )) } tst_require_root() { if [ "x$(id -u)" != "x0" ]; then tst_resm TCONF "You must be root to execute this test" exit 0 fi } # # $0 is maintained by the caller script; tested on FreeBSD (ash) and Gentoo # GNU/Linux (bash) -- assuming you aren't calling this from another function # or command: # # foo.sh: # echo ${0##*/} # . ${$0%%*}/bar.sh # bar.sh: # echo ${0##*/} # echo $SHELL # # Gentoo: # gcooper@orangebox ~/Desktop $ ./foo.sh # foo.sh # foo.sh # /bin/bash # gcooper@orangebox ~/Desktop $ uname -sr # Linux 2.6.29-gentoo-r5 # # FreeBSD: # $ ./foo.sh # foo.sh # foo.sh # /bin/sh # $ uname -sr # FreeBSD 8.0-BETA2 # TCID=${TCID:=} [ -z "$TCID" ] && TCID=${0##*/} TC=$(echo "$TCID" | awk '{ sub( /[0-9]+$/,""); print; }') . daemonlib.sh