From 888b474e696fc22c48c646a72f60c9fd34462608 Mon Sep 17 00:00:00 2001 From: David Disseldorp Date: Mon, 4 Jun 2007 06:13:28 +0000 Subject: [PATCH] This test enables dmapi return_on_destroy and captures dmapi events generated by two create/removes. One with file attibutes set, one without. A dmapi destroy event should be generated in both cases, however PV960928 has shown that it may not be when attributes are not set. Merge of master-melb:xfs-cmds:28771a by kenmcd. test --- 168 | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 168.out | 57 ++++++++++++++++++++++++++++++++++++++++ common.dmapi | 29 +++++++++++++++++++- group | 1 + 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100755 168 create mode 100644 168.out diff --git a/168 b/168 new file mode 100755 index 00000000..ded7123b --- /dev/null +++ b/168 @@ -0,0 +1,74 @@ +#! /bin/sh +# 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. +#----------------------------------------------------------------------- +# +# creator +owner=ddiss@sgi.com + +seq=`basename $0` +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() +{ + _cleanup_testdir +} + +# 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=$! + +# 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 diff --git a/168.out b/168.out new file mode 100644 index 00000000..8727d7ba --- /dev/null +++ b/168.out @@ -0,0 +1,57 @@ +QA output created by 168 +# create file +# remove file +# create file +# set dmapi attributes on file +# remove file +# here comes the dmapi print_event filtered and sorted output + attrcopy + attrname + retcode 0 + retcode 0 + retcode 0 + retcode 0 +attrcopy COPY +attribute: token TOKEN sequence SEQ +attribute: token TOKEN sequence SEQ +attrname NAME +create: token TOKEN sequence SEQ +create: token TOKEN sequence SEQ +destroy: token TOKEN sequence SEQ +destroy: token TOKEN sequence SEQ +handle HANDLE +handle HANDLE +mode bits mode MODE: perm PERMISSIONS, type FILE_TYPE +mode bits mode MODE: perm PERMISSIONS, type FILE_TYPE +mode bits mode MODE: perm PERMISSIONS, type FILE_TYPE +mode bits mode MODE: perm PERMISSIONS, type FILE_TYPE +mode bits mode MODE: perm PERMISSIONS, type FILE_TYPE +mode bits mode MODE: perm PERMISSIONS, type FILE_TYPE +mode bits mode MODE: perm PERMISSIONS, type FILE_TYPE +mode bits mode MODE: perm PERMISSIONS, type FILE_TYPE +name FILE_NAME +name FILE_NAME +name FILE_NAME +name FILE_NAME +name FILE_NAME +name FILE_NAME +name FILE_NAME +name FILE_NAME +new object OBJECT +new object OBJECT +object OBJECT +object OBJECT +parent dir PARENT_DIR +parent dir PARENT_DIR +parent dir PARENT_DIR +parent dir PARENT_DIR +parent dir PARENT_DIR +parent dir PARENT_DIR +parent dir PARENT_DIR +parent dir PARENT_DIR +postcreate: token TOKEN sequence SEQ +postcreate: token TOKEN sequence SEQ +postremove: token TOKEN sequence SEQ +postremove: token TOKEN sequence SEQ +remove: token TOKEN sequence SEQ +remove: token TOKEN sequence SEQ diff --git a/common.dmapi b/common.dmapi index 23968108..1873fbbd 100644 --- a/common.dmapi +++ b/common.dmapi @@ -9,6 +9,7 @@ DMAPI_QASUITE1_DIR=$here/dmapi/src/suite1/ DMAPI_QASUITE2_DIR=$here/dmapi/src/suite2/ +DMAPI_COMMON_DIR=$here/dmapi/src/common/ DMAPI_LS_TO_COPY_PATH=$DMAPI_QASUITE2_DIR/bindir/ls_to_copy @@ -26,4 +27,30 @@ _dmapi_scratch_mount () { if [ $dmapi_mount_result -ne 0 ] ; then _notrun "Assuming DMAPI modules are not loaded" fi -} \ No newline at end of file +} + +_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 ; +s/^\s+attrcopy\s+\w+/attrcopy COPY/g ; +s/^\s+attrname\s+\w+/attrname NAME/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 ;' +} + diff --git a/group b/group index bdbbb5b6..2344c337 100644 --- a/group +++ b/group @@ -252,3 +252,4 @@ dmapi 165 rw pattern auto 166 rw metadata auto 167 rw metadata auto +168 dmapi auto -- 2.30.2