#!/bin/sh

# SUSv3 compliant mount and umount tests.
# Copyright 2005 by Rob Landley <rob@landley.net>
# Licensed under GPL v2, see file LICENSE for details.

if [ -z "$TESTDIR" ]
then
  echo 'Need $TESTDIR'
  exit 1
fi

cd "$TESTDIR"

. testing.sh

# If we aren't PID 1, barf.

#if [ $$ -ne 1 ]
#then
#  echo "SKIPPED: mount test requires emulation environment"
#  exit 0
#fi

# Run tests within the chroot environment.
dochroot bash rm ls ln cat ps mknod mkdir dd grep cmp diff tail \
	mkfs.ext2 mkfs.vfat mount umount losetup wc << EOF
#!/bin/bash

. /testing.sh

mknod /dev/loop0 b 7 0
mknod /dev/loop1 b 7 1

# We need /proc to do much.  Make sure we can mount it explicitly.

testing "mount no proc [GNUFAIL]" "mount 2> /dev/null || echo yes" "yes\n" "" ""
testing "mount /proc" "mount -t proc /proc /proc && ls -d /proc/1" \
	"/proc/1\n" "" ""

# Make sure the last thing in the list is /proc

testing "mount list1" "mount | tail -n 1" "/proc on /proc type proc (rw)\n" \
	"" ""


# Create an ext2 image

mkdir -p images/{ext2.dir,vfat.dir,test1,test2,test3}
dd if=/dev/zero of=images/ext2.img bs=1M count=1 2> /dev/null
mkfs.ext2 -F -b 1024 images/ext2.img > /dev/null 2> /dev/null
dd if=/dev/zero of=images/vfat.img bs=1M count=1 2> /dev/null
mkfs.vfat images/vfat.img > /dev/null

# Test mount it

testing "mount vfat image (explicitly autodetect type)" \
	"mount -t auto images/vfat.img images/vfat.dir && mount | tail -n 1 | grep -o 'vfat.dir type vfat'" \
	"vfat.dir type vfat\n" "" ""
testing "mount ext2 image (autodetect type)" \
	"mount images/ext2.img images/ext2.dir 2> /dev/null && mount | tail -n 1" \
	"/dev/loop1 on /images/ext2.dir type ext2 (rw)\n" "" ""
testing "mount remount ext2 image noatime" \
	"mount -o remount,noatime images/ext2.dir && mount | tail -n 1" \
	"/dev/loop1 on /images/ext2.dir type ext2 (rw,noatime)\n" "" ""
testing "mount remount ext2 image ro remembers noatime" \
	"mount -o remount,ro images/ext2.dir && mount | tail -n 1" \
	"/dev/loop1 on /images/ext2.dir type ext2 (ro,noatime)\n" "" ""

umount -d images/vfat.dir
umount -d images/ext2.dir

testing "mount umount freed loop device" \
	"mount images/ext2.img images/ext2.dir && mount | tail -n 1" \
	"/dev/loop0 on /images/ext2.dir type ext2 (rw)\n" "" ""

testing "mount block device" \
	"mount -t ext2 /dev/loop0 images/test1 && mount | tail -n 1" \
	"/dev/loop0 on /images/test1 type ext2 (rw)\n" "" ""

umount -d images/ext2.dir images/test1

testing "mount remount nonexistent directory" \
	"mount -o remount,noatime images/ext2.dir 2> /dev/null || echo yes" \
	"yes\n" "" ""

# Fun with mount -a

testing "mount -a no fstab" "mount -a 2>/dev/null || echo yes" "yes\n" "" "" 

umount /proc

# The first field is space delimited, the rest tabs.

cat > /etc/fstab << FSTAB
/proc             /proc			proc	defaults	0	0
# Autodetect loop, and provide flags with commas in them.
/images/ext2.img  /images/ext2.dir	ext2	noatime,nodev	0	0
# autodetect filesystem, flags without commas.
/images/vfat.img  /images/vfat.dir	auto	ro		0	0
# A block device
/dev/loop2        /images/test1		auto	defaults	0	0
# tmpfs, filesystem specific flag.
walrus		  /images/test2		tmpfs	size=42		0	0
# Autodetect a bind mount.
/images/test2     /images/test3		auto	defaults	0	0
FSTAB

# Put something on loop2.
mknod /dev/loop2 b 7 2
cat images/ext2.img > images/ext2-2.img
losetup /dev/loop2 images/ext2-2.img

testing "mount -a" "mount -a && echo hello > /images/test2/abc && cat /images/test3/abc && (mount | wc -l)" "hello\n8\n" "" ""

testing "umount -a" "umount -a && ls /proc" "" "" ""

#/bin/bash < /dev/tty > /dev/tty 2> /dev/tty
mknod /dev/console c 5 1
/bin/bash < /dev/console > /dev/console 2> /dev/console
EOF

exit 0

# Run some tests

losetup nonexistent device (should return error 2)
losetup unbound loop device (should return error 1)
losetup bind file to loop device
losetup bound loop device (display)  (should return error 0)
losetup filename (error)
losetup nofile (file not found)
losetup -d
losetup bind with offset
losetup -f (print first loop device)
losetup -f filename (associate file with first loop device)
losetup -o (past end of file) -f filename

mount -a
  with multiple entries in fstab
  with duplicate entries in fstab
  with relative paths in fstab
  with user entries in fstab
mount -o async,sync,atime,noatime,dev,nodev,exec,noexec,loop,suid,nosuid,remount,ro,rw,bind,move
mount -r
mount -o rw -r
mount -w -o ro
mount -t auto

mount with relative path in fstab
mount block device
mount char device
mount file (autoloop)
mount directory (autobind)


testing "umount with no /proc"
testing "umount curdir"

# The basic tests.  These should work even with the small busybox.

testing "sort" "input" "a\nb\nc\n" "c\na\nb\n" ""
testing "sort #2" "input" "010\n1\n3\n" "3\n1\n010\n" ""
testing "sort stdin" "" "a\nb\nc\n" "" "b\na\nc\n"
testing "sort numeric" "-n input" "1\n3\n010\n" "3\n1\n010\n" ""
testing "sort reverse" "-r input" "wook\nwalrus\npoint\npabst\naargh\n" \
	"point\nwook\npabst\naargh\nwalrus\n" ""

optional FEATURE_MOUNT_LOOP
testing "umount -D"

optional FEATURE_MTAB_SUPPORT
optional FEATURE_MOUNT_NFS
# No idea what to test here.

optional UMOUNT
optional FEATURE_UMOUNT_ALL
testing "umount -a"
testing "umount -r"
testing "umount -l"
testing "umount -f"

exit $FAILCOUNT
