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