blob: fc8392ac537dacf9527e59f03d1fddf870be3c33 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#!/bin/sh
# Usage:
# runtest [applet1] [applet2...]
# Run one old-style test.
# Tests are stored in applet/testcase shell scripts.
# They are run using "sh -x -e applet/testcase".
# Option -e will make testcase stop on the first failed command.
run_applet_testcase()
{
local applet=$1
local testcase=$2
local status
local uc_applet=$(echo $applet | tr a-z A-Z)
local testname=$(basename $testcase)
if grep -q "^# CONFIG_${uc_applet} is not set$" $bindir/.config; then
echo "UNTESTED: $testname"
return 0
fi
if grep -q "^# FEATURE: " $testcase; then
local feature=`sed -ne 's/^# FEATURE: //p' $testcase`
if grep -q "^# ${feature} is not set$" $bindir/.config; then
echo "UNTESTED: $testname"
return 0
fi
fi
rm -rf ".tmpdir.$applet"
mkdir -p ".tmpdir.$applet"
cd ".tmpdir.$applet" || return 1
# echo "Running testcase $testcase"
d="$tsdir" sh -x -e "$testcase" >"$testname.stdout.txt" 2>&1
status=$?
if [ $status != 0 ]; then
echo "FAIL: $testname"
if [ x"$VERBOSE" != x ]; then
cat "$testname.stdout.txt"
fi
else
echo "PASS: $testname"
fi
cd ..
rm -rf ".tmpdir.$applet"
return $status
}
# Run all old-style tests for given applet
run_applet_tests()
{
local applet=$1
local status=0
for testcase in $tsdir/$applet/*; do
if [ "$testcase" = "$tsdir/$applet/CVS" ]; then
continue
fi
run_applet_testcase $applet $testcase
test $? = 0 || status=1
done
return $status
}
[ -n "$tsdir" ] || tsdir=$(pwd)
[ -n "$bindir" ] || bindir=$(dirname $(pwd))
PATH="$bindir:$PATH"
if [ x"$VERBOSE" = x ]; then
export VERBOSE=
fi
if [ x"$1" = x"-v" ]; then
export VERBOSE=1
shift
fi
implemented=$(
$bindir/busybox 2>&1 |
while read line; do
if [ x"$line" = x"Currently defined functions:" ]; then
xargs | sed 's/,//g'
break
fi
done
)
applets="$implemented"
if [ $# -ne 0 ]; then
applets="$@"
fi
# Populate a directory with links to all busybox applets
LINKSDIR="$bindir/runtest-tempdir-links"
rm -rf "$LINKSDIR" 2>/dev/null
mkdir "$LINKSDIR"
for i in $implemented; do
ln -s $bindir/busybox "$LINKSDIR"/$i
done
# Set up option flags so tests can be selective.
export OPTIONFLAGS=:$(sed -nr 's/^CONFIG_//p' $bindir/.config | sed 's/=.*//' | xargs | sed 's/ /:/g')
status=0
for applet in $applets; do
if [ "$applet" = "links" ]; then continue; fi
# Any old-style tests for this applet?
if [ "$applet" != "CVS" -a -d "$tsdir/$applet" ]; then
run_applet_tests "$applet"
test $? = 0 || status=1
fi
# Is this a new-style test?
if [ -f "${applet}.tests" ]; then
if [ ! -h "$LINKSDIR/$applet" ] && [ "${applet:0:4}" != "all_" ]; then
echo "SKIPPED: $applet (not built)"
continue
fi
# echo "Running test ${tsdir:-.}/${applet}.tests"
PATH="$LINKSDIR:$tsdir:$bindir:$PATH" "${tsdir:-.}/${applet}.tests"
test $? = 0 || status=1
fi
done
# Leaving the dir makes it somewhat easier to run failed test by hand
#rm -rf "$LINKSDIR"
if [ $status != 0 -a x"$VERBOSE" = x ]; then
echo "Failures detected, running with -v (verbose) will give more info"
fi
exit $status
|