Initial public busybox upstream commit
[busybox4maemo] / testsuite / mount.testroot
1 #!/bin/sh
2
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.
6
7 if [ -z "$TESTDIR" ]
8 then
9   echo 'Need $TESTDIR'
10   exit 1
11 fi
12
13 cd "$TESTDIR"
14
15 . testing.sh
16
17 # If we aren't PID 1, barf.
18
19 #if [ $$ -ne 1 ]
20 #then
21 #  echo "SKIPPED: mount test requires emulation environment"
22 #  exit 0
23 #fi
24
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
29
30 . /testing.sh
31
32 mknod /dev/loop0 b 7 0
33 mknod /dev/loop1 b 7 1
34
35 # We need /proc to do much.  Make sure we can mount it explicitly.
36
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" "" ""
40
41 # Make sure the last thing in the list is /proc
42
43 testing "mount list1" "mount | tail -n 1" "/proc on /proc type proc (rw)\n" \
44         "" ""
45
46
47 # Create an ext2 image
48
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
54
55 # Test mount it
56
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" "" ""
69
70 umount -d images/vfat.dir
71 umount -d images/ext2.dir
72
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" "" ""
76
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" "" ""
80
81 umount -d images/ext2.dir images/test1
82
83 testing "mount remount nonexistent directory" \
84         "mount -o remount,noatime images/ext2.dir 2> /dev/null || echo yes" \
85         "yes\n" "" ""
86
87 # Fun with mount -a
88
89 testing "mount -a no fstab" "mount -a 2>/dev/null || echo yes" "yes\n" "" ""
90
91 umount /proc
92
93 # The first field is space delimited, the rest tabs.
94
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
108
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
113
114 testing "mount -a" "mount -a && echo hello > /images/test2/abc && cat /images/test3/abc && (mount | wc -l)" "hello\n8\n" "" ""
115
116 testing "umount -a" "umount -a && ls /proc" "" "" ""
117
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
121 EOF
122
123 exit 0
124
125 # Run some tests
126
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
138
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
149
150 mount with relative path in fstab
151 mount block device
152 mount char device
153 mount file (autoloop)
154 mount directory (autobind)
155
156
157 testing "umount with no /proc"
158 testing "umount curdir"
159
160 # The basic tests.  These should work even with the small busybox.
161
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" ""
168
169 optional FEATURE_MOUNT_LOOP
170 testing "umount -D"
171
172 optional FEATURE_MTAB_SUPPORT
173 optional FEATURE_MOUNT_NFS
174 # No idea what to test here.
175
176 optional UMOUNT
177 optional FEATURE_UMOUNT_ALL
178 testing "umount -a"
179 testing "umount -r"
180 testing "umount -l"
181 testing "umount -f"
182
183 exit $FAILCOUNT