#!/bin/sh

# A basic regression test for gconcat append using "gconcat label",
# i.e., automatic mode.

gconcat_check_size()
{
    local actual expected name

    name=$1
    expected=$2

    actual=$(diskinfo /dev/concat/${name} | awk '{print $3}')
    if [ $actual -eq $expected ]; then
        echo "ok - Size is ${actual}"
    else
        echo "not ok - Size is ${actual}"
    fi
}

. `dirname $0`/conf.sh

echo '1..4'

ss=512

f1=$(mktemp) || exit 1
truncate -s $((1024 * 1024 + $ss)) $f1
f2=$(mktemp) || exit 1
truncate -s $((1024 * 1024 + $ss)) $f2
f3=$(mktemp) || exit 1
truncate -s $((1024 * 1024 + $ss)) $f3

us0=$(attach_md -f $f1 -S $ss) || exit 1
us1=$(attach_md -f $f2 -S $ss) || exit 1
us2=$(attach_md -f $f3 -S $ss) || exit 1

gconcat label $name /dev/$us0 /dev/$us1 || exit 1
devwait

# We should have a 2MB device.  Add another disk and verify that the
# reported size of the concat device grows accordingly.  A sector from
# each disk is reserved for the metadata sector.
gconcat_check_size "${name}" $((2 * 1024 * 1024))
gconcat append $name /dev/$us2 || exit 1
gconcat_check_size "${name}" $((3 * 1024 * 1024))

copy=$(mktemp) || exit 1
dd if=/dev/random of=$copy bs=1M count=3 || exit 1
dd if=$copy of=/dev/concat/${name} || exit 1

# Stop the concat device and destroy the backing providers.
gconcat stop ${name} || exit 1
detach_md $us0
detach_md $us1
detach_md $us2

# Re-create the providers and verify that the concat device comes
# back and that the data is still there.
us0=$(attach_md -f $f1 -S $ss) || exit 1
us1=$(attach_md -f $f2 -S $ss) || exit 1
us2=$(attach_md -f $f3 -S $ss) || exit 1

devwait

# Make sure that the
if [ -c /dev/concat/${name} ]; then
    echo "ok - concat device was instantiated"
else
    echo "not ok - concat device was instantiated"
fi

if cmp -s $copy /dev/concat/${name}; then
    echo "ok - Data was persisted across gconcat stop"
else
    echo "not ok - Data was persisted across gconcat stop"
fi
