#! /bin/sh

# regression test for creating a table with a set of adjacent
# mappings.

. ${TEST_ROOT}/etc/dm_tools.sh

usage() {
    echo "Usage: `basename $0` <num segments> <segment size> <chunk size> <num stripes> [<block device> <offset>]+" 1>&2
    exit 1
}

if [ $# -lt 6 ]; then
    usage
fi

# globals
devname="stripe_test"
segment_count=$1; shift
segment_size=$1; shift
chunk_size=$1; shift
stripe_count=$1; shift

if [ $# -ne `expr $stripe_count \* 2` ]; then
    echo "Insufficient stripe arguments" 1>&2
    usage
fi

# Generate the tables
single_target="0 `expr $segment_count \* $segment_size` striped $stripe_count $chunk_size $@"

loffset=0
table=""
count=0
while [ $count -lt $segment_count ]; do
    if [ -n "$table" ]; then
	table="${table}\n"
    fi

    table="${table}$loffset $segment_size striped $stripe_count $chunk_size "

    need_dev=1
    for arg; do
	if [ $need_dev -eq 1 ]; then
	    table="$table $arg"
	    need_dev=0
	else
	    table="$table `expr $arg + $loffset / $stripe_count`"
	    need_dev=1
	fi
    done

    loffset=`expr $loffset + $segment_size`
    count=`expr $count + 1`
done

# create the device
remove_quietly $devname

info "create device"
push_level
create $devname $table
pop_level

info "stamp pattern"
push_level
pattern=`date +%s`
stamp_pattern $devname $pattern
pop_level

info "reload with suspend"
push_level
suspend $devname
reload $devname $table
verify_pattern $devname $pattern
pop_level

info "reload without suspend"
push_level
reload $devname $table
verify_pattern $devname $pattern
pop_level

info "remove and recreate"
push_level
remove $devname
create $devname $table
verify_pattern $devname $pattern
pop_level

info "single target equivalence"
push_level
remove $devname
create $devname $single_target
verify_pattern $devname $pattern
pop_level

# remove
remove $devname

succeed ok

# FIXME: add an at exit to destroy the device on fatal
