Contents of /trunk/mkinitrd-magellan/busybox/testsuite/testing.sh
Parent Directory | Revision Log
Revision 984 -
(show annotations)
(download)
(as text)
Sun May 30 11:32:42 2010 UTC (13 years, 11 months ago) by niro
File MIME type: application/x-sh
File size: 3938 byte(s)
Sun May 30 11:32:42 2010 UTC (13 years, 11 months ago) by niro
File MIME type: application/x-sh
File size: 3938 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 | # Simple test harness infrastructurei for BusyBox |
2 | # |
3 | # Copyright 2005 by Rob Landley |
4 | # |
5 | # License is GPLv2, see LICENSE in the busybox tarball for full license text. |
6 | |
7 | # This file defines two functions, "testing" and "optional" |
8 | # and a couple more... |
9 | |
10 | # The following environment variables may be set to enable optional behavior |
11 | # in "testing": |
12 | # VERBOSE - Print the diff -u of each failed test case. |
13 | # DEBUG - Enable command tracing. |
14 | # SKIP - do not perform this test (this is set by "optional") |
15 | # |
16 | # The "testing" function takes five arguments: |
17 | # $1) Test description |
18 | # $2) Command(s) to run. May have pipes, redirects, etc |
19 | # $3) Expected result on stdout |
20 | # $4) Data to be written to file "input" |
21 | # $5) Data to be written to stdin |
22 | # |
23 | # The exit value of testing is the exit value of $2 it ran. |
24 | # |
25 | # The environment variable "FAILCOUNT" contains a cumulative total of the |
26 | # number of failed tests. |
27 | |
28 | # The "optional" function is used to skip certain tests, ala: |
29 | # optional CONFIG_FEATURE_THINGY |
30 | # |
31 | # The "optional" function checks the environment variable "OPTIONFLAGS", |
32 | # which is either empty (in which case it always clears SKIP) or |
33 | # else contains a colon-separated list of features (in which case the function |
34 | # clears SKIP if the flag was found, or sets it to 1 if the flag was not found). |
35 | |
36 | export FAILCOUNT=0 |
37 | export SKIP= |
38 | |
39 | # Helper for helpers. Oh my... |
40 | |
41 | test x"$ECHO" != x"" || { |
42 | ECHO="echo" |
43 | test x"`echo -ne`" = x"" || { |
44 | # Compile and use a replacement 'echo' which understands -e -n |
45 | ECHO="$PWD/echo-ne" |
46 | test -x "$ECHO" || { |
47 | gcc -Os -o "$ECHO" ../scripts/echo.c || exit 1 |
48 | } |
49 | } |
50 | export ECHO |
51 | } |
52 | |
53 | # Helper functions |
54 | |
55 | optional() |
56 | { |
57 | option=`echo ":$OPTIONFLAGS:" | grep ":$1:"` |
58 | # Not set? |
59 | if [ -z "$1" ] || [ -z "$OPTIONFLAGS" ] || [ ${#option} -ne 0 ] |
60 | then |
61 | SKIP= |
62 | return |
63 | fi |
64 | SKIP=1 |
65 | } |
66 | |
67 | # The testing function |
68 | |
69 | testing() |
70 | { |
71 | NAME="$1" |
72 | [ -n "$1" ] || NAME="$2" |
73 | |
74 | if [ $# -ne 5 ] |
75 | then |
76 | echo "Test $NAME has wrong number of arguments (must be 5) ($# $*)" >&2 |
77 | exit 1 |
78 | fi |
79 | |
80 | [ -z "$DEBUG" ] || set -x |
81 | |
82 | if [ -n "$SKIP" ] |
83 | then |
84 | echo "SKIPPED: $NAME" |
85 | return 0 |
86 | fi |
87 | |
88 | $ECHO -ne "$3" > expected |
89 | $ECHO -ne "$4" > input |
90 | [ -z "$VERBOSE" ] || echo "echo -ne '$5' | $2" |
91 | $ECHO -ne "$5" | eval "$2" > actual |
92 | RETVAL=$? |
93 | |
94 | if cmp expected actual >/dev/null 2>/dev/null |
95 | then |
96 | echo "PASS: $NAME" |
97 | else |
98 | FAILCOUNT=$(($FAILCOUNT + 1)) |
99 | echo "FAIL: $NAME" |
100 | [ -z "$VERBOSE" ] || diff -u expected actual |
101 | fi |
102 | rm -f input expected actual |
103 | |
104 | [ -z "$DEBUG" ] || set +x |
105 | |
106 | return $RETVAL |
107 | } |
108 | |
109 | # Recursively grab an executable and all the libraries needed to run it. |
110 | # Source paths beginning with / will be copied into destpath, otherwise |
111 | # the file is assumed to already be there and only its library dependencies |
112 | # are copied. |
113 | |
114 | mkchroot() |
115 | { |
116 | [ $# -lt 2 ] && return |
117 | |
118 | $ECHO -n . |
119 | |
120 | dest=$1 |
121 | shift |
122 | for i in "$@" |
123 | do |
124 | #bashism: [ "${i:0:1}" == "/" ] || i=$(which $i) |
125 | i=$(which $i) # no-op for /bin/prog |
126 | [ -f "$dest/$i" ] && continue |
127 | if [ -e "$i" ] |
128 | then |
129 | d=`echo "$i" | grep -o '.*/'` && |
130 | mkdir -p "$dest/$d" && |
131 | cat "$i" > "$dest/$i" && |
132 | chmod +x "$dest/$i" |
133 | else |
134 | echo "Not found: $i" |
135 | fi |
136 | mkchroot "$dest" $(ldd "$i" | egrep -o '/.* ') |
137 | done |
138 | } |
139 | |
140 | # Set up a chroot environment and run commands within it. |
141 | # Needed commands listed on command line |
142 | # Script fed to stdin. |
143 | |
144 | dochroot() |
145 | { |
146 | mkdir tmpdir4chroot |
147 | mount -t ramfs tmpdir4chroot tmpdir4chroot |
148 | mkdir -p tmpdir4chroot/{etc,sys,proc,tmp,dev} |
149 | cp -L testing.sh tmpdir4chroot |
150 | |
151 | # Copy utilities from command line arguments |
152 | |
153 | $ECHO -n "Setup chroot" |
154 | mkchroot tmpdir4chroot $* |
155 | echo |
156 | |
157 | mknod tmpdir4chroot/dev/tty c 5 0 |
158 | mknod tmpdir4chroot/dev/null c 1 3 |
159 | mknod tmpdir4chroot/dev/zero c 1 5 |
160 | |
161 | # Copy script from stdin |
162 | |
163 | cat > tmpdir4chroot/test.sh |
164 | chmod +x tmpdir4chroot/test.sh |
165 | chroot tmpdir4chroot /test.sh |
166 | umount -l tmpdir4chroot |
167 | rmdir tmpdir4chroot |
168 | } |
Properties
Name | Value |
---|---|
svn:executable | * |