#! /bin/bash
# FSQA Test No. 038
#
# Test consistent d_ino numbers for samefs setup.
#
#-----------------------------------------------------------------------
#
# Copyright (C) 2017 IBM Corporation. All Rights Reserved.
# Author: Chandan Rajendra <chandan@linux.vnet.ibm.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#-----------------------------------------------------------------------
#

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
. ./common/attr

# real QA test starts here
_supported_fs overlay
_supported_os Linux
# Use non-default scratch underlying overlay dirs, we need to check
# them explicity after test.
_require_scratch_nocheck
_require_attrs
_require_test_program "t_dir_type"

rm -f $seqres.full

_scratch_mkfs >>$seqres.full 2>&1

# Create our test files.
upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
lowerdir=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER
mkdir -p $lowerdir

mkdir -p $lowerdir/test_dir/pure_lower_dir/subdir

touch $lowerdir/test_file

_scratch_mount

test_dir=$SCRATCH_MNT/test_dir/

# Verify d_ino of '.' and '..' before and after dir becomes impure.
impure_dir=$test_dir/impure_dir
mkdir -p $impure_dir/subdir

impure_dir_st_ino=$(stat -c '%i' $impure_dir)
impure_dir_parent_st_ino=$(stat -c '%i' $test_dir)
impure_subdir_st_ino=$(stat -c '%i' $impure_dir/subdir)

# Before $impure_dir becomes impure
parent_d=$($here/src/t_dir_type $impure_dir $impure_dir_parent_st_ino)
[[ $parent_d == ".. d" ]] || \
    echo "Pure upper dir: Invalid d_ino reported for .."

current_d=$($here/src/t_dir_type $impure_dir $impure_dir_st_ino)
[[ $current_d == ". d" ]] || \
    echo "Pure upper dir: Invalid d_ino reported for ."

subdir_d=$($here/src/t_dir_type $impure_dir $impure_subdir_st_ino)
[[ $subdir_d == "subdir d" ]] || \
    echo "Pure upper dir: Invalid d_ino reported for subdir"

# Move a copied up file into pure dir to make it impure
mv $SCRATCH_MNT/test_file $impure_dir
test_file_st_ino=$(stat -c '%i' $impure_dir/test_file)

impure=$($GETFATTR_PROG --absolute-names --only-values -n 'trusted.overlay.impure' \
			$upperdir/test_dir/impure_dir)
[[ $impure == "y" ]] || echo "Impure directory missing impure xattr"

# After $impure_dir becomes impure
parent_d=$($here/src/t_dir_type $impure_dir $impure_dir_parent_st_ino)
[[ $parent_d == ".. d" ]] || \
    echo "Impure dir: Invalid d_ino reported for .."

current_d=$($here/src/t_dir_type $impure_dir $impure_dir_st_ino)
[[ $current_d == ". d" ]] || \
    echo "Impure dir: Invalid d_ino reported for ."

subdir_d=$($here/src/t_dir_type $impure_dir $impure_subdir_st_ino)
[[ $subdir_d == "subdir d" ]] || \
    echo "Impure dir: Invalid d_ino reported for subdir"

# Verify copy up file's d_ino
file_d=$($here/src/t_dir_type $impure_dir $test_file_st_ino)
[[ $file_d == "test_file f" ]] || \
	echo "Impure dir: Invalid d_ino reported for entry with copy-up origin"

# Make $impure_dir pure
rm -rf $impure_dir/test_file
rm -rf $impure_dir/subdir

# Verify invalidation of readdir cache
$here/src/t_dir_type $impure_dir $test_file_st_ino
[[ $? != 0 ]] || echo "Directory's readdir cache has stale file entries"
$here/src/t_dir_type $impure_dir $impure_subdir_st_ino
[[ $? != 0 ]] || echo "Directory's readdir cache has stale subdir entries"

impure=$($GETFATTR_PROG --absolute-names --only-values -n 'trusted.overlay.impure' \
			$upperdir/test_dir/impure_dir 2>/dev/null)
[[ -z $impure ]] || echo "Pure directory has impure xattr"

# Verify d_ino values of subdir entries of a pure lower dir.
parent_st_ino=$(stat -c '%i' $test_dir)
pure_lower_dir=$SCRATCH_MNT/test_dir/pure_lower_dir
pure_lower_dir_st_ino=$(stat -c '%i' $pure_lower_dir)
pure_lower_subdir_st_ino=$(stat -c '%i' $pure_lower_dir/subdir)

parent_d=$($here/src/t_dir_type $pure_lower_dir $parent_st_ino)
[[ $parent_d == ".. d" ]] || \
	echo "Pure lower dir: Invalid d_ino reported for .."

current_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_dir_st_ino)
[[ $current_d == ". d" ]] || \
	echo "Pure lower dir: Invalid d_ino reported for ."

subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino)
[[ $subdir_d == "subdir d" ]] || \
	echo "Pure lower dir: Invalid d_ino reported for subdir"

# Create a file in pure lower dir to make it a merge dir
touch $pure_lower_dir/newfile

parent_d=$($here/src/t_dir_type $pure_lower_dir $parent_st_ino)
[[ $parent_d == ".. d" ]] || \
	echo "Merged dir: Invalid d_ino reported for .."

current_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_dir_st_ino)
[[ $current_d == ". d" ]] || \
	echo "Merged dir: Invalid d_ino reported for ."

subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino)
[[ $subdir_d == "subdir d" ]] || \
	echo "Merged dir: Invalid d_ino reported for subdir"

_scratch_unmount

# check overlayfs
_check_scratch_fs

# Verify pure lower residing in dir which has another lower layer
_scratch_mkfs

OVL_LOWER0=${OVL_LOWER}0
OVL_LOWER1=${OVL_LOWER}1

middir=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER0
lowerdir=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER1
upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
workdir=$OVL_BASE_SCRATCH_MNT/$OVL_WORK

mkdir -p $middir
mkdir -p $lowerdir
mkdir -p $upperdir
mkdir -p $workdir

mkdir -p $lowerdir/test_dir/pure_lower_dir/subdir

_overlay_scratch_mount_dirs "$middir:$lowerdir" $upperdir $workdir

# Copy up test_dir
touch $test_dir/test_file

test_dir_st_ino=$(stat -c '%i' $test_dir)
pure_lower_dir=$test_dir/pure_lower_dir
pure_lower_dir_st_ino=$(stat -c '%i' $pure_lower_dir)
pure_lower_subdir_st_ino=$(stat -c '%i' $pure_lower_dir/subdir)

parent_d=$($here/src/t_dir_type $pure_lower_dir $test_dir_st_ino)
[[ $parent_d == ".. d" ]] || \
	echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for .."
current_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_dir_st_ino)
[[ $current_d == ". d" ]] || \
	echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for ."

subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino)
[[ $subdir_d == "subdir d" ]] || \
	echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for subdir"

# check overlayfs
_overlay_check_scratch_dirs "$middir:$lowerdir" $upperdir $workdir

echo "Silence is golden"
status=0
exit
