#!/bin/bash

current_dir=`pwd`
logfile='test.log'
img='floppy.img'
raw='floppy.raw'
md5=$raw'.md5'
dd_bs=1024
normal_size=$((1024*256))
floppy_size=1024

## file system
normal_fs="ext2 ext3 ext4 vfat exfat"
featured_fs="$normal_fs jfs xfs reiserfs hfsplus"
extra_fs="$featured_fs ufs vmfs reiser4 ntfs btrfs"

mkfs_option_for_reiserfs='-f'
mkfs_option_for_ntfs='-f -F'

manual_fs=$1

test_fs=$featured_fs
dd_count=$normal_size
[ -n $manual_fs ] || test_fs=$manual_fs

check_return_code(){
    if [ $? != 0 ]; then
	echo "return code fail"
	exit
    fi
}

#main
for fs in $test_fs; do

    echo "create raw file $raw"
    [ -f $raw ] && rm $raw
    dd if=/dev/zero of=$raw bs=$dd_bs count=$dd_count

    echo "format $raw as $fs raw partition"
    mkfs.$fs `eval echo "$"mkfs_option_for_$fs""` $raw

    echo "create md5 for $raw file"
    md5sum $raw > $md5

    echo "clone $raw to $img"
    [ -f $img ] && rm $img
    partclone.$fs -d -N -c -s $raw -O $img -F -L $logfile
    check_return_code

    echo "do image checking"
    partclone.chkimg -s $img -L $logfile
    check_return_code

    echo "remove $raw"
    [ -f $raw ] && rm $raw

    echo "restore $img to $raw"
    partclone.restore -s $img -o $raw -C --restore_raw_file -F -L $logfile
    check_return_code

    echo "md5 check"
    ret=`md5sum --quiet -c $md5`

    if [ -z "$ret" ]; then
	echo "$fs test ok"
	echo "clear tmp files $img $raw $logfile $md5"
	rm $img $raw $logfile $md5
    else
	echo "$fs test fail"
	echo "keep the files for bug report $img $raw $logfile $md5"
    fi

done
