#! /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` <segment size> <num mirrors> [<block device> <offset>]+" 1>&2
    exit 1
}

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

# globals
devname="mirror_test"
segment_size=$1; shift
mirror_count=$1; shift

if [ $# -ne `expr $mirror_count \* 2` ]; then
    echo "Incorrect number of mirror arguments" 1>&2
    usage
fi

# Generate the tables
mirror_table="0 $segment_size mirror core 1 1024 $mirror_count $@"

declare -a linear_table
for ((i = 0; i < $mirror_count; i++)); do
    linear_table[$i]="0 $segment_size linear $1 $2"; shift; shift;
done

# initialise mirrors
remove_quietly linear
create_notable linear
pattern=`date +%s`
for ((i = 0; i < $mirror_count; i++)); do
    info "initialising mirror $i"
    reload linear ${linear_table[$i]}
    stamp_pattern linear $(( $pattern + $i ))
done
remove linear

# create the device
info "create mirrorset device"
remove_quietly $devname
create $devname $mirror_table

info "load map for mirrorset"
reload $devname $mirror_table

info "wait for sync to complete"
wait_for_event $devname 0

# remove
remove $devname

# check individual mirrors
remove_quietly linear
create_notable linear
for ((i = 0; i < $mirror_count; i++)); do
    info "checking mirror $i"
    reload linear ${linear_table[$i]}
    verify_pattern linear $pattern
done
remove linear

succeed ok

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