Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/testsuite/testing.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (hide annotations) (download) (as text)
Sat Sep 1 22:45:15 2007 UTC (16 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 3601 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 niro 532 # 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 "optionflag"
8    
9     # The following environment variables may be set to enable optional behavior
10     # in "testing":
11     # VERBOSE - Print the diff -u of each failed test case.
12     # DEBUG - Enable command tracing.
13     # SKIP - do not perform this test (this is set by "optionflag")
14     #
15     # The "testing" function takes five arguments:
16     # $1) Description to display when running command
17     # $2) Command line arguments to command
18     # $3) Expected result (on stdout)
19     # $4) Data written to file "input"
20     # $5) Data written to stdin
21     #
22     # The exit value of testing is the exit value of the command it ran.
23     #
24     # The environment variable "FAILCOUNT" contains a cumulative total of the
25     # number of failed tests.
26    
27     # The "optional" function is used to skip certain tests, ala:
28     # optionflag CONFIG_FEATURE_THINGY
29     #
30     # The "optional" function checks the environment variable "OPTIONFLAGS",
31     # which is either empty (in which case it always clears SKIP) or
32     # else contains a colon-separated list of features (in which case the function
33     # clears SKIP if the flag was found, or sets it to 1 if the flag was not found).
34    
35     export FAILCOUNT=0
36     export SKIP=
37    
38     # Helper functions
39    
40     optional()
41     {
42     option=`echo "$OPTIONFLAGS" | egrep "(^|:)$1(:|\$)"`
43     # Not set?
44     if [ -z "$1" ] || [ -z "$OPTIONFLAGS" ] || [ ${#option} -ne 0 ]
45     then
46     SKIP=""
47     return
48     fi
49     SKIP=1
50     }
51    
52     # The testing function
53    
54     testing ()
55     {
56     NAME="$1"
57     [ -z "$1" ] && NAME=$2
58    
59     if [ $# -ne 5 ]
60     then
61     echo "Test $NAME has the wrong number of arguments ($# $*)" >&2
62     exit
63     fi
64    
65     [ -n "$DEBUG" ] && set -x
66    
67     if [ -n "$SKIP" ]
68     then
69     echo "SKIPPED: $NAME"
70     return 0
71     fi
72    
73     echo -ne "$3" > expected
74     echo -ne "$4" > input
75     [ -z "$VERBOSE" ] || echo "echo '$5' | $2"
76     echo -ne "$5" | eval "$2" > actual
77     RETVAL=$?
78    
79     cmp expected actual > /dev/null
80     if [ $? -ne 0 ]
81     then
82     FAILCOUNT=$[$FAILCOUNT+1]
83     echo "FAIL: $NAME"
84     [ -n "$VERBOSE" ] && diff -u expected actual
85     else
86     echo "PASS: $NAME"
87     fi
88     rm -f input expected actual
89    
90     [ -n "$DEBUG" ] && set +x
91    
92     return $RETVAL
93     }
94    
95     # Recursively grab an executable and all the libraries needed to run it.
96     # Source paths beginning with / will be copied into destpath, otherwise
97     # the file is assumed to already be there and only its library dependencies
98     # are copied.
99    
100     function mkchroot
101     {
102     [ $# -lt 2 ] && return
103    
104     echo -n .
105    
106     dest=$1
107     shift
108     for i in "$@"
109     do
110     [ "${i:0:1}" == "/" ] || i=$(which $i)
111     [ -f "$dest/$i" ] && continue
112     if [ -e "$i" ]
113     then
114     d=`echo "$i" | grep -o '.*/'` &&
115     mkdir -p "$dest/$d" &&
116     cat "$i" > "$dest/$i" &&
117     chmod +x "$dest/$i"
118     else
119     echo "Not found: $i"
120     fi
121     mkchroot "$dest" $(ldd "$i" | egrep -o '/.* ')
122     done
123     }
124    
125     # Set up a chroot environment and run commands within it.
126     # Needed commands listed on command line
127     # Script fed to stdin.
128    
129     function dochroot
130     {
131     mkdir tmpdir4chroot
132     mount -t ramfs tmpdir4chroot tmpdir4chroot
133     mkdir -p tmpdir4chroot/{etc,sys,proc,tmp,dev}
134     cp -L testing.sh tmpdir4chroot
135    
136     # Copy utilities from command line arguments
137    
138     echo -n "Setup chroot"
139     mkchroot tmpdir4chroot $*
140     echo
141    
142     mknod tmpdir4chroot/dev/tty c 5 0
143     mknod tmpdir4chroot/dev/null c 1 3
144     mknod tmpdir4chroot/dev/zero c 1 5
145    
146     # Copy script from stdin
147    
148     cat > tmpdir4chroot/test.sh
149     chmod +x tmpdir4chroot/test.sh
150     chroot tmpdir4chroot /test.sh
151     umount -l tmpdir4chroot
152     rmdir tmpdir4chroot
153     }
154    

Properties

Name Value
svn:executable *