#!/bin/bash
#
# Copyright (C) 2009 Karel Zak <kzak@redhat.com>
#
# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
TS_TOPDIR="${0%/*}/../.."
TS_DESC="mkfs mount"

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

ts_check_test_command "$TS_CMD_MKMINIX"
ts_check_test_command "$TS_CMD_MOUNT"
ts_check_test_command "$TS_CMD_UMOUNT"
ts_skip_nonroot

ts_scsi_debug_init dev_size_mb=10 num_parts=1
dev=${TS_DEVICE}1

# hotfix, wait for partition to appear (slow on Debian 7/linux-3.2)
test -b $dev || sleep 1

mkfs_and_mount_minix() {
	ts_init_subtest $1
	ts_log "create minix fs $2"
	$TS_CMD_MKMINIX $2 $dev >> $TS_OUTPUT 2>&1
	echo "mkfs return value: $?" >> $TS_OUTPUT
	udevadm settle
	[ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
	ts_mount "minix" $dev $TS_MOUNTPOINT
	ts_is_mounted $dev || ts_die "Cannot find $dev in /proc/mounts"
	ts_log "umount the image"
	$TS_CMD_UMOUNT $dev
	ts_finalize_subtest
}

mkfs_and_mount_minix 'v1c14' '-1 -n 14'
mkfs_and_mount_minix 'v1c30' '-1 -n 30'
mkfs_and_mount_minix 'v2c14' '-2 -n 14'
mkfs_and_mount_minix 'v2c30' '-2 -n 30'
mkfs_and_mount_minix 'v2i65535' '-2 -i 65535'
mkfs_and_mount_minix 'v3c60' '-3 -n 60'

ts_finalize

