Tests from UDFQA ported to FSQA.
authorAndrew Jones <ajones@sgi.com>
Wed, 15 Sep 2004 05:57:50 +0000 (05:57 +0000)
committerAndrew Jones <ajones@sgi.com>
Wed, 15 Sep 2004 05:57:50 +0000 (05:57 +0000)
simple attr tests for EAs.

17 files changed:
097 [new file with mode: 0755]
097.out.udf [new file with mode: 0644]
097.out.xfs [new file with mode: 0644]
098 [new file with mode: 0755]
098.out [new file with mode: 0644]
099 [new file with mode: 0755]
099.out [new file with mode: 0644]
100 [new file with mode: 0755]
100.out [new file with mode: 0644]
101 [new file with mode: 0755]
101.out [new file with mode: 0644]
102 [new file with mode: 0755]
102.out [new file with mode: 0644]
README
common.attr
common.rc
group

diff --git a/097 b/097
new file mode 100755 (executable)
index 0000000..fb95d2f
--- /dev/null
+++ b/097
@@ -0,0 +1,259 @@
+#! /bin/sh
+# FS QA Test No. 097. Modifed from UDFQA test 033.
+#
+# simple attr tests for EAs:
+#  - set
+#  - get
+#  - list
+#  - remove
+# Basic testing.
+# 
+#-----------------------------------------------------------------------
+#  Copyright (c) 2000-2004 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; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will 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 to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+#  USA
+#
+#  Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
+#  Mountain View, CA 94043, USA, or: http://www.sgi.com
+#-----------------------------------------------------------------------
+#
+# creator
+owner=ajones@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+TARGET_DIR=
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    rm -f $tmp.*
+    cd $TARGET_DIR
+    rm -f foo
+}
+
+_umount_and_mount()
+{
+    cd /
+    umount $TARGET_DIR
+    if [ "$FSTYP" == "xfs" ]; then
+       _test_mount
+    else
+       _scratch_mount
+    fi
+    
+    cd $TARGET_DIR
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# link correct .out file
+# This is done bacause udf and xfs print attrs in different orders.
+rm -rf $seq.out
+if [ "$FSTYP" == "xfs" ]; then
+    ln -s $seq.out.xfs $seq.out
+else
+    ln -s $seq.out.udf $seq.out
+fi
+
+# real QA test starts here
+_supported_fs udf xfs
+_supported_os IRIX
+
+_require_scratch
+_setup_testdir 
+
+TARGET_DIR=$SCRATCH_MNT
+[ "$FSTYP" == "xfs" ] && TARGET_DIR=$TEST_DIR
+cd $TARGET_DIR
+
+echo "create file foo"
+touch foo
+
+echo "should be no EAs for foo:"
+attr -l foo
+
+echo "set EA <noise,woof>:"
+attr -s noise -V woof foo
+
+echo "set EA <colour,blue>:"
+attr -s colour -V blue foo
+
+echo "set EA <size,small>:"
+attr -s size -V small foo
+
+echo "list the EAs for foo: noise, colour, size" 
+attr -l foo
+
+echo "check the list again for foo"
+attr -l foo
+
+echo "unmount the FS and see if EAs are persistent"
+_umount_and_mount
+
+echo "check the list again for foo after umount/mount"
+attr -l foo
+
+echo "get the value of the noise EA"
+attr -g noise foo
+
+echo "get the value of the colour EA which was removed earlier"
+attr -g colour foo
+
+echo "get the value of the size EA"
+attr -g size foo
+
+echo "remove the colour EA on foo"
+attr -r colour foo
+
+echo "list EAs for foo: noise, size"
+attr -l foo
+
+echo "get the value of the noise EA"
+attr -g noise foo
+
+echo "get the value of the colour EA which was removed earlier"
+attr -g colour foo
+
+echo "get the value of the size EA"
+attr -g size foo
+
+echo "list all the EAs again: noise, size"
+attr -l foo
+
+echo "change the value of the size EA from small to huge"
+attr -s size -V huge foo
+
+echo "get the size EA which should now have value huge"
+attr -g size foo
+
+echo "list EAs: noise, size"
+attr -l foo
+
+echo "remove the size EA from foo"
+attr -r size foo
+
+echo "list EAs: noise (size EA has been removed)"
+attr -l foo
+
+echo "get the noise EA: woof"
+attr -g noise foo
+
+echo "try removing non-existent EA named woof"
+attr -r woof foo
+
+echo "try removing already removed EA size"
+attr -r size foo
+
+echo "list EAs: noise"
+attr -l foo
+
+echo "try removing already removed EA colour"
+attr -r colour foo
+
+echo "list EAs: noise"
+attr -l foo
+
+echo "remove remaining EA noise"
+attr -r noise foo
+
+echo "list EAs: should be no EAs left now"
+attr -l foo
+
+echo "unmount the FS and see if EAs are persistent"
+_umount_and_mount
+
+echo "list EAs: should still be no EAs left"
+attr -l foo
+
+echo ""
+echo "*** Test out the root namespace ***"
+echo ""
+
+echo "set EA <root:colour,marone>:"
+attr -R -s colour -V marone foo
+
+echo "set EA <user:colour,beige>:"
+attr -s colour -V beige foo
+
+echo "set EA <user:vomit,pizza>:"
+attr -s vomit -V pizza foo
+
+echo "set EA <root:noise,whack>:"
+attr -R -s noise -V whack foo
+
+echo "list root EAs: <root:colour,noise>:"
+attr -R -l foo
+
+echo "list user EAs: <user:colour,vomit>:"
+attr -l foo
+
+echo "get root EA colour: marone"
+attr -R -g colour foo
+
+echo "get root EA noise: whack"
+attr -R -g noise foo
+
+echo "get root EA vomit which is a user EA => find nothing"
+attr -R -g vomit foo
+
+echo ""
+echo "unmount the FS and see if EAs are persistent"
+echo ""
+_umount_and_mount
+
+echo "get root EA colour: marone"
+attr -R -g colour foo
+
+echo "get root EA noise: whack"
+attr -R -g noise foo
+
+echo "get user EA vomit: pizza" 
+attr -g vomit foo
+
+echo "remove the root colour EA"
+attr -R -r colour foo
+
+echo "list root EAs: <root:noise>:"
+attr -R -l foo
+
+echo "list user EAs: <user:colour,vomit>:"
+attr -l foo
+
+echo "remove the final root EA noise"
+attr -R -r noise foo
+
+echo "list root EAs: none"
+attr -R -l foo
+
+cd /
+_cleanup_testdir
+
+# Check the filesystem
+_check_scratch_fs
+
+# optional stuff if your test has verbose output to help resolve problems
+#echo
+#echo "If failure, check $seq.full (this) and $seq.full.ok (reference)"
+
+# success, all done
+status=0
+exit
diff --git a/097.out.udf b/097.out.udf
new file mode 100644 (file)
index 0000000..1d36ff7
--- /dev/null
@@ -0,0 +1,132 @@
+QA output created by 097
+create file foo
+should be no EAs for foo:
+set EA <noise,woof>:
+Attribute "noise" set to a 4 byte value for foo:
+woof
+set EA <colour,blue>:
+Attribute "colour" set to a 4 byte value for foo:
+blue
+set EA <size,small>:
+Attribute "size" set to a 5 byte value for foo:
+small
+list the EAs for foo: noise, colour, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+check the list again for foo
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+unmount the FS and see if EAs are persistent
+check the list again for foo after umount/mount
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+get the value of the noise EA
+Attribute "noise" had a 4 byte value for foo:
+woof
+get the value of the colour EA which was removed earlier
+Attribute "colour" had a 4 byte value for foo:
+blue
+get the value of the size EA
+Attribute "size" had a 5 byte value for foo:
+small
+remove the colour EA on foo
+list EAs for foo: noise, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+get the value of the noise EA
+Attribute "noise" had a 4 byte value for foo:
+woof
+get the value of the colour EA which was removed earlier
+attr_get: Attribute not found
+Could not get "colour" for foo
+get the value of the size EA
+Attribute "size" had a 5 byte value for foo:
+small
+list all the EAs again: noise, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+change the value of the size EA from small to huge
+Attribute "size" set to a 4 byte value for foo:
+huge
+get the size EA which should now have value huge
+Attribute "size" had a 4 byte value for foo:
+huge
+list EAs: noise, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "size" has a 4 byte value for foo
+remove the size EA from foo
+list EAs: noise (size EA has been removed)
+Attribute "noise" has a 4 byte value for foo
+get the noise EA: woof
+Attribute "noise" had a 4 byte value for foo:
+woof
+try removing non-existent EA named woof
+attr_remove: Attribute not found
+Could not remove "woof" for foo
+try removing already removed EA size
+attr_remove: Attribute not found
+Could not remove "size" for foo
+list EAs: noise
+Attribute "noise" has a 4 byte value for foo
+try removing already removed EA colour
+attr_remove: Attribute not found
+Could not remove "colour" for foo
+list EAs: noise
+Attribute "noise" has a 4 byte value for foo
+remove remaining EA noise
+list EAs: should be no EAs left now
+unmount the FS and see if EAs are persistent
+list EAs: should still be no EAs left
+
+*** Test out the root namespace ***
+
+set EA <root:colour,marone>:
+Attribute "colour" set to a 6 byte value for foo:
+marone
+set EA <user:colour,beige>:
+Attribute "colour" set to a 5 byte value for foo:
+beige
+set EA <user:vomit,pizza>:
+Attribute "vomit" set to a 5 byte value for foo:
+pizza
+set EA <root:noise,whack>:
+Attribute "noise" set to a 5 byte value for foo:
+whack
+list root EAs: <root:colour,noise>:
+Attribute "colour" has a 6 byte value for foo
+Attribute "noise" has a 5 byte value for foo
+list user EAs: <user:colour,vomit>:
+Attribute "colour" has a 5 byte value for foo
+Attribute "vomit" has a 5 byte value for foo
+get root EA colour: marone
+Attribute "colour" had a 6 byte value for foo:
+marone
+get root EA noise: whack
+Attribute "noise" had a 5 byte value for foo:
+whack
+get root EA vomit which is a user EA => find nothing
+attr_get: Attribute not found
+Could not get "vomit" for foo
+
+unmount the FS and see if EAs are persistent
+
+get root EA colour: marone
+Attribute "colour" had a 6 byte value for foo:
+marone
+get root EA noise: whack
+Attribute "noise" had a 5 byte value for foo:
+whack
+get user EA vomit: pizza
+Attribute "vomit" had a 5 byte value for foo:
+pizza
+remove the root colour EA
+list root EAs: <root:noise>:
+Attribute "noise" has a 5 byte value for foo
+list user EAs: <user:colour,vomit>:
+Attribute "colour" has a 5 byte value for foo
+Attribute "vomit" has a 5 byte value for foo
+remove the final root EA noise
+list root EAs: none
diff --git a/097.out.xfs b/097.out.xfs
new file mode 100644 (file)
index 0000000..0024bf2
--- /dev/null
@@ -0,0 +1,132 @@
+QA output created by 097
+create file foo
+should be no EAs for foo:
+set EA <noise,woof>:
+Attribute "noise" set to a 4 byte value for foo:
+woof
+set EA <colour,blue>:
+Attribute "colour" set to a 4 byte value for foo:
+blue
+set EA <size,small>:
+Attribute "size" set to a 5 byte value for foo:
+small
+list the EAs for foo: noise, colour, size
+Attribute "size" has a 5 byte value for foo
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+check the list again for foo
+Attribute "size" has a 5 byte value for foo
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+unmount the FS and see if EAs are persistent
+check the list again for foo after umount/mount
+Attribute "size" has a 5 byte value for foo
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+get the value of the noise EA
+Attribute "noise" had a 4 byte value for foo:
+woof
+get the value of the colour EA which was removed earlier
+Attribute "colour" had a 4 byte value for foo:
+blue
+get the value of the size EA
+Attribute "size" had a 5 byte value for foo:
+small
+remove the colour EA on foo
+list EAs for foo: noise, size
+Attribute "size" has a 5 byte value for foo
+Attribute "noise" has a 4 byte value for foo
+get the value of the noise EA
+Attribute "noise" had a 4 byte value for foo:
+woof
+get the value of the colour EA which was removed earlier
+attr_get: Attribute not found
+Could not get "colour" for foo
+get the value of the size EA
+Attribute "size" had a 5 byte value for foo:
+small
+list all the EAs again: noise, size
+Attribute "size" has a 5 byte value for foo
+Attribute "noise" has a 4 byte value for foo
+change the value of the size EA from small to huge
+Attribute "size" set to a 4 byte value for foo:
+huge
+get the size EA which should now have value huge
+Attribute "size" had a 4 byte value for foo:
+huge
+list EAs: noise, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "size" has a 4 byte value for foo
+remove the size EA from foo
+list EAs: noise (size EA has been removed)
+Attribute "noise" has a 4 byte value for foo
+get the noise EA: woof
+Attribute "noise" had a 4 byte value for foo:
+woof
+try removing non-existent EA named woof
+attr_remove: Attribute not found
+Could not remove "woof" for foo
+try removing already removed EA size
+attr_remove: Attribute not found
+Could not remove "size" for foo
+list EAs: noise
+Attribute "noise" has a 4 byte value for foo
+try removing already removed EA colour
+attr_remove: Attribute not found
+Could not remove "colour" for foo
+list EAs: noise
+Attribute "noise" has a 4 byte value for foo
+remove remaining EA noise
+list EAs: should be no EAs left now
+unmount the FS and see if EAs are persistent
+list EAs: should still be no EAs left
+
+*** Test out the root namespace ***
+
+set EA <root:colour,marone>:
+Attribute "colour" set to a 6 byte value for foo:
+marone
+set EA <user:colour,beige>:
+Attribute "colour" set to a 5 byte value for foo:
+beige
+set EA <user:vomit,pizza>:
+Attribute "vomit" set to a 5 byte value for foo:
+pizza
+set EA <root:noise,whack>:
+Attribute "noise" set to a 5 byte value for foo:
+whack
+list root EAs: <root:colour,noise>:
+Attribute "noise" has a 5 byte value for foo
+Attribute "colour" has a 6 byte value for foo
+list user EAs: <user:colour,vomit>:
+Attribute "vomit" has a 5 byte value for foo
+Attribute "colour" has a 5 byte value for foo
+get root EA colour: marone
+Attribute "colour" had a 6 byte value for foo:
+marone
+get root EA noise: whack
+Attribute "noise" had a 5 byte value for foo:
+whack
+get root EA vomit which is a user EA => find nothing
+attr_get: Attribute not found
+Could not get "vomit" for foo
+
+unmount the FS and see if EAs are persistent
+
+get root EA colour: marone
+Attribute "colour" had a 6 byte value for foo:
+marone
+get root EA noise: whack
+Attribute "noise" had a 5 byte value for foo:
+whack
+get user EA vomit: pizza
+Attribute "vomit" had a 5 byte value for foo:
+pizza
+remove the root colour EA
+list root EAs: <root:noise>:
+Attribute "noise" has a 5 byte value for foo
+list user EAs: <user:colour,vomit>:
+Attribute "vomit" has a 5 byte value for foo
+Attribute "colour" has a 5 byte value for foo
+remove the final root EA noise
+list root EAs: none
diff --git a/098 b/098
new file mode 100755 (executable)
index 0000000..e959f6a
--- /dev/null
+++ b/098
@@ -0,0 +1,278 @@
+#! /bin/sh
+# FS QA Test No. 098. Modified from UDFQA test 035
+#
+# simple attr tests for EAs:
+#  - set
+#  - get
+#  - list
+#  - remove
+# Basic testing.
+# + udf_db checks.
+# (033 + udf_db)
+# 
+#-----------------------------------------------------------------------
+#  Copyright (c) 2000-2004 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; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will 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 to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+#  USA
+#
+#  Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
+#  Mountain View, CA 94043, USA, or: http://www.sgi.com
+#-----------------------------------------------------------------------
+#
+# creator
+owner=ajones@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()
+{
+    rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_db_filter()
+{
+    awk '
+       /<file_entry name=/ { fe_on=1 }
+       /<timestamp/  { ts_on=1; next }
+       /<\/timestamp/ { ts_on=0; next }
+       /<cksum/      { next }
+       /<desc_crc/   { next }
+       /<pos/        { next }
+       /<tag_loc/    { next }
+       /<lb_num/     { next }
+       fe_on == 1 && ts_on == 0 { print; next }
+                     { next }
+    '
+}
+
+_umount_check_mount()
+{
+    cd /
+    umount $SCRATCH_MNT
+
+    udf_db -f $SCRATCH_DEV | _db_filter
+
+    _scratch_mount
+    cd $SCRATCH_MNT
+}
+
+# real QA test starts here
+_supported_fs udf
+_supported_os IRIX
+
+_require_scratch
+_setup_testdir
+
+cd $SCRATCH_MNT
+
+echo "create file foo"
+echo "file_contents" >foo
+cat foo
+
+echo "should be no EAs for foo:"
+attr -l foo
+
+echo "set EA <noise,woof>:"
+attr -s noise -V woof foo
+
+echo "set EA <colour,blue>:"
+attr -s colour -V blue foo
+
+echo "set EA <size,small>:"
+attr -s size -V small foo
+
+echo "list the EAs for foo: noise, colour, size" 
+attr -l foo
+
+echo "check the list again for foo"
+attr -l foo
+
+echo "unmount the FS and see if EAs are persistent"
+_umount_check_mount
+
+echo "check the list again for foo after umount/mount"
+attr -l foo
+
+echo "get the value of the noise EA"
+attr -g noise foo
+
+echo "get the value of the colour EA which was removed earlier"
+attr -g colour foo
+
+echo "get the value of the size EA"
+attr -g size foo
+
+echo "remove the colour EA on foo"
+attr -r colour foo
+
+echo "list EAs for foo: noise, size"
+attr -l foo
+
+echo "get the value of the noise EA"
+attr -g noise foo
+
+echo "get the value of the colour EA which was removed earlier"
+attr -g colour foo
+
+echo "get the value of the size EA"
+attr -g size foo
+
+echo "list all the EAs again: noise, size"
+attr -l foo
+
+echo "change the value of the size EA from small to huge"
+attr -s size -V huge foo
+
+echo "get the size EA which should now have value huge"
+attr -g size foo
+
+echo "list EAs: noise, size"
+attr -l foo
+
+echo "remove the size EA from foo"
+attr -r size foo
+
+echo "list EAs: noise (size EA has been removed)"
+attr -l foo
+
+echo "get the noise EA: woof"
+attr -g noise foo
+
+echo "try removing non-existent EA named woof"
+attr -r woof foo
+
+echo "try removing already removed EA size"
+attr -r size foo
+
+echo "list EAs: noise"
+attr -l foo
+
+echo "try removing already removed EA colour"
+attr -r colour foo
+
+echo "list EAs: noise"
+attr -l foo
+
+echo "remove remaining EA noise"
+attr -r noise foo
+
+echo "list EAs: should be no EAs left now"
+attr -l foo
+
+echo "unmount the FS and see if EAs are persistent"
+_umount_check_mount
+
+echo "list EAs: should still be no EAs left"
+attr -l foo
+
+echo ""
+echo "*** Test out the root namespace ***"
+echo ""
+
+echo "set EA <root:colour,marone>:"
+attr -R -s colour -V marone foo
+
+echo "set EA <user:colour,beige>:"
+attr -s colour -V beige foo
+
+echo "set EA <user:vomit,pizza>:"
+attr -s vomit -V pizza foo
+
+echo "set EA <root:noise,whack>:"
+attr -R -s noise -V whack foo
+
+echo "list root EAs: <root:colour,noise>:"
+attr -R -l foo
+
+echo "list user EAs: <user:colour,vomit>:"
+attr -l foo
+
+echo "get root EA colour: marone"
+attr -R -g colour foo
+
+echo "get root EA noise: whack"
+attr -R -g noise foo
+
+echo "get root EA vomit which is a user EA => find nothing"
+attr -R -g vomit foo
+
+echo ""
+echo "unmount the FS and see if EAs are persistent"
+echo ""
+_umount_check_mount
+
+echo "get root EA colour: marone"
+attr -R -g colour foo
+
+echo "get root EA noise: whack"
+attr -R -g noise foo
+
+echo "get user EA vomit: pizza" 
+attr -g vomit foo
+
+echo "remove the root colour EA"
+attr -R -r colour foo
+
+echo "list root EAs: <root:noise>:"
+attr -R -l foo
+
+echo "list user EAs: <user:colour,vomit>:"
+attr -l foo
+
+echo "remove the final root EA noise"
+attr -R -r noise foo
+
+echo "list root EAs: none"
+attr -R -l foo
+
+cd /
+umount $SCRATCH_MNT
+
+udf_db -f $SCRATCH_DEV | _db_filter
+
+# Checks the udf filesystem
+_check_udf_filesystem $SCRATCH_DEV
+
+_scratch_mount
+cd $SCRATCH_MNT
+
+echo "delete the file foo - which will delete the associated streams"
+rm foo
+
+cd /
+umount $SCRATCH_MNT
+
+udf_db -f $SCRATCH_DEV | _db_filter
+
+# Checks the udf filesystem
+_check_udf_filesystem $SCRATCH_DEV
+
+# optional stuff if your test has verbose output to help resolve problems
+#echo
+#echo "If failure, check $seq.full (this) and $seq.full.ok (reference)"
+
+# success, all done
+status=0
+exit
diff --git a/098.out b/098.out
new file mode 100644 (file)
index 0000000..63772a0
--- /dev/null
+++ b/098.out
@@ -0,0 +1,1594 @@
+QA output created by 098
+create file foo
+file_contents
+should be no EAs for foo:
+set EA <noise,woof>:
+Attribute "noise" set to a 4 byte value for foo:
+woof
+set EA <colour,blue>:
+Attribute "colour" set to a 4 byte value for foo:
+blue
+set EA <size,small>:
+Attribute "size" set to a 5 byte value for foo:
+small
+list the EAs for foo: noise, colour, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+check the list again for foo
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+unmount the FS and see if EAs are persistent
+    <file_entry name="/">
+        <desc_tag name="tag">
+            <id val="261" />
+            <descriptor_ver val="3" />
+            <reserved val="0" />
+            <serial_num val="0" />
+        </desc_tag>
+        <icb_tag name="icbtag">
+            <prev_num_dirs val="0" />
+            <strat_type val="4" />
+            <strat_param val="0x0 0x0" />
+            <max_num_entries val="1" />
+            <reserved val="0x0" />
+            <file_type val="4" />
+            <lb_addr name="parent_icb">
+                <part_num val="0" />
+            </lb_addr>
+            <flags val="0" />
+        </icb_tag>
+        <uid val="0" />
+        <gid val="0" />
+        <perm val="0x3CA5" />
+        <link_cnt val="1" />
+        <rec_format val="0" />
+        <rec_disp_attr val="0" />
+        <rec_len val="0" />
+        <inf_len val="84" />
+        <logblks_rec val="1" />
+        <ckpoint val="1" />
+        <long_ad name="ex_attr_icb">
+            <len val="0" />
+            <lb_addr name="loc">
+                <part_num val="0" />
+            </lb_addr>
+            <ad_flags val="0" />
+            <ad_id val="0" />
+        </long_ad>
+        <regid name="imp_id">
+            <flags val="0" />
+            <id val="*Silicon Graphics, Inc." />
+            <id_suffix val="\ 4\ 4" />
+        </regid>
+        <unique_id val="0" />
+        <l_ea val="0" />
+        <l_ad val="8" />
+        <short_ad name="ads.sht">
+            <len val="84" />
+        </short_ad>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="10" char=".Parent.Dir." />
+            <l_fi val="0" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="0" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="" />
+        </fileid_desc>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="0" char="....." />
+            <l_fi val="4" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="16" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="foo" comp_id="8" />
+            <extended_file_entry name="foo" comp_id="8">
+                <desc_tag name="tag">
+                    <id val="266" />
+                    <descriptor_ver val="3" />
+                    <reserved val="0" />
+                    <serial_num val="0" />
+                </desc_tag>
+                <icb_tag name="icbtag">
+                    <prev_num_dirs val="0" />
+                    <strat_type val="4" />
+                    <strat_param val="0x0 0x0" />
+                    <max_num_entries val="1" />
+                    <reserved val="0x0" />
+                    <file_type val="5" />
+                    <lb_addr name="parent_icb">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <flags val="0" />
+                </icb_tag>
+                <uid val="0" />
+                <gid val="0" />
+                <perm val="0x1884" />
+                <link_cnt val="2" />
+                <rec_format val="0" />
+                <rec_disp_attr val="0" />
+                <rec_len val="0" />
+                <inf_len val="14" />
+                <obj_size val="27" />
+                <logblks_rec val="1" />
+                <ckpoint val="1" />
+                <long_ad name="ex_attr_icb">
+                    <len val="0" />
+                    <lb_addr name="loc">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <ad_flags val="0" />
+                    <ad_id val="0" />
+                </long_ad>
+                <long_ad name="streamdir_icb">
+                    <len val="2048" />
+                    <lb_addr name="loc">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <ad_flags val="0" />
+                    <ad_id val="16" />
+                </long_ad>
+                <regid name="imp_id">
+                    <flags val="0" />
+                    <id val="*Silicon Graphics, Inc" />
+                    <id_suffix val="\ 4\ 4" />
+                </regid>
+                <unique_id val="16" />
+                <l_ea val="0" />
+                <l_ad val="8" />
+                <short_ad name="ads.sht">
+                    <len val="14" />
+                </short_ad>
+                <stream_directory>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="8" char=".Parent..." />
+                        <l_fi val="0" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="" />
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="0" char="....." />
+                        <l_fi val="6" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="noise" comp_id="8" />
+                        <file_entry name="noise" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="4" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="4" />
+                            </short_ad>
+                            <file_content>
+                                77 6F 6F 66 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="0" char="....." />
+                        <l_fi val="7" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="colour" comp_id="8" />
+                        <file_entry name="colour" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="4" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="4" />
+                            </short_ad>
+                            <file_content>
+                                62 6C 75 65 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="0" char="....." />
+                        <l_fi val="5" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="size" comp_id="8" />
+                        <file_entry name="size" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="5" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="5" />
+                            </short_ad>
+                            <file_content>
+                                73 6D 6C 6C 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                </stream_directory>
+                <file_content>
+                    66 69 6C 65 5F 63 6F 6E 74 65 6E 74 73 A 
+                </file_content>
+            </extended_file_entry>
+        </fileid_desc>
+    </file_entry>
+</udf>
+check the list again for foo after umount/mount
+Attribute "noise" has a 4 byte value for foo
+Attribute "colour" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+get the value of the noise EA
+Attribute "noise" had a 4 byte value for foo:
+woof
+get the value of the colour EA which was removed earlier
+Attribute "colour" had a 4 byte value for foo:
+blue
+get the value of the size EA
+Attribute "size" had a 5 byte value for foo:
+small
+remove the colour EA on foo
+list EAs for foo: noise, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+get the value of the noise EA
+Attribute "noise" had a 4 byte value for foo:
+woof
+get the value of the colour EA which was removed earlier
+attr_get: Attribute not found
+Could not get "colour" for foo
+get the value of the size EA
+Attribute "size" had a 5 byte value for foo:
+small
+list all the EAs again: noise, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "size" has a 5 byte value for foo
+change the value of the size EA from small to huge
+Attribute "size" set to a 4 byte value for foo:
+huge
+get the size EA which should now have value huge
+Attribute "size" had a 4 byte value for foo:
+huge
+list EAs: noise, size
+Attribute "noise" has a 4 byte value for foo
+Attribute "size" has a 4 byte value for foo
+remove the size EA from foo
+list EAs: noise (size EA has been removed)
+Attribute "noise" has a 4 byte value for foo
+get the noise EA: woof
+Attribute "noise" had a 4 byte value for foo:
+woof
+try removing non-existent EA named woof
+attr_remove: Attribute not found
+Could not remove "woof" for foo
+try removing already removed EA size
+attr_remove: Attribute not found
+Could not remove "size" for foo
+list EAs: noise
+Attribute "noise" has a 4 byte value for foo
+try removing already removed EA colour
+attr_remove: Attribute not found
+Could not remove "colour" for foo
+list EAs: noise
+Attribute "noise" has a 4 byte value for foo
+remove remaining EA noise
+list EAs: should be no EAs left now
+unmount the FS and see if EAs are persistent
+    <file_entry name="/">
+        <desc_tag name="tag">
+            <id val="261" />
+            <descriptor_ver val="3" />
+            <reserved val="0" />
+            <serial_num val="0" />
+        </desc_tag>
+        <icb_tag name="icbtag">
+            <prev_num_dirs val="0" />
+            <strat_type val="4" />
+            <strat_param val="0x0 0x0" />
+            <max_num_entries val="1" />
+            <reserved val="0x0" />
+            <file_type val="4" />
+            <lb_addr name="parent_icb">
+                <part_num val="0" />
+            </lb_addr>
+            <flags val="0" />
+        </icb_tag>
+        <uid val="0" />
+        <gid val="0" />
+        <perm val="0x3CA5" />
+        <link_cnt val="1" />
+        <rec_format val="0" />
+        <rec_disp_attr val="0" />
+        <rec_len val="0" />
+        <inf_len val="84" />
+        <logblks_rec val="1" />
+        <ckpoint val="1" />
+        <long_ad name="ex_attr_icb">
+            <len val="0" />
+            <lb_addr name="loc">
+                <part_num val="0" />
+            </lb_addr>
+            <ad_flags val="0" />
+            <ad_id val="0" />
+        </long_ad>
+        <regid name="imp_id">
+            <flags val="0" />
+            <id val="*Silicon Graphics, Inc." />
+            <id_suffix val="\ 4\ 4" />
+        </regid>
+        <unique_id val="0" />
+        <l_ea val="0" />
+        <l_ad val="8" />
+        <short_ad name="ads.sht">
+            <len val="84" />
+        </short_ad>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="10" char=".Parent.Dir." />
+            <l_fi val="0" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="0" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="" />
+        </fileid_desc>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="0" char="....." />
+            <l_fi val="4" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="16" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="foo" comp_id="8" />
+            <file_entry name="foo" comp_id="8">
+                <desc_tag name="tag">
+                    <id val="261" />
+                    <descriptor_ver val="3" />
+                    <reserved val="0" />
+                    <serial_num val="0" />
+                </desc_tag>
+                <icb_tag name="icbtag">
+                    <prev_num_dirs val="0" />
+                    <strat_type val="4" />
+                    <strat_param val="0x0 0x0" />
+                    <max_num_entries val="1" />
+                    <reserved val="0x0" />
+                    <file_type val="5" />
+                    <lb_addr name="parent_icb">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <flags val="0" />
+                </icb_tag>
+                <uid val="0" />
+                <gid val="0" />
+                <perm val="0x1884" />
+                <link_cnt val="1" />
+                <rec_format val="0" />
+                <rec_disp_attr val="0" />
+                <rec_len val="0" />
+                <inf_len val="14" />
+                <logblks_rec val="1" />
+                <ckpoint val="1" />
+                <long_ad name="ex_attr_icb">
+                    <len val="0" />
+                    <lb_addr name="loc">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <ad_flags val="0" />
+                    <ad_id val="0" />
+                </long_ad>
+                <regid name="imp_id">
+                    <flags val="0" />
+                    <id val="*Silicon Graphics, Inc" />
+                    <id_suffix val="\ 4\ 4" />
+                </regid>
+                <unique_id val="16" />
+                <l_ea val="0" />
+                <l_ad val="8" />
+                <short_ad name="ads.sht">
+                    <len val="14" />
+                </short_ad>
+                <file_content>
+                    66 69 6C 65 5F 63 6F 6E 74 65 6E 74 73 A 
+                </file_content>
+            </file_entry>
+        </fileid_desc>
+    </file_entry>
+</udf>
+list EAs: should still be no EAs left
+
+*** Test out the root namespace ***
+
+set EA <root:colour,marone>:
+Attribute "colour" set to a 6 byte value for foo:
+marone
+set EA <user:colour,beige>:
+Attribute "colour" set to a 5 byte value for foo:
+beige
+set EA <user:vomit,pizza>:
+Attribute "vomit" set to a 5 byte value for foo:
+pizza
+set EA <root:noise,whack>:
+Attribute "noise" set to a 5 byte value for foo:
+whack
+list root EAs: <root:colour,noise>:
+Attribute "colour" has a 6 byte value for foo
+Attribute "noise" has a 5 byte value for foo
+list user EAs: <user:colour,vomit>:
+Attribute "colour" has a 5 byte value for foo
+Attribute "vomit" has a 5 byte value for foo
+get root EA colour: marone
+Attribute "colour" had a 6 byte value for foo:
+marone
+get root EA noise: whack
+Attribute "noise" had a 5 byte value for foo:
+whack
+get root EA vomit which is a user EA => find nothing
+attr_get: Attribute not found
+Could not get "vomit" for foo
+
+unmount the FS and see if EAs are persistent
+
+    <file_entry name="/">
+        <desc_tag name="tag">
+            <id val="261" />
+            <descriptor_ver val="3" />
+            <reserved val="0" />
+            <serial_num val="0" />
+        </desc_tag>
+        <icb_tag name="icbtag">
+            <prev_num_dirs val="0" />
+            <strat_type val="4" />
+            <strat_param val="0x0 0x0" />
+            <max_num_entries val="1" />
+            <reserved val="0x0" />
+            <file_type val="4" />
+            <lb_addr name="parent_icb">
+                <part_num val="0" />
+            </lb_addr>
+            <flags val="0" />
+        </icb_tag>
+        <uid val="0" />
+        <gid val="0" />
+        <perm val="0x3CA5" />
+        <link_cnt val="1" />
+        <rec_format val="0" />
+        <rec_disp_attr val="0" />
+        <rec_len val="0" />
+        <inf_len val="84" />
+        <logblks_rec val="1" />
+        <ckpoint val="1" />
+        <long_ad name="ex_attr_icb">
+            <len val="0" />
+            <lb_addr name="loc">
+                <part_num val="0" />
+            </lb_addr>
+            <ad_flags val="0" />
+            <ad_id val="0" />
+        </long_ad>
+        <regid name="imp_id">
+            <flags val="0" />
+            <id val="*Silicon Graphics, Inc." />
+            <id_suffix val="\ 4\ 4" />
+        </regid>
+        <unique_id val="0" />
+        <l_ea val="0" />
+        <l_ad val="8" />
+        <short_ad name="ads.sht">
+            <len val="84" />
+        </short_ad>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="10" char=".Parent.Dir." />
+            <l_fi val="0" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="0" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="" />
+        </fileid_desc>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="0" char="....." />
+            <l_fi val="4" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="16" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="foo" comp_id="8" />
+            <extended_file_entry name="foo" comp_id="8">
+                <desc_tag name="tag">
+                    <id val="266" />
+                    <descriptor_ver val="3" />
+                    <reserved val="0" />
+                    <serial_num val="0" />
+                </desc_tag>
+                <icb_tag name="icbtag">
+                    <prev_num_dirs val="0" />
+                    <strat_type val="4" />
+                    <strat_param val="0x0 0x0" />
+                    <max_num_entries val="1" />
+                    <reserved val="0x0" />
+                    <file_type val="5" />
+                    <lb_addr name="parent_icb">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <flags val="0" />
+                </icb_tag>
+                <uid val="0" />
+                <gid val="0" />
+                <perm val="0x1884" />
+                <link_cnt val="2" />
+                <rec_format val="0" />
+                <rec_disp_attr val="0" />
+                <rec_len val="0" />
+                <inf_len val="14" />
+                <obj_size val="35" />
+                <logblks_rec val="1" />
+                <ckpoint val="1" />
+                <long_ad name="ex_attr_icb">
+                    <len val="0" />
+                    <lb_addr name="loc">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <ad_flags val="0" />
+                    <ad_id val="0" />
+                </long_ad>
+                <long_ad name="streamdir_icb">
+                    <len val="2048" />
+                    <lb_addr name="loc">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <ad_flags val="0" />
+                    <ad_id val="16" />
+                </long_ad>
+                <regid name="imp_id">
+                    <flags val="0" />
+                    <id val="*Silicon Graphics, Inc" />
+                    <id_suffix val="\ 4\ 4" />
+                </regid>
+                <unique_id val="16" />
+                <l_ea val="0" />
+                <l_ad val="8" />
+                <short_ad name="ads.sht">
+                    <len val="14" />
+                </short_ad>
+                <stream_directory>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="8" char=".Parent..." />
+                        <l_fi val="0" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="" />
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="16" char="Meta...." />
+                        <l_fi val="7" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="colour" comp_id="8" />
+                        <file_entry name="colour" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="6" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="6" />
+                            </short_ad>
+                            <file_content>
+                                6D 61 72 6F 6E 65 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="0" char="....." />
+                        <l_fi val="7" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="colour" comp_id="8" />
+                        <file_entry name="colour" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="5" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="5" />
+                            </short_ad>
+                            <file_content>
+                                62 65 67 65 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="0" char="....." />
+                        <l_fi val="6" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="vomit" comp_id="8" />
+                        <file_entry name="vomit" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="5" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="5" />
+                            </short_ad>
+                            <file_content>
+                                70 69 7A 61 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="16" char="Meta...." />
+                        <l_fi val="6" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="noise" comp_id="8" />
+                        <file_entry name="noise" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="5" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="5" />
+                            </short_ad>
+                            <file_content>
+                                77 68 63 6B 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                </stream_directory>
+                <file_content>
+                    66 69 6C 65 5F 63 6F 6E 74 65 6E 74 73 A 
+                </file_content>
+            </extended_file_entry>
+        </fileid_desc>
+    </file_entry>
+</udf>
+get root EA colour: marone
+Attribute "colour" had a 6 byte value for foo:
+marone
+get root EA noise: whack
+Attribute "noise" had a 5 byte value for foo:
+whack
+get user EA vomit: pizza
+Attribute "vomit" had a 5 byte value for foo:
+pizza
+remove the root colour EA
+list root EAs: <root:noise>:
+Attribute "noise" has a 5 byte value for foo
+list user EAs: <user:colour,vomit>:
+Attribute "colour" has a 5 byte value for foo
+Attribute "vomit" has a 5 byte value for foo
+remove the final root EA noise
+list root EAs: none
+    <file_entry name="/">
+        <desc_tag name="tag">
+            <id val="261" />
+            <descriptor_ver val="3" />
+            <reserved val="0" />
+            <serial_num val="0" />
+        </desc_tag>
+        <icb_tag name="icbtag">
+            <prev_num_dirs val="0" />
+            <strat_type val="4" />
+            <strat_param val="0x0 0x0" />
+            <max_num_entries val="1" />
+            <reserved val="0x0" />
+            <file_type val="4" />
+            <lb_addr name="parent_icb">
+                <part_num val="0" />
+            </lb_addr>
+            <flags val="0" />
+        </icb_tag>
+        <uid val="0" />
+        <gid val="0" />
+        <perm val="0x3CA5" />
+        <link_cnt val="1" />
+        <rec_format val="0" />
+        <rec_disp_attr val="0" />
+        <rec_len val="0" />
+        <inf_len val="84" />
+        <logblks_rec val="1" />
+        <ckpoint val="1" />
+        <long_ad name="ex_attr_icb">
+            <len val="0" />
+            <lb_addr name="loc">
+                <part_num val="0" />
+            </lb_addr>
+            <ad_flags val="0" />
+            <ad_id val="0" />
+        </long_ad>
+        <regid name="imp_id">
+            <flags val="0" />
+            <id val="*Silicon Graphics, Inc." />
+            <id_suffix val="\ 4\ 4" />
+        </regid>
+        <unique_id val="0" />
+        <l_ea val="0" />
+        <l_ad val="8" />
+        <short_ad name="ads.sht">
+            <len val="84" />
+        </short_ad>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="10" char=".Parent.Dir." />
+            <l_fi val="0" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="0" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="" />
+        </fileid_desc>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="0" char="....." />
+            <l_fi val="4" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="16" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="foo" comp_id="8" />
+            <extended_file_entry name="foo" comp_id="8">
+                <desc_tag name="tag">
+                    <id val="266" />
+                    <descriptor_ver val="3" />
+                    <reserved val="0" />
+                    <serial_num val="0" />
+                </desc_tag>
+                <icb_tag name="icbtag">
+                    <prev_num_dirs val="0" />
+                    <strat_type val="4" />
+                    <strat_param val="0x0 0x0" />
+                    <max_num_entries val="1" />
+                    <reserved val="0x0" />
+                    <file_type val="5" />
+                    <lb_addr name="parent_icb">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <flags val="0" />
+                </icb_tag>
+                <uid val="0" />
+                <gid val="0" />
+                <perm val="0x1884" />
+                <link_cnt val="2" />
+                <rec_format val="0" />
+                <rec_disp_attr val="0" />
+                <rec_len val="0" />
+                <inf_len val="14" />
+                <obj_size val="24" />
+                <logblks_rec val="1" />
+                <ckpoint val="1" />
+                <long_ad name="ex_attr_icb">
+                    <len val="0" />
+                    <lb_addr name="loc">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <ad_flags val="0" />
+                    <ad_id val="0" />
+                </long_ad>
+                <long_ad name="streamdir_icb">
+                    <len val="2048" />
+                    <lb_addr name="loc">
+                        <part_num val="0" />
+                    </lb_addr>
+                    <ad_flags val="0" />
+                    <ad_id val="16" />
+                </long_ad>
+                <regid name="imp_id">
+                    <flags val="0" />
+                    <id val="*Silicon Graphics, Inc" />
+                    <id_suffix val="\ 4\ 4" />
+                </regid>
+                <unique_id val="16" />
+                <l_ea val="0" />
+                <l_ad val="8" />
+                <short_ad name="ads.sht">
+                    <len val="14" />
+                </short_ad>
+                <stream_directory>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="8" char=".Parent..." />
+                        <l_fi val="0" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="" />
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="20" char="Meta.Deleted.." />
+                        <l_fi val="7" />
+                        <long_ad name="icb">
+                            <len val="0" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="0" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="colour" comp_id="254" />
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="0" char="....." />
+                        <l_fi val="7" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="colour" comp_id="8" />
+                        <file_entry name="colour" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="5" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="5" />
+                            </short_ad>
+                            <file_content>
+                                62 65 67 65 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="0" char="....." />
+                        <l_fi val="6" />
+                        <long_ad name="icb">
+                            <len val="2048" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="16" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="vomit" comp_id="8" />
+                        <file_entry name="vomit" comp_id="8">
+                            <desc_tag name="tag">
+                                <id val="261" />
+                                <descriptor_ver val="3" />
+                                <reserved val="0" />
+                                <serial_num val="0" />
+                            </desc_tag>
+                            <icb_tag name="icbtag">
+                                <prev_num_dirs val="0" />
+                                <strat_type val="4" />
+                                <strat_param val="0x0 0x0" />
+                                <max_num_entries val="1" />
+                                <reserved val="0x0" />
+                                <file_type val="5" />
+                                <lb_addr name="parent_icb">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <flags val="8192" />
+                            </icb_tag>
+                            <uid val="0" />
+                            <gid val="0" />
+                            <perm val="0x1884" />
+                            <link_cnt val="1" />
+                            <rec_format val="0" />
+                            <rec_disp_attr val="0" />
+                            <rec_len val="0" />
+                            <inf_len val="5" />
+                            <logblks_rec val="1" />
+                            <ckpoint val="1" />
+                            <long_ad name="ex_attr_icb">
+                                <len val="0" />
+                                <lb_addr name="loc">
+                                    <part_num val="0" />
+                                </lb_addr>
+                                <ad_flags val="0" />
+                                <ad_id val="0" />
+                            </long_ad>
+                            <regid name="imp_id">
+                                <flags val="0" />
+                                <id val="*Silicon Graphics, Inc" />
+                                <id_suffix val="\ 4\ 4" />
+                            </regid>
+                            <unique_id val="16" />
+                            <l_ea val="0" />
+                            <l_ad val="8" />
+                            <short_ad name="ads.sht">
+                                <len val="5" />
+                            </short_ad>
+                            <file_content>
+                                70 69 7A 61 
+                            </file_content>
+                        </file_entry>
+                    </fileid_desc>
+                    <fileid_desc>
+                        <desc_tag name="tag">
+                            <id val="257" />
+                            <descriptor_ver val="3" />
+                            <reserved val="0" />
+                            <serial_num val="0" />
+                        </desc_tag>
+                        <file_num val="1" />
+                        <file_char val="20" char="Meta.Deleted.." />
+                        <l_fi val="6" />
+                        <long_ad name="icb">
+                            <len val="0" />
+                            <lb_addr name="loc">
+                                <part_num val="0" />
+                            </lb_addr>
+                            <ad_flags val="0" />
+                            <ad_id val="0" />
+                        </long_ad>
+                        <l_iu val="0" />
+                        <file_id name="noise" comp_id="254" />
+                </stream_directory>
+                <file_content>
+                    66 69 6C 65 5F 63 6F 6E 74 65 6E 74 73 A 
+                </file_content>
+            </extended_file_entry>
+        </fileid_desc>
+    </file_entry>
+</udf>
+delete the file foo - which will delete the associated streams
+    <file_entry name="/">
+        <desc_tag name="tag">
+            <id val="261" />
+            <descriptor_ver val="3" />
+            <reserved val="0" />
+            <serial_num val="0" />
+        </desc_tag>
+        <icb_tag name="icbtag">
+            <prev_num_dirs val="0" />
+            <strat_type val="4" />
+            <strat_param val="0x0 0x0" />
+            <max_num_entries val="1" />
+            <reserved val="0x0" />
+            <file_type val="4" />
+            <lb_addr name="parent_icb">
+                <part_num val="0" />
+            </lb_addr>
+            <flags val="0" />
+        </icb_tag>
+        <uid val="0" />
+        <gid val="0" />
+        <perm val="0x3CA5" />
+        <link_cnt val="1" />
+        <rec_format val="0" />
+        <rec_disp_attr val="0" />
+        <rec_len val="0" />
+        <inf_len val="84" />
+        <logblks_rec val="1" />
+        <ckpoint val="1" />
+        <long_ad name="ex_attr_icb">
+            <len val="0" />
+            <lb_addr name="loc">
+                <part_num val="0" />
+            </lb_addr>
+            <ad_flags val="0" />
+            <ad_id val="0" />
+        </long_ad>
+        <regid name="imp_id">
+            <flags val="0" />
+            <id val="*Silicon Graphics, Inc." />
+            <id_suffix val="\ 4\ 4" />
+        </regid>
+        <unique_id val="0" />
+        <l_ea val="0" />
+        <l_ad val="8" />
+        <short_ad name="ads.sht">
+            <len val="84" />
+        </short_ad>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="10" char=".Parent.Dir." />
+            <l_fi val="0" />
+            <long_ad name="icb">
+                <len val="2048" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="0" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="" />
+        </fileid_desc>
+        <fileid_desc>
+            <desc_tag name="tag">
+                <id val="257" />
+                <descriptor_ver val="3" />
+                <reserved val="0" />
+                <serial_num val="0" />
+            </desc_tag>
+            <file_num val="1" />
+            <file_char val="4" char="..Deleted.." />
+            <l_fi val="4" />
+            <long_ad name="icb">
+                <len val="0" />
+                <lb_addr name="loc">
+                    <part_num val="0" />
+                </lb_addr>
+                <ad_flags val="0" />
+                <ad_id val="0" />
+            </long_ad>
+            <l_iu val="0" />
+            <file_id name="foo" comp_id="254" />
+    </file_entry>
+</udf>
diff --git a/099 b/099
new file mode 100755 (executable)
index 0000000..74fe486
--- /dev/null
+++ b/099
@@ -0,0 +1,344 @@
+#! /bin/sh
+# FS QA Test No. 099. Modified from UDFQA test 036. 
+#
+# ACL test
+#-----------------------------------------------------------------------
+#  Copyright (c) 2000-2004 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; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will 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 to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+#  USA
+#
+#  Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
+#  Mountain View, CA 94043, USA, or: http://www.sgi.com
+#-----------------------------------------------------------------------
+#_acl_list
+# modifier
+owner=ajones@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+. ./common.attr
+
+runas=$here/src/runas
+
+TARGET_DIR=$SCRATCH_MNT
+[ "$FSTYP" == "xfs" ] && TARGET_DIR=$TEST_DIR
+
+_cleanup()
+{
+    rm -f $tmp.*
+    cd $TARGET_DIR
+    rm -rf $seq.dir1
+    cd /
+}
+
+# -----
+# minimal access ACL has ACEs: USER_OBJ, GROUP_OBJ, OTHER_OBJ
+# This is set with chacl(1) and can be changed by chmod(1).
+#
+# Test that this is being set for ACL and for std unix permissions
+# Test that we can get back the same ACL.
+# Test std permissions for rwx.
+# -----
+#
+# Test out default ACLs and that the ACL is being PASSed
+# onto the children of the dir.
+#
+# -----
+# Test out access check for extended ACLs.
+# -> 3 extra ACEs: MASK, GROUP, USER
+# -> the GROUP compares with egid of process _and_ the supplementary
+#    groups (as found in /etc/group)
+#
+# Test that mask works for USER, GROUP, GROUP_OBJ
+# Test that the ACE type priority is working
+#   -> this would be done by simultaneously matching on ACEs
+#   -> interesting if it allows user to specify ACEs in any order
+#
+rm -f $seq.full
+
+#-------------------------------------------------------
+# real QA test starts here
+_supported_fs xfs udf
+_supported_os IRIX
+
+_acl_setup_ids
+_acl_requirements
+[ -x $runas ] || _notrun "$runas executable not found"
+
+# get dir
+#export FILE_SYS=xfs
+_require_scratch
+_setup_testdir
+
+cd $TARGET_DIR
+rm -rf $seq.dir1 # in case file is left over from previous runs.
+mkdir $seq.dir1
+cd $seq.dir1
+
+echo ""
+echo "=== Test minimal ACE ==="
+
+echo "Setup file"
+# Note: as this is a shell script,
+#       will need read and execute permission set
+#       in order to execute it.
+touch file1
+cat <<EOF >file1
+#!/bin/sh
+echo "Test was executed"
+EOF
+chmod u=rwx file1
+chmod g=rw- file1
+chmod o=r-- file1
+chown $acl1.$acl2 file1
+_acl_ls file1
+
+echo ""
+echo "--- Test get and set of ACL ---"
+echo "Note: IRIX interface gave an empty ACL - Linux outputs an ACL"
+_acl_list file1
+echo "Try using single colon separator"
+echo "Note: IRIX interface FAILs because of single colon - Linux one allows it" 
+chacl u::r--,g::rwx,o:rw- file1 2>&1
+echo "Expect to PASS" 
+chacl u::r--,g::rwx,o::rw- file1 2>&1
+_acl_list file1
+
+echo ""
+echo "--- Test sync of ACL with std permissions ---"
+_acl_ls file1
+chmod u+w file1
+_acl_ls file1
+_acl_list file1
+
+echo ""
+echo "--- Test owner permissions ---"
+chacl u::r-x,g::---,o::--- file1 2>&1
+_acl_list file1
+# change to owner
+echo "Expect to PASS" 
+$runas -u $acl1 -g $acl1 ./file1 2>&1
+echo "Expect to FAIL" 
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+
+echo ""
+echo "--- Test group permissions ---"
+chacl u::---,g::r-x,o::--- file1 2>&1
+_acl_list file1
+echo "Expect to FAIL - acl1 is owner" 
+$runas -u $acl1 -g $acl1 ./file1 2>&1
+echo "Expect to PASS - acl2 matches group" 
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+echo "Expect to PASS - acl2 matches sup group" 
+$runas -u $acl2 -g $acl3 -s $acl2 ./file1 2>&1
+echo "Expect to FAIL - acl3 is not in group" 
+$runas -u $acl3 -g $acl3 ./file1 2>&1
+
+echo ""
+echo "--- Test other permissions ---"
+chacl u::---,g::---,o::r-x file1 2>&1
+_acl_list file1
+echo "Expect to FAIL - acl1 is owner" 
+$runas -u $acl1 -g $acl1 ./file1 2>&1
+echo "Expect to FAIL - acl2 is in group" 
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+echo "Expect to FAIL - acl2 is in sup. group" 
+$runas -u $acl2 -g $acl3 -s $acl2 ./file1 2>&1
+echo "Expect to PASS - acl3 is not owner or in group" 
+$runas -u $acl3 -g $acl3 ./file1 2>&1
+
+#-------------------------------------------------------
+
+echo ""
+echo "=== Test Extended ACLs ==="
+
+echo ""
+echo "--- Test adding a USER ACE ---"
+echo "Expect to FAIL as no MASK provided"
+chacl u::---,g::---,o::---,u:$acl2:r-x file1 2>&1 | _acl_filter_id
+echo "Ensure that ACL has not been changed"
+_acl_list file1
+echo "Expect to PASS - USER ACE matches user"
+chacl u::---,g::---,o::---,u:$acl2:r-x,m::rwx file1 2>&1
+_acl_list file1
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+echo "Expect to FAIL - USER ACE does not match user"
+$runas -u $acl3 -g $acl3 ./file1 2>&1
+
+echo ""
+echo "--- Test adding a GROUP ACE ---"
+echo "Expect to FAIL as no MASK provided"
+chacl u::---,g::---,o::---,g:$acl2:r-x file1 2>&1 | _acl_filter_id
+echo "Ensure that ACL has not been changed"
+_acl_list file1
+chacl u::---,g::---,o::---,g:$acl2:r-x,m::rwx file1 2>&1
+_acl_list file1 | _acl_filter_id
+echo "Expect to PASS - GROUP ACE matches group"
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+echo "Expect to PASS - GROUP ACE matches sup group"
+$runas -u $acl2 -g $acl1 -s $acl2 ./file1 2>&1
+echo "Expect to FAIL - GROUP ACE does not match group"
+$runas -u $acl3 -g $acl3 ./file1 2>&1
+
+#-------------------------------------------------------
+
+echo ""
+echo "--- Test MASK ---"
+
+# group
+chacl u::---,g::---,o::---,g:$acl2:r-x,m::-w- file1 2>&1
+_acl_list file1
+echo "Expect to FAIL as MASK prohibits execution"
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+
+# user
+chacl u::---,g::---,o::---,u:$acl2:r-x,m::-w- file1 2>&1
+echo "Expect to FAIL as MASK prohibits execution"
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+
+# user
+chacl u::---,g::---,o::---,u:$acl2:r-x,m::r-x file1 2>&1
+echo "Expect to PASS as MASK allows execution"
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+
+#-------------------------------------------------------
+
+echo ""
+echo "--- Test ACE priority ---"
+
+chacl o::rwx,g::rwx,u:$acl1:rwx,u::---,m::rwx file1 2>&1
+echo "Expect to FAIL as should match on owner"
+$runas -u $acl1 -g $acl2 ./file1 2>&1
+
+chacl o::---,g::---,u:$acl2:rwx,u::---,m::rwx file1 2>&1
+echo "Expect to PASS as should match on user"
+$runas -u $acl2 -g $acl2 ./file1 2>&1
+
+
+#-------------------------------------------------------
+
+echo ""
+echo "=== Test can read ACLs without access permissions ==="
+# This was a bug in kernel code where syscred wasn't being used
+# to override the capabilities
+chacl o::---,g::---,u::--- file1 2>&1
+_acl_list file1
+
+#-------------------------------------------------------
+
+echo ""
+echo "=== Test Default ACLs ==="
+# make test clearer by testing with and without umask
+umask 0
+
+mkdir acldir
+chacl -b "u::rwx,g::rwx,o::rwx" "u::r-x,g::r--,o::---" acldir 2>&1
+_acl_list acldir
+cd acldir
+
+touch file2
+_acl_ls file2
+_acl_list file2
+
+#ensure that umask is not having an effect 
+#so set it and see
+umask 722
+touch file3
+_acl_ls file3
+_acl_list file3
+
+cd ..
+umask 022
+
+
+#-------------------------------------------------------
+
+echo ""
+echo "=== Removing ACLs ==="
+_acl_list file1
+_acl_list acldir
+_acl_list acldir/file2
+echo "Remove ACLs..."
+chacl -R file1
+chacl -B acldir
+chacl -R acldir/file2
+echo "Note: IRIX interface would mean empty ACLs - Linux would show mode ACLs" 
+_acl_list file1
+_acl_list acldir
+_acl_list acldir/file2
+
+#-------------------------------------------------------
+
+echo ""
+echo "=== Test out error messages for ACL text parsing  ==="
+
+touch file1
+set -x
+chacl u file1
+chacl u: file1
+chacl u:rumpledumpleunknownuser file1
+chacl u:rumpledumpleunknownuser: file1
+chacl g:rumpledumpleunknowngrp file1
+chacl g:rumpledumpleunknowngrp: file1
+chacl o:user1:rwx file1
+chacl m:user1:rwx file1
+chacl a::rwx file1
+set +x
+
+#-------------------------------------------------------
+
+echo ""
+echo "=== Test out large ACLs  ==="
+touch largeaclfile
+XFS_ACL_MAX_ENTRIES=25
+num_aces_pre=`expr $XFS_ACL_MAX_ENTRIES - 1`
+num_aces_post=`expr $XFS_ACL_MAX_ENTRIES + 1`
+
+acl1=`_create_n_aces $num_aces_pre`
+acl2=`_create_n_aces $XFS_ACL_MAX_ENTRIES`
+acl3=`_create_n_aces $num_aces_post`
+
+echo "1 below xfs acl max"
+chacl $acl1 largeaclfile
+_acl_list largeaclfile | _filter_aces
+
+echo "xfs acl max"
+chacl $acl2 largeaclfile
+_acl_list largeaclfile | _filter_aces
+
+echo "1 above xfs acl max"
+chacl $acl3 largeaclfile
+_acl_list largeaclfile | _filter_aces
+
+#-------------------------------------------------------
+
+if [ "$FSTYP" == "udf" ]; then
+    cd /
+    umount $TARGET_DIR
+    # Check the filesystem
+    _check_scratch_fs
+fi
+# success, all done
+status=0
+exit
diff --git a/099.out b/099.out
new file mode 100644 (file)
index 0000000..3f4f663
--- /dev/null
+++ b/099.out
@@ -0,0 +1,215 @@
+QA output created by 099
+
+=== Test minimal ACE ===
+Setup file
+-rwxrw-r-- id1 id2 file1
+
+--- Test get and set of ACL ---
+Note: IRIX interface gave an empty ACL - Linux outputs an ACL
+file1 []
+Try using single colon separator
+Note: IRIX interface FAILs because of single colon - Linux one allows it
+chacl: "u::r--,g::rwx,o:rw-" is an invalid ACL specification.
+Expect to PASS
+file1 [u::r--,g::rwx,o::rw-]
+
+--- Test sync of ACL with std permissions ---
+-r--rwxrw-+ id1 id2 file1
+-rw-rwxrw-+ id1 id2 file1
+file1 [u::rw-,g::rwx,o::rw-]
+
+--- Test owner permissions ---
+file1 [u::r-x,g::---,o::---]
+Expect to PASS
+Test was executed
+Expect to FAIL
+./file1: Permission denied
+
+--- Test group permissions ---
+file1 [u::---,g::r-x,o::---]
+Expect to FAIL - acl1 is owner
+./file1: Permission denied
+Expect to PASS - acl2 matches group
+Test was executed
+Expect to PASS - acl2 matches sup group
+Test was executed
+Expect to FAIL - acl3 is not in group
+./file1: Permission denied
+
+--- Test other permissions ---
+file1 [u::---,g::---,o::r-x]
+Expect to FAIL - acl1 is owner
+./file1: Permission denied
+Expect to FAIL - acl2 is in group
+./file1: Permission denied
+Expect to FAIL - acl2 is in sup. group
+./file1: Permission denied
+Expect to PASS - acl3 is not owner or in group
+Test was executed
+
+=== Test Extended ACLs ===
+
+--- Test adding a USER ACE ---
+Expect to FAIL as no MASK provided
+chacl: error setting access acl on "file1":Invalid argument
+Ensure that ACL has not been changed
+file1 [u::---,g::---,o::r-x]
+Expect to PASS - USER ACE matches user
+file1 [u::---,g::---,o::---,u:id2:r-x,m::rwx]
+Test was executed
+Expect to FAIL - USER ACE does not match user
+./file1: Permission denied
+
+--- Test adding a GROUP ACE ---
+Expect to FAIL as no MASK provided
+chacl: error setting access acl on "file1":Invalid argument
+Ensure that ACL has not been changed
+file1 [u::---,g::---,o::---,u:id2:r-x,m::rwx]
+file1 [u::---,g::---,o::---,g:id2:r-x,m::rwx]
+Expect to PASS - GROUP ACE matches group
+Test was executed
+Expect to PASS - GROUP ACE matches sup group
+Test was executed
+Expect to FAIL - GROUP ACE does not match group
+./file1: Permission denied
+
+--- Test MASK ---
+file1 [u::---,g::---,o::---,g:id2:r-x,m::-w-]
+Expect to FAIL as MASK prohibits execution
+./file1: Permission denied
+Expect to FAIL as MASK prohibits execution
+./file1: Permission denied
+Expect to PASS as MASK allows execution
+Test was executed
+
+--- Test ACE priority ---
+Expect to FAIL as should match on owner
+./file1: Permission denied
+Expect to PASS as should match on user
+Test was executed
+
+=== Test can read ACLs without access permissions ===
+file1 [o::---,g::---,u::---]
+
+=== Test Default ACLs ===
+acldir [u::rwx,g::rwx,o::rwx/u::r-x,g::r--,o::---]
+-r--r-----+ 0 0 file2
+file2 [u::r--,g::r--,o::---]
+-r--r-----+ 0 0 file3
+file3 [u::r--,g::r--,o::---]
+
+=== Removing ACLs ===
+file1 [o::---,g::---,u::---]
+acldir [u::rwx,g::rwx,o::rwx/u::r-x,g::r--,o::---]
+acldir/file2 [u::r--,g::r--,o::---]
+Remove ACLs...
+Note: IRIX interface would mean empty ACLs - Linux would show mode ACLs
+file1 []
+acldir []
+acldir/file2 []
+
+=== Test out error messages for ACL text parsing  ===
++ chacl u file1
+chacl: "u" is an invalid ACL specification.
++ chacl u: file1
+chacl: "u:" is an invalid ACL specification.
++ chacl u:rumpledumpleunknownuser file1
+chacl: "u:rumpledumpleunknownuser" is an invalid ACL specification.
++ chacl u:rumpledumpleunknownuser: file1
+chacl: "u:rumpledumpleunknownuser:" is an invalid ACL specification.
++ chacl g:rumpledumpleunknowngrp file1
+chacl: "g:rumpledumpleunknowngrp" is an invalid ACL specification.
++ chacl g:rumpledumpleunknowngrp: file1
+chacl: "g:rumpledumpleunknowngrp:" is an invalid ACL specification.
++ chacl o:user1:rwx file1
+chacl: "o:user1:rwx" is an invalid ACL specification.
++ chacl m:user1:rwx file1
+chacl: "m:user1:rwx" is an invalid ACL specification.
++ chacl a::rwx file1
+chacl: "a::rwx" is an invalid ACL specification.
+
+=== Test out large ACLs  ===
+1 below xfs acl max
+largeaclfile 
+user::rwx
+group::rwx
+other::rwx
+mask::rwx
+user:20:rwx
+user:19:rwx
+user:18:rwx
+user:17:rwx
+user:16:rwx
+user:15:rwx
+user:14:rwx
+user:13:rwx
+user:12:rwx
+user:11:rwx
+user:10:rwx
+user:9:rwx
+user:8:rwx
+user:7:rwx
+user:6:rwx
+user:5:rwx
+user:4:rwx
+user:3:rwx
+user:2:rwx
+user:1:rwx
+
+xfs acl max
+largeaclfile 
+user::rwx
+group::rwx
+other::rwx
+mask::rwx
+user:21:rwx
+user:20:rwx
+user:19:rwx
+user:18:rwx
+user:17:rwx
+user:16:rwx
+user:15:rwx
+user:14:rwx
+user:13:rwx
+user:12:rwx
+user:11:rwx
+user:10:rwx
+user:9:rwx
+user:8:rwx
+user:7:rwx
+user:6:rwx
+user:5:rwx
+user:4:rwx
+user:3:rwx
+user:2:rwx
+user:1:rwx
+
+1 above xfs acl max
+chacl: error setting access acl on "largeaclfile":Error 0
+largeaclfile 
+user::rwx
+group::rwx
+other::rwx
+mask::rwx
+user:21:rwx
+user:20:rwx
+user:19:rwx
+user:18:rwx
+user:17:rwx
+user:16:rwx
+user:15:rwx
+user:14:rwx
+user:13:rwx
+user:12:rwx
+user:11:rwx
+user:10:rwx
+user:9:rwx
+user:8:rwx
+user:7:rwx
+user:6:rwx
+user:5:rwx
+user:4:rwx
+user:3:rwx
+user:2:rwx
+user:1:rwx
+
diff --git a/100 b/100
new file mode 100755 (executable)
index 0000000..0b7787f
--- /dev/null
+++ b/100
@@ -0,0 +1,92 @@
+#! /bin/sh
+# FS QA Test No. 093. Modified from UDF QA test 030.
+#
+# Test whether a tarred directory structure can be untarred onto
+# a UDF file system.
+# 
+#-----------------------------------------------------------------------
+#  Copyright (c) 2000-2004 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; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will 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 to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+#  USA
+#
+#  Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
+#  Mountain View, CA 94043, USA, or: http://www.sgi.com
+#-----------------------------------------------------------------------
+#
+# creator
+owner=ajones@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
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_cleanup()
+{
+     rm -f $tmp.* $testfile
+}
+# real QA test starts here
+_supported_fs xfs udf nfs
+_supported_os IRIX Linux
+
+# Use _populate_fs() in common.rc to create a directory structure.
+TEMP_DIR=/tmp
+TAR_FILE=temp.tar
+NDIRS=3
+NFILES=6
+DEPTH=5
+POPULATED_DIR=$TEMP_DIR/populate_root
+SIZE=10
+
+rm -f $seq.full
+
+# Clean up if file exist from prevous run
+rm -rf $POPULATED_DIR
+rm -f $TEMP_DIR/$TAR_FILE
+
+# Create the new directory structure
+_populate_fs -n $NDIRS -f $NFILES -d $DEPTH -r $POPULATED_DIR -s $SIZE >>$here/$seq.full 2>&1
+
+# Then tar up the directory structure
+tar -cvf $TEMP_DIR/$TAR_FILE $POPULATED_DIR >>$here/$seq.full 2>&1
+
+# create f/s
+_require_scratch
+_setup_testdir
+
+# untar on f/s
+cd $testdir
+tar -xRvf $TEMP_DIR/$TAR_FILE >>$here/$seq.full 2>&1
+cd $here
+
+
+# use diff -qr to compare
+ls -R -l ${testdir}${POPULATED_DIR} >>$here/$seq.full 2>&1
+diff -qr $POPULATED_DIR ${testdir}${POPULATED_DIR}
+
+cd /
+_cleanup_testdir
+_check_scratch_fs
+
+status=0
+exit
diff --git a/100.out b/100.out
new file mode 100644 (file)
index 0000000..b6572c4
--- /dev/null
+++ b/100.out
@@ -0,0 +1 @@
+QA output created by 100
diff --git a/101 b/101
new file mode 100755 (executable)
index 0000000..67e0bdc
--- /dev/null
+++ b/101
@@ -0,0 +1,66 @@
+#! /bin/sh
+# FS QA Test No. 101. Modified from UDFQA test 029. 
+#
+# This tests mkfs_udf with -s [SIZE] option. 
+#
+#-----------------------------------------------------------------------
+#  Copyright (c) 2000-2004 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; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will 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 to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+#  USA
+#
+#  Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
+#  Mountain View, CA 94043, USA, or: http://www.sgi.com
+#-----------------------------------------------------------------------
+#
+# creator
+owner=ajones@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+FS_SIZE=2048
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+_supported_fs udf 
+_supported_os IRIX
+
+MKFS_OPTIONS="-s $FS_SIZE"
+
+_require_scratch
+_setup_udf_scratchdir
+umount $SCRATCH_MNT
+
+# Inspect the space bitmap
+echo bitmap | udf_db -c - $SCRATCH_DEV
+
+# Run udf_test
+_check_udf_filesystem $SCRATCH_DEV $FS_SIZE
+
+# success, all done
+status=0
+exit
diff --git a/101.out b/101.out
new file mode 100644 (file)
index 0000000..1ca59a8
--- /dev/null
+++ b/101.out
@@ -0,0 +1,19 @@
+QA output created by 101
+    <space_bitmap name="unalloc">
+        <desc_tag name="tag">
+            <id val="264" />
+            <descriptor_ver val="3" />
+            <cksum val="13" />
+            <reserved val="0" />
+            <serial_num val="0" />
+            <desc_crc val="0" />
+            <desc_crc_len val="0" />
+            <tag_loc val="1" />
+        </desc_tag>
+        <num_bits val="1500" />
+        <num_bytes val="188" />
+        <bitmap>
+            0-3 [4]: 0
+            4-1499 [1496]: 1
+        </bitmap>
+    </space_bitmap>
diff --git a/102 b/102
new file mode 100755 (executable)
index 0000000..1d9a73f
--- /dev/null
+++ b/102
@@ -0,0 +1,63 @@
+#! /bin/sh
+# FS QA Test No. 102
+#
+# This tests mkfs_udf/mkudffs and the device detection code
+# Modified from UDFQA test 031.
+#
+#-----------------------------------------------------------------------
+#  Copyright (c) 2000-2004 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; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will 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 to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+#  USA
+#
+#  Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
+#  Mountain View, CA 94043, USA, or: http://www.sgi.com
+#-----------------------------------------------------------------------
+#
+# creator
+owner=ajones@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()
+{
+    rm -f $tmp.*
+    cd /
+    _cleanup_testdir
+}
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+_supported_fs udf 
+_supported_os Linux IRIX
+
+_require_scratch
+_setup_udf_scratchdir
+
+# Checks the udf filesystem
+_check_udf_filesystem $SCRATCH_DEV
+
+echo "Finished"
+
+# success, all done
+status=0
+exit
diff --git a/102.out b/102.out
new file mode 100644 (file)
index 0000000..bce1a19
--- /dev/null
+++ b/102.out
@@ -0,0 +1,2 @@
+QA output created by 102
+Finished
diff --git a/README b/README
index dc12ac8..7dfb0aa 100644 (file)
--- a/README
+++ b/README
@@ -23,7 +23,8 @@ Preparing system for tests (IRIX and Linux):
       mkfs_udf and udf_db for IRIX and mkudffs for Linux. Also download and 
       build the Philips UDF Verification Software from 
       http://www.extra.research.philips.com/udf/, then copy the udf_test 
-      binary to xfstests/src/.
+      binary to xfstests/src/. If you wish to disable UDF verification test
+      set the environment variable DISABLE_UDF_TEST to 1.
        
     
     - create two partitions to use for testing
index c3b3578..2b333ef 100644 (file)
@@ -1,37 +1,24 @@
 ##/bin/sh
-
+#-----------------------------------------------------------------------
+#  Copyright (c) 2000-2004 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; either version 2 of the License, or
+#  (at your option) any later version.
 #
-# Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
-# 
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of version 2 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.
-# 
-# Further, this software is distributed without any warranty that it is
-# free of the rightful claim of any third person regarding infringement
-# or the like.  Any license provided herein, whether implied or
-# otherwise, applies only to this software file.  Patent licenses, if
-# any, provided herein do not apply to combinations of this program with
-# other software, or any other product whatsoever.
-# 
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write the Free Software Foundation, Inc., 59
-# Temple Place - Suite 330, Boston MA 02111-1307, USA.
-# 
-# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
-# Mountain View, CA  94043, or:
-# 
-# http://www.sgi.com 
-# 
-# For further information regarding this notice, see: 
-# 
-# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+#  This program is distributed in the hope that it will 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 to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+#  USA
+#
+#  Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
+#  Mountain View, CA 94043, USA, or: http://www.sgi.com
+#-----------------------------------------------------------------------
 # common extended attribute and ACL support
 
 # pick three unused user/group ids, store them as $acl[1-3]
@@ -80,7 +67,7 @@ _acl_list()
     _file1=$1
 
     if [ $HOSTOS = "IRIX" ]; then
-       ls -D $_file1 | _acl_filter_id
+       ls -dD $_file1 | _acl_filter_id
     else 
         chacl -l $_file1 | _acl_filter_id
     fi
@@ -137,5 +124,32 @@ _acl_requirements()
     fi
 }
 
+# filter user ace names to user ids
+#
+_filter_aces()
+{
+    tr '\[' '\012' |\
+    tr ']' '\012' |\
+    tr ',' '\012' |\
+    $AWK_PROG '
+       BEGIN {
+           FS=":"
+           while ( getline <"/etc/passwd" > 0 ) {
+               idlist[$1] = $3 
+           }
+       }
+       /^u/ { if ($2 in idlist) sub($2, idlist[$2]); print; next}
+       {print}
+    ' |\
+    sed -e 's/u:/user:/' -e 's/g:/group:/' -e 's/o:/other:/' -e 's/m:/mask:/'
+}
+
+_list_acl()
+{
+    file=$1
+
+    ls -dD $file | _acl_filter_id
+}
+
 # make sure this script returns success
 /bin/true
index 482802c..e7ec479 100644 (file)
--- a/common.rc
+++ b/common.rc
@@ -764,13 +764,20 @@ _check_xfs_filesystem()
     return 0    
 }
 
+# Filter the knowen errors the UDF Verifier reports. 
+_udf_test_known_error_filter() 
+{
+       egrep -v "PVD  60  Error: Interchange Level: 1, Maximum Interchange Level: 0|FSD  28  Error: Interchange Level: 1, Maximum Interchange Level: 1,|PVD  72  Warning: Volume Set Identifier: \"\*IRIX UDF\",|Warning: [0-9]+ unused blocks NOT marked as unallocated."
+
+}
+
 _check_udf_filesystem()
 {
     [ "$DISABLE_UDF_TEST" == "1" ] && return
 
     if [ $# -ne 1 -a $# -ne 2 ]
     then
-       echo "Usage: _check_fs device [last_block]" 1>&2
+       echo "Usage: _check_udf_filesystem device [last_block]" 1>&2
        exit 1
     fi
 
@@ -791,17 +798,13 @@ _check_udf_filesystem()
         OPT_ARG="-lastvalidblock $LAST_BLOCK"
     fi
 
-    # Output messages format:
-    #       Error messages contain :   "Error:" or   "error:"
-    #     Warning messages contain : "Warning:" or "warning:"
-    #   Attention messages contain :    "Note:" or    "note:"
-    # Message continuation lines start with a "-" character.
-
     rm -f $seq.checkfs
     sleep 1 # Due to a problem with time stamps in udf_test
-    $here/src/udf_test $OPT_ARG $device | tee $here/$seq.checkfs | \
-       egrep -i "error:|warning:|Error count:|Warning count:" | \
-       egrep -v "Error count:   0|Warning count:   0"
+    $here/src/udf_test $OPT_ARG $device | tee $here/$seq.checkfs | egrep "Error|Warning" | \
+       _udf_test_known_error_filter | \
+       egrep -iv "Error count:.*[0-9]+.*total occurrences:.*[0-9]+|Warning count:.*[0-9]+.*total occurrences:.*[0-9]+" | \
+       sed "s/^.*$/Warning UDF Verifier reported errors see $seq.checkfs./g"
+
 }
 
 _check_test_fs()
@@ -900,7 +903,7 @@ _setup_xfs_testdir()
     testdir=$TEST_DIR
 }
 
-_setup_udf_testdir()
+_setup_udf_scratchdir()
 {
     [ "$FSTYP" != "udf" ] \
        && _fail "setup_udf_testdir: \$FSTYP is not udf"
@@ -926,10 +929,10 @@ _setup_udf_testdir()
     testdir=$SCRATCH_MNT
 }
 
-_setup_nfs_testdir()
+_setup_nfs_scratchdir()
 {
     [ "$FSTYP" != "nfs" ] \
-       && _fail "setup_udf_testdir: \$FSTYP is not nfs"
+       && _fail "setup_nfs_testdir: \$FSTYP is not nfs"
     [ -z "$SCRATCH_DEV" ] \
        && _notrun "this test requires a valid host fs for \$SCRATCH_DEV"
     [ -z "$SCRATCH_MNT" ] \
@@ -938,7 +941,7 @@ _setup_nfs_testdir()
     # mounted?
     if _mount | grep -q $SCRATCH_DEV
     then 
-        # if it's mounted, make sure its on $TEST_RW_DIR
+        # if it's mounted, make sure its on $SCRATCH_MNT
         if ! _mount | grep $SCRATCH_DEV | grep -q $SCRATCH_MNT
         then 
             _fail "\$SCRATCH_DEV is mounted but not on \$SCRATCH_MNT - aborting"
@@ -952,6 +955,11 @@ _setup_nfs_testdir()
     testdir=$SCRATCH_MNT
 }
 
+#
+# Warning for UDF and NFS this function calls _setup_udf_scratchdir and 
+# _setup_udf_scratchdir. This is done because testdir is a persistent 
+# XFS only partition. 
+#
 _setup_testdir()
 {
     case $FSTYP in
@@ -959,10 +967,10 @@ _setup_testdir()
        _setup_xfs_testdir
        ;;
     udf)
-       _setup_udf_testdir
+       _setup_udf_scratchdir
        ;;
     nfs*)
-       _setup_nfs_testdir
+       _setup_nfs_scratchdir
        ;;
     *)
        _fail "\$FSTYP is not xfs, udf or nfs"
@@ -1045,5 +1053,87 @@ _link_out_file()
    fi
 }
 
+# Populate a filesystem with inodes for performance experiments
+# 
+# usage: populate [-v] [-n ndirs] [-f nfiles] [-d depth] [-r root] [-s size]
+# 
+
+_die()
+{
+        echo $@
+        exit 1
+}
+
+_nfiles()
+{
+        f=0
+        while [ $f -lt $1 ]
+        do
+                file=f$f
+                touch $file
+                if [ $size -gt 0 ]; then
+                    dd if=/dev/zero of=$file bs=1024 count=$size 
+                fi
+                f=`expr $f + 1`
+        done
+}
+
+# takes dirname, depth
+_descend()
+{
+        dirname=$1; depth=$2
+        mkdir $dirname  || die "mkdir $dirname failed"
+        cd $dirname
+
+        _nfiles $files           # files for this dir
+
+        [ $depth -eq 0 ] && return
+        deep=`expr $depth - 1`  # go 1 down
+
+        [ $verbose = true ] && echo "descending, depth from leaves = $deep"
+
+        d=0
+        while [ $d -lt $dirs ]
+        do
+                _descend d$d $deep &
+                d=`expr $d + 1`
+                wait
+        done
+}
+
+
+_populate_fs()
+{
+
+    here=`pwd`
+    dirs=5          # ndirs in each subdir till leaves
+    size=0          # sizeof files in K
+    files=100       # num files in _each_ subdir
+    depth=2         # depth of tree from root to leaves
+    verbose=false
+    root=root       # path of initial root of directory tree
+
+    while getopts "d:f:n:r:s:v" c
+    do
+        case $c in
+        d)      depth=$OPTARG;;
+        n)      dirs=$OPTARG;;
+        f)      files=$OPTARG;;
+        s)      size=$OPTARG;;
+        v)      verbose=true;;
+        r)      root=$OPTARG;;
+        esac
+    done
+
+
+    _descend $root $depth
+    wait
+
+    cd $here
+
+    [ $verbose = true ] && echo done
+
+}
+
 # make sure this script returns success
 /bin/true
diff --git a/group b/group
index 2d233e1..c32cd0b 100644 (file)
--- a/group
+++ b/group
@@ -69,28 +69,31 @@ auto                dxm@sgi.com
 # ioctl - tests which use ioctl commands (directly/indirectly)
 ioctl          nathans@sgi.com
 
+# udf filesystem
+udf            ajones@sgi.com
+
 # test-group association ... one line per test
 #
-001 rw dir auto
-002 metadata auto
+001 rw dir udf auto
+002 metadata udf auto
 003 db auto
 004 db auto
-005 dir auto
-006 dir auto
-007 dir auto
+005 dir udf auto
+006 dir udf auto
+007 dir udf auto
 008 rw ioctl auto
 009 rw ioctl auto
-010 other auto
-011 dir auto
+010 other udf auto
+011 dir udf auto
 012 rw auto
-013 other ioctl auto
-014 rw auto
+013 other ioctl udf auto
+014 rw udf auto
 015 other auto
 016 rw auto
 017 other auto
 018 log logprint v2log auto
 019 mkfs auto
-020 metadata attr auto
+020 metadata attr udf auto
 021 db attr auto
 022 dump ioctl auto
 023 dump ioctl auto
@@ -121,7 +124,7 @@ ioctl               nathans@sgi.com
 048 other auto
 049 rw auto
 050 quota auto
-051 acl auto
+051 acl udf auto
 052 quota db auto
 053 acl repair auto
 054 quota auto
@@ -132,21 +135,21 @@ ioctl             nathans@sgi.com
 059 dump ioctl
 060 dump ioctl
 061 dump ioctl auto
-062 attr auto
+062 attr udf auto
 063 dump auto
 064 dump
 065 dump auto
 066 dump ioctl auto
 067 acl attr auto
 068 other
-069 rw auto
-070 attr auto
+069 rw udf auto
+070 attr udf auto
 071 rw auto
 072 rw auto
 073 copy auto
-074 rw auto
-075 rw auto
-076 metadata rw
+074 rw udf auto
+075 rw udf auto
+076 metadata rw udf
 077 acl attr auto
 078 growfs auto
 079 acl attr ioctl metadata auto
@@ -163,7 +166,13 @@ ioctl              nathans@sgi.com
 090 rw
 091 rw
 092 other auto
-093 attr cap auto
+093 attr cap udf auto
 094 metadata dir ioctl auto
 095 log v2log auto
 096 mkfs v2log auto
+097 udf auto
+098 udf auto
+099 udf auto
+100 udf auto
+101 udf auto
+102 udf auto