Tomato 1.28
[tomato.git] / release / src / router / busybox / testsuite / mount.testroot
blobe18d0461d3112ac78194a67e73c347a99937ec04
1 #!/bin/sh
3 # SUSv3 compliant mount and umount tests.
4 # Copyright 2005 by Rob Landley <rob@landley.net>
5 # Licensed under GPL v2, see file LICENSE for details.
7 if [ -z "$TESTDIR" ]
8 then
9 echo 'Need $TESTDIR'
10 exit 1
13 cd "$TESTDIR"
15 . testing.sh
17 # If we aren't PID 1, barf.
19 #if [ $$ -ne 1 ]
20 #then
21 # echo "SKIPPED: mount test requires emulation environment"
22 # exit 0
23 #fi
25 # Run tests within the chroot environment.
26 dochroot bash rm ls ln cat ps mknod mkdir dd grep cmp diff tail \
27 mkfs.ext2 mkfs.vfat mount umount losetup wc << EOF
28 #!/bin/bash
30 . /testing.sh
32 mknod /dev/loop0 b 7 0
33 mknod /dev/loop1 b 7 1
35 # We need /proc to do much. Make sure we can mount it explicitly.
37 testing "mount no proc [GNUFAIL]" "mount 2> /dev/null || echo yes" "yes\n" "" ""
38 testing "mount /proc" "mount -t proc /proc /proc && ls -d /proc/1" \
39 "/proc/1\n" "" ""
41 # Make sure the last thing in the list is /proc
43 testing "mount list1" "mount | tail -n 1" "/proc on /proc type proc (rw)\n" \
44 "" ""
47 # Create an ext2 image
49 mkdir -p images/{ext2.dir,vfat.dir,test1,test2,test3}
50 dd if=/dev/zero of=images/ext2.img bs=1M count=1 2> /dev/null
51 mkfs.ext2 -F -b 1024 images/ext2.img > /dev/null 2> /dev/null
52 dd if=/dev/zero of=images/vfat.img bs=1M count=1 2> /dev/null
53 mkfs.vfat images/vfat.img > /dev/null
55 # Test mount it
57 testing "mount vfat image (explicitly autodetect type)" \
58 "mount -t auto images/vfat.img images/vfat.dir && mount | tail -n 1 | grep -o 'vfat.dir type vfat'" \
59 "vfat.dir type vfat\n" "" ""
60 testing "mount ext2 image (autodetect type)" \
61 "mount images/ext2.img images/ext2.dir 2> /dev/null && mount | tail -n 1" \
62 "/dev/loop1 on /images/ext2.dir type ext2 (rw)\n" "" ""
63 testing "mount remount ext2 image noatime" \
64 "mount -o remount,noatime images/ext2.dir && mount | tail -n 1" \
65 "/dev/loop1 on /images/ext2.dir type ext2 (rw,noatime)\n" "" ""
66 testing "mount remount ext2 image ro remembers noatime" \
67 "mount -o remount,ro images/ext2.dir && mount | tail -n 1" \
68 "/dev/loop1 on /images/ext2.dir type ext2 (ro,noatime)\n" "" ""
70 umount -d images/vfat.dir
71 umount -d images/ext2.dir
73 testing "mount umount freed loop device" \
74 "mount images/ext2.img images/ext2.dir && mount | tail -n 1" \
75 "/dev/loop0 on /images/ext2.dir type ext2 (rw)\n" "" ""
77 testing "mount block device" \
78 "mount -t ext2 /dev/loop0 images/test1 && mount | tail -n 1" \
79 "/dev/loop0 on /images/test1 type ext2 (rw)\n" "" ""
81 umount -d images/ext2.dir images/test1
83 testing "mount remount nonexistent directory" \
84 "mount -o remount,noatime images/ext2.dir 2> /dev/null || echo yes" \
85 "yes\n" "" ""
87 # Fun with mount -a
89 testing "mount -a no fstab" "mount -a 2>/dev/null || echo yes" "yes\n" "" ""
91 umount /proc
93 # The first field is space delimited, the rest tabs.
95 cat > /etc/fstab << FSTAB
96 /proc /proc proc defaults 0 0
97 # Autodetect loop, and provide flags with commas in them.
98 /images/ext2.img /images/ext2.dir ext2 noatime,nodev 0 0
99 # autodetect filesystem, flags without commas.
100 /images/vfat.img /images/vfat.dir auto ro 0 0
101 # A block device
102 /dev/loop2 /images/test1 auto defaults 0 0
103 # tmpfs, filesystem specific flag.
104 walrus /images/test2 tmpfs size=42 0 0
105 # Autodetect a bind mount.
106 /images/test2 /images/test3 auto defaults 0 0
107 FSTAB
109 # Put something on loop2.
110 mknod /dev/loop2 b 7 2
111 cat images/ext2.img > images/ext2-2.img
112 losetup /dev/loop2 images/ext2-2.img
114 testing "mount -a" "mount -a && echo hello > /images/test2/abc && cat /images/test3/abc && (mount | wc -l)" "hello\n8\n" "" ""
116 testing "umount -a" "umount -a && ls /proc" "" "" ""
118 #/bin/bash < /dev/tty > /dev/tty 2> /dev/tty
119 mknod /dev/console c 5 1
120 /bin/bash < /dev/console > /dev/console 2> /dev/console
123 exit 0
125 # Run some tests
127 losetup nonexistent device (should return error 2)
128 losetup unbound loop device (should return error 1)
129 losetup bind file to loop device
130 losetup bound loop device (display) (should return error 0)
131 losetup filename (error)
132 losetup nofile (file not found)
133 losetup -d
134 losetup bind with offset
135 losetup -f (print first loop device)
136 losetup -f filename (associate file with first loop device)
137 losetup -o (past end of file) -f filename
139 mount -a
140 with multiple entries in fstab
141 with duplicate entries in fstab
142 with relative paths in fstab
143 with user entries in fstab
144 mount -o async,sync,atime,noatime,dev,nodev,exec,noexec,loop,suid,nosuid,remount,ro,rw,bind,move
145 mount -r
146 mount -o rw -r
147 mount -w -o ro
148 mount -t auto
150 mount with relative path in fstab
151 mount block device
152 mount char device
153 mount file (autoloop)
154 mount directory (autobind)
157 testing "umount with no /proc"
158 testing "umount curdir"
160 # The basic tests. These should work even with the small busybox.
162 testing "sort" "input" "a\nb\nc\n" "c\na\nb\n" ""
163 testing "sort #2" "input" "010\n1\n3\n" "3\n1\n010\n" ""
164 testing "sort stdin" "" "a\nb\nc\n" "" "b\na\nc\n"
165 testing "sort numeric" "-n input" "1\n3\n010\n" "3\n1\n010\n" ""
166 testing "sort reverse" "-r input" "wook\nwalrus\npoint\npabst\naargh\n" \
167 "point\nwook\npabst\naargh\nwalrus\n" ""
169 optional FEATURE_MOUNT_LOOP
170 testing "umount -D"
172 optional FEATURE_MTAB_SUPPORT
173 optional FEATURE_MOUNT_NFS
174 # No idea what to test here.
176 optional UMOUNT
177 optional FEATURE_UMOUNT_ALL
178 testing "umount -a"
179 testing "umount -r"
180 testing "umount -l"
181 testing "umount -f"
183 exit $FAILCOUNT