blob: 7e0c771e728081622db62e1f1027a3ca7e240001 (
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
#!/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="$testcase"
testname="${testname##*/}" # take basename
if grep "^# CONFIG_$uc_applet is not set$" "$bindir/.config" >/dev/null; then
echo "UNTESTED: $testname"
return 0
fi
if grep "^# FEATURE: " "$testcase" >/dev/null; then
local feature=$(sed -ne 's/^# FEATURE: //p' "$testcase")
if grep "^# $feature is not set$" "$bindir/.config" >/dev/null; 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 -ne 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_oldstyle_applet_tests()
{
local applet="$1"
local status=0
for testcase in "$tsdir/$applet"/*; do
# switch on basename of $testcase
case "${testcase##*/}" in
\#*)
continue
;;
*\~)
continue
;;
"CVS")
continue
;;
.*)
continue
;;
esac
run_applet_testcase "$applet" "$testcase"
test $? -eq 0 || status=1
done
return $status
}
lcwd=$(pwd)
[ x"$tsdir" != x ] || tsdir="$lcwd"
[ x"$bindir" != x ] || bindir="${lcwd%/*}" # one directory up from $lcwd
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
case "$applet" in
"links")
continue
;;
"CVS")
continue
;;
.*)
continue
;;
esac
# Any old-style tests for this applet?
if [ -d "$tsdir/$applet" ]; then
run_oldstyle_applet_tests "$applet"
test $? -eq 0 || status=1
fi
# Is this a new-style test?
if [ -f "$applet.tests" ]; then
if [ ! -h "$LINKSDIR/$applet" ]; then
# (avoiding bash'ism "${applet:0:4}")
if ! echo "$applet" | grep "^all_" >/dev/null; then
echo "SKIPPED: $applet (not built)"
continue
fi
fi
# echo "Running test $tsdir/$applet.tests"
PATH="$LINKSDIR:$tsdir:$bindir:$PATH" "$tsdir/$applet.tests"
test $? -eq 0 || status=1
fi
done
# Leaving the dir makes it somewhat easier to run failed test by hand
#rm -rf "$LINKSDIR"
if [ $status -ne 0 -a x"$VERBOSE" = x ]; then
echo "Failures detected, running with -v (verbose) will give more info"
fi
exit $status
|