#!/bin/dash

# (C) 2006 IST
# License: GPL-2

#$1 - Nome do tar.gz
#$2 - Directoria a testar

usage () {
    echo "Grabs a tar.gz file, calculates the MD5 of its contents,"
    echo "fills a directory with copies and a MD5 file for all files"
    echo "usage $0: [--fill|--check] name.tar.gz directory"
}

erro () {
    echo Erro Inesperado 
    exit 1
}

# Fill directory with contencts of tar.gz
#$1 - Nome do tar.gz
#$2 - Directoria a testar
fill () {
    local FILESTAR=$1
    local TESTDIR=$2
    echo "Preparing"
    cd $TESTDIR
    mkdir tmp
    cd tmp
    tar --totals -xzf $FILESTAR
    cfv -Crr -t md5 -f files.md5
    cd $TESTDIR
    mv tmp/files.md5 .
    > all.md5
    rm -r tmp
    echo "Filling"
    N=1
    echo -n "Filled "
    while true ; do
	DIR=`printf "%08d" $N`
	mkdir $DIR || break
	cd $DIR > /dev/null || break
	tar --totals -xzf $FILESTAR 2> /dev/null || break
	chown -R $USER:$USER .
	cd $TESTDIR
	cat files.md5|tr '*' ' '|awk "{print \$1 \" *\" \"$DIR/\" \$2 ; }">>all.md5
	#read 
	echo -n "$N "
	N=$(( $N + 1 ))
    done
    echo
    cd $TESTDIR > /dev/null
    echo $DIR $PWD
    rm -r $DIR
}


#$1 - Directoria a testar
check_md5sum () {
    local TESTDIR=$1
    cd $TESTDIR
    echo "Start md5sum check TESTDIR=$TESTDIR"
    if /usr/bin/time md5sum --status -c all.md5 ; then
	echo "OK - Integrity Verified"
    else
	echo "Failed - Integrity not Verified"
    fi
}


#$1 - Directoria a testar
check_cfv () {
    local TESTDIR=$1
    cd $TESTDIR
    echo "Start md5sum check TESTDIR=$TESTDIR"
    if /usr/bin/time cfv -q -f all.md5 ; then
	echo "OK - Integrity Verified"
    else
	echo "Failed - Integrity not Verified"
    fi
}


#$1 - Directoria a testar
check () {
    check_md5sum $1
}


# Main
echo "Attection, not prepared for filesystems with more than 1TiB of size"
echo "For that size use instead test_fillbigdisk"
echo

case $1 in
    --fill)
	shift
	FILESTAR=$1
	TESTDIR=$2
	fill $FILESTAR $TESTDIR
	;;
    --check)
	shift 
	FILESTAR=$1
	TESTDIR=$2
	check $TESTDIR
	;;
    *)
	FILESTAR=$1
	TESTDIR=$2
	time $0 --fill $FILESTAR $TESTDIR
	$0 --check $FILESTAR $TESTDIR
esac
