#!/bin/bash
#
# 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="wipe"

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

ts_check_test_command "$TS_CMD_SFDISK"
ts_check_test_command "$TS_CMD_WIPEFS"
ts_check_test_command "$TS_CMD_MKSWAP"

ts_skip_nonroot

SFDISK_OPTS="--no-tell-kernel --no-reread"

# set global variable TS_DEVICE
ts_scsi_debug_init dev_size_mb=50 sector_size=512 physblk_exp=3


ts_init_subtest "gpt-to-dos"
ts_separator "Create GPT"
echo ',,L' | $TS_CMD_SFDISK $SFDISK_OPTS --label=gpt ${TS_DEVICE} >> $TS_OUTPUT 2>&1
udevadm settle
ts_separator "Create DOS"
echo ',,L' | $TS_CMD_SFDISK $SFDISK_OPTS --wipe=always --label=dos ${TS_DEVICE} >> $TS_OUTPUT 2>&1
ts_fdisk_clean $TS_DEVICE
udevadm settle
ts_separator "Check content"
$TS_CMD_WIPEFS -O OFFSET,TYPE ${TS_DEVICE} >> $TS_OUTPUT 2>&1
ts_finalize_subtest


# Same as previous test, but without --wipe=always, sfdisk has to wipe
# the device automatically when switch from one PT to another PT
#
ts_init_subtest "gpt-to-dos-auto"
ts_separator "Create GPT"
echo ',,L' | $TS_CMD_SFDISK $SFDISK_OPTS --label=gpt ${TS_DEVICE} >> $TS_OUTPUT 2>&1
udevadm settle
ts_separator "Create DOS"
echo ',,L' | $TS_CMD_SFDISK $SFDISK_OPTS --label=dos ${TS_DEVICE} >> $TS_OUTPUT 2>&1
ts_fdisk_clean $TS_DEVICE
udevadm settle
ts_separator "Check content"
$TS_CMD_WIPEFS -O OFFSET,TYPE ${TS_DEVICE} >> $TS_OUTPUT 2>&1
ts_finalize_subtest


ts_init_subtest "fs-to-dos"
ts_separator "Create FS"
$TS_CMD_WIPEFS -a ${TS_DEVICE} &> /dev/null
udevadm settle
$TS_CMD_MKSWAP ${TS_DEVICE} &> /dev/null
udevadm settle
ts_separator "Create DOS"
echo ',,L' | $TS_CMD_SFDISK $SFDISK_OPTS --wipe=always  --label=dos ${TS_DEVICE} >> $TS_OUTPUT 2>&1
ts_fdisk_clean $TS_DEVICE
udevadm settle
ts_separator "Check content"
$TS_CMD_WIPEFS -O OFFSET,TYPE ${TS_DEVICE} >> $TS_OUTPUT 2>&1
ts_finalize_subtest


ts_init_subtest "partition"
ts_separator "Create GPT"
$TS_CMD_WIPEFS -a ${TS_DEVICE} &> /dev/null
udevadm settle
echo ',,L' | $TS_CMD_SFDISK --no-reread --label=gpt ${TS_DEVICE} >> $TS_OUTPUT 2>&1
udevadm settle
ts_separator "Create FS in partition"
$TS_CMD_MKSWAP ${TS_DEVICE}1 &> /dev/null
udevadm settle
ts_separator "Wipe whole-disk device"
$TS_CMD_WIPEFS -a ${TS_DEVICE} &> /dev/null
udevadm settle
ts_separator "Create GPT (again)"
echo ',,L' | $TS_CMD_SFDISK --no-reread --wipe-partition=always --label=gpt ${TS_DEVICE} >> $TS_OUTPUT 2>&1
udevadm settle
ts_separator "Check content (disk)"
$TS_CMD_WIPEFS -O OFFSET,TYPE ${TS_DEVICE} >> $TS_OUTPUT 2>&1
udevadm settle
ts_separator "Check content (partition)"
$TS_CMD_WIPEFS -O OFFSET,TYPE ${TS_DEVICE}1 >> $TS_OUTPUT 2>&1
ts_fdisk_clean $TS_DEVICE
ts_finalize_subtest


udevadm settle
ts_finalize
