#! /bin/bash
# FSQA Test No. 168
#
# Check for DMAPI destroy events when removing files without attributes
# See PV960928 for details
#
#-----------------------------------------------------------------------
# Copyright (c) 2007 Silicon Graphics, Inc.  All Rights Reserved.
#
# 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
#
#-----------------------------------------------------------------------
#
# creator
owner=ddiss@sgi.com

seq=`basename $0`
echo "QA output created by $seq"

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

_cleanup()
{
    _cleanup_testdir
}

_filter_dmapi_print_event() {
    $PERL_PROG -ne '
# replace session/file specific output with generic placeholders
s/token\s+\d+/token TOKEN/g ;
s/sequence\s+\d+/sequence SEQ/g ;
s/^\s+parent\s+dir\s+\w+/parent dir PARENT_DIR/g ;
s/^\s+name\s+.*/name FILE_NAME/g ;
s/^\s+mode\s+bits\s+mode\s+\d+:\s+/mode bits mode MODE: /g ;
s/perm\s+[\w|-]+\s[\w|-]+\s[\w|-]+/perm PERMISSIONS/g ;
s/,\s+type\s+.*/, type FILE_TYPE/g ;
s/^\s+object\s+\w+/object OBJECT/g ;
s/^\s+new\s+object\s+\w+/new object OBJECT/g ;
s/^\s+handle\s+\w+/handle HANDLE/g ;

# when print_event is killed, the following is output. trim it
s/^\s*print_event: Processing any undelivered event messages.*\n//g ;
s/^\s*print_event: Shutting down the session.*\n//g ;

# trim blank lines
s/^\s*\n//g ;
    print ;'
}

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

# real QA test starts here
_supported_fs xfs
_supported_os Linux

_require_scratch
_scratch_mkfs_xfs >/dev/null 2>&1
_dmapi_scratch_mount

qa_file_noattr=$SCRATCH_MNT/dmapi_file_noattr
qa_file_withattr=$SCRATCH_MNT/dmapi_file_withattr

# run dmapi print_event in background to capture events triggered during test
${DMAPI_QASUITE1_DIR}cmd/print_event $SCRATCH_MNT > $tmp.print_event_out 2>&1 &
dmapi_print_event_pid=$!

# give time for print_event to start capturing events
sleep 2

# enable DMAPI set_return_on_destroy for $SCRATCH_MNT
${DMAPI_COMMON_DIR}cmd/set_return_on_destroy -F $SCRATCH_MNT ATTR_NAME_1

echo "# create file"
touch $qa_file_noattr
echo "# remove file"
rm -f $qa_file_noattr

echo "# create file"
touch $qa_file_withattr
echo "# set dmapi attributes on file"
${DMAPI_QASUITE1_DIR}cmd/set_dmattr $qa_file_withattr ATTR_NAME_1 ATTR_VALUE_1
echo "# remove file"
rm -f $qa_file_withattr

# kill off background dmapi print_event process
kill $dmapi_print_event_pid
# give dmapi print_event time to finish writing out any events not yet output
wait

# dmapi destroy events are asyncronous,  don't rely on fixed ordering of events
# in print_event output, use sort.
echo "# here comes the dmapi print_event filtered and sorted output"
cat $tmp.print_event_out | tee -a $here/$seq.full | _filter_dmapi_print_event | LC_COLLATE=POSIX sort
rm $tmp.print_event_out

status=0
exit
