xref: /aosp_15_r20/external/ltp/testcases/lib/cmdlib.sh (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
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