1#!/bin/sh 2 3# SUSv3 compliant mount and umount tests. 4# Copyright 2005 by Rob Landley <rob@landley.net> 5# Licensed under GPLv2, see file LICENSE in this source tree. 6 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 89testing "mount -a no fstab" "mount -a 2>/dev/null || echo yes" "yes\n" "" "" 90 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 184