#!/bin/sh

set -e

DISK=$AUTOPKGTEST_TMP/disk

cleanup () {
  umount /mnt || true
  [ "$LOOP" ] && losetup -d $LOOP
  rm -f $DISK $DISK.image || true
  service o2cb stop
  sed -i -e 's/^O2CB_ENABLED=.*/O2CB_ENABLED=false/' /etc/default/o2cb
}

trap "cleanup" 0 2 3 15

# configure cluster
HOSTNAME=$(hostname)

cat >/etc/ocfs2/cluster.conf <<EOF
cluster:
        node_count = 1
        name = ocfs2

node:
        ip_port = 7777
        ip_address = 127.0.0.1
        number = 0
        name = $HOSTNAME
        cluster = ocfs2
EOF

# start cluster
printf "\n=== cluster ===\n"
sed -i -e 's/^O2CB_ENABLED=.*/O2CB_ENABLED=true/' /etc/default/o2cb
service o2cb restart
service o2cb status
service o2cb online-status

# check cluster
printf "\n=== dlmfs ===\n"
grep '^ocfs2_dlmfs /dlm' /proc/mounts

printf "\n=== lsmod ===\n"
lsmod | grep ocfs2_stack_o2cb

printf "\n=== o2hbmonitor ===\n"
pgrep -a o2hbmonitor

# print info
printf "\n=== o2cluster ===\n"
o2cluster -r

printf "\n=== o2cb_ctl ===\n"
o2cb_ctl -I -n $HOSTNAME

# create test disk
printf "\n=== losetup ===\n"
dd if=/dev/zero of=$DISK bs=1M count=200 2>&1
LOOP=$(losetup --find --show $DISK)

# test tools
printf "\n=== mkfs ===\n"
mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=ocfs2 $LOOP 2>&1

printf "\n=== o2image ===\n"
o2image $LOOP $DISK.image
ls -l $DISK.image
HASH1=$(md5sum $LOOP)
dd if=/dev/zero of=$LOOP bs=1M count=200 2>&1
echo y | o2image -I $LOOP $DISK.image
HASH2=$(md5sum $LOOP)
if [ "$HASH1" != "$HASH2" ]; then
  echo "WARNING: hash mismatch"
  echo "$HASH1"
  echo "$HASH2"
fi

printf "\n=== fsck ===\n"
fsck.ocfs2 -f -y $LOOP 2>&1

printf "\n=== o2cluster ===\n"
o2cluster -o $LOOP

printf "\n=== tunefs ===\n"
tunefs.ocfs2 -L test-label -N 3 -Q 'Label = %V\nNumSlots = %N\n' $LOOP

printf "\n=== debugfs ===\n"
debugfs.ocfs2 -R stats $LOOP

printf "\n=== o2info ===\n"
o2info --volinfo $LOOP

printf "\n=== grow ===\n"
dd if=/dev/zero of=$DISK bs=1M count=50 seek=200 2>&1
losetup --set-capacity $LOOP
tunefs.ocfs2 -S $LOOP

printf "\n=== mount ===\n"
mount $LOOP /mnt
df /mnt

printf "\n=== mounted ===\n"
mounted.ocfs2 -d
mounted.ocfs2 -f

printf "\n=== defragfs ===\n"
cp -a /bin /mnt
defragfs.ocfs2 -v /mnt

printf "\n=== grow online ===\n"
dd if=/dev/zero of=$DISK bs=1M count=50 seek=250 2>&1
losetup --set-capacity $LOOP
tunefs.ocfs2 -S $LOOP
df /mnt
