#!/bin/bash

# Copyright (C) 2010 Karel Zak <kzak@redhat.com>

TS_TOPDIR="${0%/*}/../.."
TS_DESC="context"

. $TS_TOPDIR/functions.sh
ts_init "$*"

ts_check_test_command "$TS_CMD_FDISK"
ts_check_test_command "$TS_CMD_FINDMNT"
ts_check_test_command "$TS_CMD_MOUNT"
ts_check_test_command "$TS_CMD_UMOUNT"
ts_check_test_command "$TS_CMD_UUIDGEN"

ts_skip_nonroot
ts_check_prog "mkfs.ext3"
ts_check_prog "mkfs.ext4"

TESTPROG="$TS_HELPER_LIBMOUNT_CONTEXT"
LABEL=libmount-test
UUID=$($TS_CMD_UUIDGEN)

MOUNTPOINT="$TS_MOUNTPOINT"
[ -x $TESTPROG ] || ts_skip "test not compiled"

ts_log "Init device"
$TS_CMD_UMOUNT $MOUNTPOINT &> /dev/null

# set global variable TS_DEVICE
ts_scsi_debug_init dev_size_mb=100
DEVNAME=$(basename $TS_DEVICE)

MOUNTINFO_ONLY=yes
has_mtab=$( ts_has_mtab_support )
if [ "$has_mtab" == "yes" ]; then
	MOUNTINFO_ONLY=no
fi

ts_log "Create partitions"
$TS_CMD_FDISK ${TS_DEVICE} &> /dev/null <<EOF
n
p
1


w
q
EOF

DEVICE="${TS_DEVICE}1"

udevadm settle

grep -q " $DEVNAME\$" /proc/partitions
if [ $? -ne 0 ]; then
	ts_skip "no partition!"
fi

ts_log "Create filesystem"
mkfs.ext4 -L "$LABEL" -U "$UUID" $DEVICE &> /dev/null

ts_log "Do tests..."

export LIBMOUNT_MTAB=$TS_OUTPUT.mtab
> $LIBMOUNT_MTAB

# check local mtab of system mountinfo
function is_mounted {
	if [ "$MOUNTINFO_ONLY" = "yes" ]; then
		ts_is_mounted "$1"
		return $?
	fi
	grep -q "$1" $LIBMOUNT_MTAB && return 0
	return 1
}


udevadm settle
ts_device_has "TYPE" "ext4" $DEVICE || ts_die "Cannot find ext3 on $DEVICE"


ts_init_subtest "mount-by-devname"
mkdir -p $MOUNTPOINT &>  /dev/null
ts_run $TESTPROG --mount $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
is_mounted $DEVICE || echo "$DEVICE not mounted" >> $TS_OUTPUT 2>&1
ts_finalize_subtest


ts_init_subtest "umount-by-devname"
ts_run $TESTPROG --umount $DEVICE >> $TS_OUTPUT 2>&1
is_mounted $DEVICE && echo "$DEVICE still mounted" >> $TS_OUTPUT 2>&1
ts_finalize_subtest


ts_init_subtest "mount-by-label"
mkdir -p $MOUNTPOINT &>  /dev/null
ts_run $TESTPROG --mount LABEL="$LABEL" $MOUNTPOINT >> $TS_OUTPUT 2>&1
is_mounted $DEVICE || echo "$DEVICE not mounted" >> $TS_OUTPUT 2>&1
ts_finalize_subtest


ts_init_subtest "umount-by-mountpoint"
ts_run $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
is_mounted $DEVICE  && echo "$DEVICE still mounted" >> $TS_OUTPUT 2>&1
ts_finalize_subtest


ts_init_subtest "mount-by-uuid"
mkdir -p $MOUNTPOINT &> /dev/null
ts_run $TESTPROG --mount UUID="$UUID" $MOUNTPOINT >> $TS_OUTPUT 2>&1
is_mounted $DEVICE  || echo "$DEVICE not mounted" >> $TS_OUTPUT 2>&1
sleep 1
ts_run $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
sleep 1
is_mounted $DEVICE && echo "$DEVICE still mounted" >> $TS_OUTPUT 2>&1
ts_finalize_subtest


ts_init_subtest "mount-flags"
mkdir -p $MOUNTPOINT &> /dev/null
ts_run $TESTPROG --mount -o ro,noexec,nosuid,strictatime $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
$TS_CMD_FINDMNT --kernel --mountpoint $MOUNTPOINT -o VFS-OPTIONS -n >> $TS_OUTPUT 2>&1
is_mounted $DEVICE || echo "$DEVICE not mounted" >> $TS_OUTPUT 2>&1

ts_run $TESTPROG --mount -o remount,rw $MOUNTPOINT >> $TS_OUTPUT 2>&1
$TS_CMD_FINDMNT --kernel --mountpoint $MOUNTPOINT -o VFS-OPTIONS -n >> $TS_OUTPUT 2>&1

ts_run $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
is_mounted $DEVICE && echo "$DEVICE still mounted" >> $TS_OUTPUT 2>&1
ts_finalize_subtest


ts_init_subtest "mount-loopdev"
mkdir -p $MOUNTPOINT &> /dev/null
img=$(ts_image_init)
mkfs.ext3 -F $img &> /dev/null
udevadm settle

ts_run $TESTPROG --mount -o loop $img $MOUNTPOINT >> $TS_OUTPUT 2>&1
is_mounted $MOUNTPOINT || echo "$MOUNTPOINT not mounted" >> $TS_OUTPUT 2>&1
udevadm settle
ts_run $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
is_mounted $MOUNTPOINT && echo "$MOUNTPOINT still mounted" >> $TS_OUTPUT 2>&1
ts_finalize_subtest


# deprecated
ts_init_subtest "x-mount.mkdir"
TS_NOEXIST="$TS_OUTDIR/${TS_TESTNAME}-${TS_SUBNAME}-noex"
[ -d $TS_NOEXIST ] && rmdir $TS_NOEXIST

$TS_CMD_MOUNT -o x-mount.mkdir --bind $MOUNTPOINT $TS_NOEXIST >> $TS_OUTPUT 2>&1 &&
  echo "successfully mounted" >> $TS_OUTPUT
ts_finalize_subtest

$TS_CMD_UMOUNT $TS_NOEXIST
rmdir $TS_NOEXIST


ts_init_subtest "X-mount.mkdir"
TS_NOEXIST="$TS_OUTDIR/${TS_TESTNAME}-${TS_SUBNAME}-noex"
[ -d $TS_NOEXIST ] && rmdir $TS_NOEXIST

$TS_CMD_MOUNT -o X-mount.mkdir --bind $MOUNTPOINT $TS_NOEXIST >> $TS_OUTPUT 2>&1 &&
  echo "successfully mounted" >> $TS_OUTPUT
ts_finalize_subtest

$TS_CMD_UMOUNT $TS_NOEXIST
rmdir $TS_NOEXIST

ts_log "...done."
ts_finalize
