#! /bin/sh

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

. ${TEST_ROOT}/etc/dm_tools.sh

usage() {
    echo "Usage: $0 <block device> <num mappings> <segment size in sectors> <offset>"
}

case $# in
    4)  dev=$1
	count=$2
	chunk=$3
	offset=$4
	;;

    *) usage; exit 1;;
esac

devname=contiguous

# Generate the tables
single_target="0 `expr $count \* $chunk` linear $dev $offset"
loffset=0
table=""
while [ $count -gt 0 ]; do
    if [ -n "$table" ]; then
	table="${table}\n"
    fi

    table="${table}$loffset $chunk linear $dev $offset"
    loffset=`expr $loffset + $chunk`
    offset=`expr $offset + $chunk`
    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