#!/bin/sh

. ./functions.sh
BTRFSMNT=`pwd`/MNT
TMP=RANDOM

echo "Basic Plug / Unplug tests"

start_target
create_disk_lun 1 1G
create_disk_lun 2 1G
create_disk_lun 3 1G

echo "Mounting iSCSI devices ... "
iscsiadm --mode discoverydb --type sendtargets --portal ${TGTPORTAL} --discover
iscsiadm --mode node --targetname ${IQNTARGET} --portal ${TGTPORTAL} --login

echo "Create a three device BTRFS filesystem"
sleep 5 # Kludge to wait for the devices to show up
mkfs.btrfs -f -d raid1 /dev/disk/by-path/ip-127.0.0.1:3269-iscsi-iqn.libiscsi.unittest.target-lun-1 /dev/disk/by-path/ip-127.0.0.1:3269-iscsi-iqn.libiscsi.unittest.target-lun-2 /dev/disk/by-path/ip-127.0.0.1:3269-iscsi-iqn.libiscsi.unittest.target-lun-3

echo "Mounting the filesystem"
mkdir ${BTRFSMNT} 2>/dev/null
mount /dev/disk/by-path/ip-127.0.0.1:3269-iscsi-iqn.libiscsi.unittest.target-lun-1 ${BTRFSMNT}

echo "Creating 512MB random file"
dd if=/dev/urandom of=RANDOM bs=1M count=5 2>/dev/null

echo "Copy the file to BTRFS (slowly)"
rsync -Pav --bwlimit=1024K RANDOM ${BTRFSMNT}/RANDOM &

echo "Disconnect/reconnect the devices while the slow rsync is running"
seq 1 22 | while read ITERATION; do
	       echo "\nRemoving disk 1"
	       remove_disk_lun 1
	       sleep 5
	       echo "\nReadding disk 1"
	       add_disk_lun 1 1G
	       sleep 5
	       echo "\nRemoving disk 2"
	       remove_disk_lun 2
	       sleep 5
	       echo "\nReadding disk 2"
	       add_disk_lun 2 1G
	       sleep 5
	       echo "\nRemoving disk 3"
	       remove_disk_lun 3
	       sleep 5
	       echo "\nReadding disk 3"
	       add_disk_lun 3 1G
	       sleep 5
done

echo "Remount the filesystem to drop caches"
umount ${BTRFSMNT}
mount /dev/disk/by-path/ip-127.0.0.1:3269-iscsi-iqn.libiscsi.unittest.target-lun-1 ${BTRFSMNT}

echo "Computing checksums"
ORIGSUM=`md5sum RANDOM | cut -f 1 -d " "`
NEWSUM=`md5sum ${BTRFSMNT}/RANDOM | cut -f 1 -d " "`
echo "Original checksum" ${ORIGSUM}
echo "New checksum" ${NEWSUM}

if [ "${ORIGSUM}x" == "${NEWSUM}x" ] ; then
    echo "SUCCESS. Checksums match"
else
    echo "FAILED. Checksum mismatch"
fi

echo "Cleaning up"
rm RANDOM
umount ${BTRFSMNT}
iscsiadm --mode node --targetname ${IQNTARGET} --portal ${TGTPORTAL} --logout

delete_disk_lun 1
delete_disk_lun 2
delete_disk_lun 3
shutdown_target

exit 0
