1 #!/bin/sh 2 # 3 # Command library that provides a boilerplate set of functions and variables 4 # required for all bourne shell based scripts. 5 # 6 # Copyright (C) 2009, Cisco Systems Inc. 7 # 8 # This program is free software; you can redistribute it and/or modify 9 # it under the terms of the GNU General Public License as published by 10 # the Free Software Foundation; either version 2 of the License, or 11 # (at your option) any later version. 12 # 13 # This program is distributed in the hope that it will be useful, 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 # GNU General Public License for more details. 17 # 18 # You should have received a copy of the GNU General Public License along 19 # with this program; if not, write to the Free Software Foundation, Inc., 20 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 # 22 # Garrett Cooper, August 2009 23 # 24 25 set -u 26 27 export SHELL_DEBUG=${SHELL_DEBUG:=0} 28 if [ "x$SHELL_DEBUG" = x1 ] ; then 29 set -x 30 fi 31 32 #============================================================================= 33 # FUNCTION: tst_cleanup 34 # PURPOSE: Clean up after a testcase. 35 #============================================================================= 36 tst_cleanup() 37 { 38 # Disable the trap EXIT handler. 39 trap '' EXIT 40 # To ensure set -u passes... 41 TCtmp=${TCtmp:=} 42 tst_resm TINFO "Cleaning up." 43 # Nuke the testcase temporary directory if it exists. 44 [ -d "$TCtmp" ] && rm -rf "$TCtmp" 45 } 46 47 #============================================================================= 48 # FUNCTION: setup 49 # PURPOSE: Setup the test environment. 50 #============================================================================= 51 tst_setup() 52 { 53 54 TST_COUNT=1 55 TST_TOTAL=${TST_TOTAL:=1} 56 export TCID TST_COUNT TST_TOTAL 57 58 for varname in TST_TOTAL; do 59 if eval "test -z \"\$${varname}\""; then 60 end_testcase "You must set ${varname} before calling setup()." 61 fi 62 done 63 64 LTPROOT=${LTPROOT:="../../../../"} 65 TEMPDIR=${TEMPDIR:=/tmp} 66 67 TCtmp=${TCtmp:=$TEMPDIR/$TC$$} 68 # User wants a temporary sandbox to play with. 69 if [ -n "$TCtmp" -a "$TCtmp" != "$TEMPDIR/$$" ] ; then 70 test -d "$TCtmp" || mkdir -p "$TCtmp" 71 # Clean up on exit. 72 trap tst_cleanup EXIT 73 fi 74 75 } 76 77 #============================================================================= 78 # FUNCTION NAME: end_testcase 79 # 80 # FUNCTION DESCRIPTION: Print out whether or not a test failed. Do not use 81 # this when TBROK messages should be applied. 82 # 83 # PARAMETERS: Failure message, or "" / unset if passed. 84 # 85 # RETURNS: None. 86 #============================================================================= 87 end_testcase() 88 { 89 if [ $# -eq 0 ]; then 90 tst_resm TPASS "Test successful" 91 exit 0 92 else 93 tst_resm TFAIL "Test broken: $*" 94 exit 1 95 fi 96 } 97 98 #============================================================================= 99 # FUNCTION: exists 100 # PURPOSE: Check if command(s) used by this test script exist. 101 #============================================================================= 102 exists() 103 { 104 for cmd in $*; do 105 if ! command -v $cmd >/dev/null 2>&1; then 106 end_testcase "$cmd: command not found" 107 exit 1 108 fi 109 done 110 } 111 112 incr_tst_count() 113 { 114 : $(( TST_COUNT += 1 )) 115 } 116 117 tst_require_root() 118 { 119 if [ "x$(id -u)" != "x0" ]; then 120 tst_resm TCONF "You must be root to execute this test" 121 exit 0 122 fi 123 } 124 125 # 126 # $0 is maintained by the caller script; tested on FreeBSD (ash) and Gentoo 127 # GNU/Linux (bash) -- assuming you aren't calling this from another function 128 # or command: 129 # 130 # foo.sh: 131 # echo ${0##*/} 132 # . ${$0%%*}/bar.sh 133 # bar.sh: 134 # echo ${0##*/} 135 # echo $SHELL 136 # 137 # Gentoo: 138 # gcooper@orangebox ~/Desktop $ ./foo.sh 139 # foo.sh 140 # foo.sh 141 # /bin/bash 142 # gcooper@orangebox ~/Desktop $ uname -sr 143 # Linux 2.6.29-gentoo-r5 144 # 145 # FreeBSD: 146 # $ ./foo.sh 147 # foo.sh 148 # foo.sh 149 # /bin/sh 150 # $ uname -sr 151 # FreeBSD 8.0-BETA2 152 # 153 TCID=${TCID:=} 154 [ -z "$TCID" ] && TCID=${0##*/} 155 TC=$(echo "$TCID" | awk '{ sub( /[0-9]+$/,""); print; }') 156 157 . daemonlib.sh 158