busybox/testsuite/mount.testroot
<<
>>
Prefs
   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