#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2015 Red Hat, Inc.  All Rights Reserved.
#
# FS QA Test 077
#
# test UUID modification of CRC-enabled filesystems
#
# CRC-enabled / V5 superblock filesystems have a UUID stamped into
# every piece of metadata, and a mechanism was added later to allow
# changing the user-visible UUID by copying the original UUID (which
# matches all the existing metadata) to a new superblock location.
# Exercise some of that behavior.
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
status=1	# failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
	cd /
	rm -f $tmp.*
}

# get standard environment, filters and checks
. ./common/rc
. ./common/filter

# real QA test starts here

_supported_fs xfs
_require_xfs_copy
_require_scratch
_require_no_large_scratch_dev
_require_xfs_crc
_require_meta_uuid

# Takes 2 args, 2nd optional:
#  1: generate, rewrite, or restore
#  2: Expected UUID after the action.  Blank if new uuid generated
# After the action check the fs, and make sure it can be mounted
# Sets NEW_UUID to the resulting UUID.
_test_uuid()
{
	ACTION=$1
	EXPECTED_UUID=$2

	_scratch_xfs_db -x -c "uuid $ACTION" \
					| _filter_uuid $EXPECTED_UUID
	NEW_UUID=`_scratch_xfs_db -c "uuid"  | awk '{print $NF}'`
	_check_scratch_fs
	_try_scratch_mount || _fail "Mount failed after UUID $ACTION"
	_scratch_unmount

}

_fs_has_META_UUID()
{
	FS=$1
	$XFS_DB_PROG -r -c version $FS | grep -q META_UUID
}

rm -f $seqres.full

_scratch_mkfs_xfs -m crc=1 >> $seqres.full 2>&1 || _fail "mkfs failed"

ORIG_UUID=`_scratch_xfs_db -c "uuid" | awk '{print $NF}'`

_scratch_mount
# Put some stuff on the fs
$FSSTRESS_PROG -d $SCRATCH_MNT -n 100 -p 4 >> $seqres.full 2>&1
_scratch_unmount

# Can xfs_db change it?

echo "== Generate new UUID"
_test_uuid generate
[ "$NEW_UUID" == "$ORIG_UUID" ] && _fail "Failed to change UUID"
_fs_has_META_UUID $SCRATCH_DEV || _fail "META_UUID feature not set"

# This should be a no-op
echo "== Rewrite UUID"
_test_uuid rewrite $NEW_UUID
_fs_has_META_UUID $SCRATCH_DEV || _fail "META_UUID feature not set"

# Can we change it back?
echo "== Restore old UUID"
_test_uuid restore $ORIG_UUID
[ "$NEW_UUID" != "$ORIG_UUID" ] && _fail "Failed to restore UUID"
_fs_has_META_UUID $SCRATCH_DEV && _fail "META_UUID feature should not be not set"

# This should be a no-op too.
echo "== Rewrite UUID"
_test_uuid rewrite $ORIG_UUID
_fs_has_META_UUID $SCRATCH_DEV && _fail "META_UUID feature should not be not set"

# Ok, now what does xfs_copy do; it changes UUID by default

IMGFILE=$TEST_DIR/$seq.copy.img
rm -f $IMGFILE

# xfs_copy changes the UUID by default
echo "== xfs_copy with new UUID"
$XFS_COPY_PROG $SCRATCH_DEV $IMGFILE 2>&1 >> $seqres.full || \
	_fail "xfs_copy (new UUID) failed"
_check_xfs_filesystem $IMGFILE none none || _fail "Copy looks corrupted"
# The copy should have META_UUID feature set
_fs_has_META_UUID $IMGFILE || _fail "META_UUID feature not set on copy"
_try_scratch_mount || _fail "Mount failed after UUID rewrite"
_scratch_unmount

rm -f $IMGFILE

# duplicating the UUID should be fine too
echo "== xfs_copy with duplicate UUID"
$XFS_COPY_PROG -d $SCRATCH_DEV $IMGFILE 2>&1 >> $seqres.full || \
	_fail "xfs_copy (duplicate) failed"
_check_xfs_filesystem $IMGFILE none none || _fail "Duplicate copy looks corrupted"
# The copy should not have META_UUID feature set
_fs_has_META_UUID $IMGFILE && _fail "META_UUID feature should not be set on copy"

# success, all done
status=0
exit
