blob: 4f34c5719f2052676f17e16623e3043a2a155eea [file] [log] [blame]
Rob Landleydcb21222006-03-18 03:00:22 +00001#!/bin/sh
2
3# SUSv3 compliant mount and umount tests.
4# Copyright 2005 by Rob Landley <rob@landley.net>
Denys Vlasenko0ef64bd2010-08-16 20:14:46 +02005# Licensed under GPLv2, see file LICENSE in this source tree.
Rob Landleydcb21222006-03-18 03:00:22 +00006
7if [ -z "$TESTDIR" ]
8then
9 echo 'Need $TESTDIR'
10 exit 1
11fi
12
13cd "$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.
26dochroot 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
32mknod /dev/loop0 b 7 0
33mknod /dev/loop1 b 7 1
34
35# We need /proc to do much. Make sure we can mount it explicitly.
36
37testing "mount no proc [GNUFAIL]" "mount 2> /dev/null || echo yes" "yes\n" "" ""
38testing "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
43testing "mount list1" "mount | tail -n 1" "/proc on /proc type proc (rw)\n" \
44 "" ""
45
46
47# Create an ext2 image
48
49mkdir -p images/{ext2.dir,vfat.dir,test1,test2,test3}
50dd if=/dev/zero of=images/ext2.img bs=1M count=1 2> /dev/null
51mkfs.ext2 -F -b 1024 images/ext2.img > /dev/null 2> /dev/null
52dd if=/dev/zero of=images/vfat.img bs=1M count=1 2> /dev/null
53mkfs.vfat images/vfat.img > /dev/null
54
55# Test mount it
56
57testing "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" "" ""
60testing "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" "" ""
63testing "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" "" ""
66testing "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
70umount -d images/vfat.dir
71umount -d images/ext2.dir
72
73testing "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
77testing "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
81umount -d images/ext2.dir images/test1
82
83testing "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
Denis Vlasenko9213a9e2006-09-17 16:28:10 +000089testing "mount -a no fstab" "mount -a 2>/dev/null || echo yes" "yes\n" "" ""
Rob Landleydcb21222006-03-18 03:00:22 +000090
91umount /proc
92
93# The first field is space delimited, the rest tabs.
94
95cat > /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.
104walrus /images/test2 tmpfs size=42 0 0
105# Autodetect a bind mount.
106/images/test2 /images/test3 auto defaults 0 0
107FSTAB
108
109# Put something on loop2.
110mknod /dev/loop2 b 7 2
111cat images/ext2.img > images/ext2-2.img
112losetup /dev/loop2 images/ext2-2.img
113
114testing "mount -a" "mount -a && echo hello > /images/test2/abc && cat /images/test3/abc && (mount | wc -l)" "hello\n8\n" "" ""
115
116testing "umount -a" "umount -a && ls /proc" "" "" ""
117
118#/bin/bash < /dev/tty > /dev/tty 2> /dev/tty
119mknod /dev/console c 5 1
120/bin/bash < /dev/console > /dev/console 2> /dev/console
121EOF
122
123exit 0
124
125# Run some tests
126
127losetup nonexistent device (should return error 2)
128losetup unbound loop device (should return error 1)
129losetup bind file to loop device
130losetup bound loop device (display) (should return error 0)
131losetup filename (error)
132losetup nofile (file not found)
133losetup -d
134losetup bind with offset
135losetup -f (print first loop device)
136losetup -f filename (associate file with first loop device)
137losetup -o (past end of file) -f filename
138
139mount -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
144mount -o async,sync,atime,noatime,dev,nodev,exec,noexec,loop,suid,nosuid,remount,ro,rw,bind,move
145mount -r
146mount -o rw -r
147mount -w -o ro
148mount -t auto
149
150mount with relative path in fstab
151mount block device
152mount char device
153mount file (autoloop)
154mount directory (autobind)
155
156
157testing "umount with no /proc"
158testing "umount curdir"
159
160# The basic tests. These should work even with the small busybox.
161
162testing "sort" "input" "a\nb\nc\n" "c\na\nb\n" ""
163testing "sort #2" "input" "010\n1\n3\n" "3\n1\n010\n" ""
164testing "sort stdin" "" "a\nb\nc\n" "" "b\na\nc\n"
165testing "sort numeric" "-n input" "1\n3\n010\n" "3\n1\n010\n" ""
166testing "sort reverse" "-r input" "wook\nwalrus\npoint\npabst\naargh\n" \
167 "point\nwook\npabst\naargh\nwalrus\n" ""
168
169optional FEATURE_MOUNT_LOOP
170testing "umount -D"
171
172optional FEATURE_MTAB_SUPPORT
173optional FEATURE_MOUNT_NFS
174# No idea what to test here.
175
176optional UMOUNT
177optional FEATURE_UMOUNT_ALL
178testing "umount -a"
179testing "umount -r"
180testing "umount -l"
181testing "umount -f"
182
183exit $FAILCOUNT