#!/bin/sh

# Copyright (C) 2016 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

# test foreing user of thin-pool

SKIP_WITH_LVMLOCKD=1
SKIP_WITH_LVMPOLLD=1

. lib/inittest

MOUNT_DIR=mnt

cleanup_mounted_and_teardown()
{
	umount "$MOUNT_DIR" || true
	dmsetup remove $THIN
	vgremove -ff $vg
	aux teardown
}

percent_() {
	get lv_field $vg/pool data_percent | cut -d. -f1
}

#
# Main
#
aux have_thin 1 0 0 || skip
which mkfs.ext4 || skip

# Use our mkfs config file to get approximately same results
# TODO: maybe use it for all test via some 'prepare' function
export MKE2FS_CONFIG="$TESTDIR/lib/mke2fs.conf"

aux prepare_dmeventd
aux prepare_pvs 2 64

vgcreate $vg -s 64K $(cat DEVICES)

# Create named pool only
lvcreate --errorwhenfull y -L2 -T $vg/pool

POOL="$vg-pool"
THIN="${PREFIX}_thin"

# Foreing user is using own ioctl command to create thin devices
dmsetup message $POOL 0 "create_thin 0"
dmsetup message $POOL 0 "set_transaction_id 0 1"

dmsetup status
# Once the transaction id has changed, lvm2 shall not be able to create thinLV
fail lvcreate -V10 $vg/pool

trap 'cleanup_mounted_and_teardown' EXIT

# 20M thin device
dmsetup create $THIN --table "0 40960 thin $DM_DEV_DIR/mapper/$POOL 0"

dmsetup table
dmsetup info -c

mkdir "$MOUNT_DIR"
# This mkfs should fill 2MB pool over 95%
# no autoresize is configured
mkfs.ext4 "$DM_DEV_DIR/mapper/$THIN"
test $(percent_) -gt 95
mount "$DM_DEV_DIR/mapper/$THIN" "$MOUNT_DIR"

pvchange -x n "$dev1" "$dev2"

test $(percent_) -gt 95
# Configure autoresize
aux lvmconf 'activation/thin_pool_autoextend_percent = 10' \
	    'activation/thin_pool_autoextend_threshold = 75'

# Give it some time to left dmeventd do some (failing to resize) work
sleep 20

# And check foreign thin device is still mounted
mount | grep "$MOUNT_DIR" | grep "$THIN"
test $(percent_) -gt 95

pvchange -x y "$dev1" "$dev2"

# FIXME: ATM tell dmeventd explicitely we've changed metadata
#        however dmeventd shall be aware of any metadata change
#        and automagically retry resize operation after that.
lvchange --refresh $vg/pool

# Give it some time and let dmeventd do some work
for i in $(seq 1 15) ; do
	test $(percent_) -ge 75 || break
	sleep 1
done

test $(percent_) -lt 75

# And check foreign thin device is still mounted
mount | grep "$MOUNT_DIR" | grep "$THIN"
