Fix quota tests correctly to run on SuSE.
[xfstests-dev.git] / common.quota
index 12095401427a6ce15ab34ef8ba10dd56f1415229..7f9a2a2b66bf8b373d6a375beff5e0c739788841 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Functions useful for quota tests
 # 
-# Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+# Copyright (c) 2000-2001 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
@@ -41,11 +41,8 @@ _require_quota()
 {
     src/feature -q $TEST_DEV
     [ $? -ne 0 ] && _notrun "Installed kernel does not support XFS quota"
-
-    [ ! -x /usr/sbin/repquota ] && _notrun "Quota user tools not installed"
-
-    /usr/sbin/repquota -m -s -a >/dev/null 2>&1
-    [ $? -ne 0 ] && _notrun "Installed quota tools do not support XFS"
+    [ -x /usr/etc/quotaon -o -x /sbin/quotaon -o -x /usr/sbin/quotaon ] || \
+       _notrun "Quota user tools not installed"
 }
 
 # create a file as a specific user (uid)
@@ -65,28 +62,126 @@ _file_as_id()
        _notrun "broken type in call to _file_as_id in test $seq"
     fi
 
-    perl <<EOF
+    perl <<EOF >>$seq.full 2>&1
        \$| = 1;
        $magik = $2;
-       exec "dd if=/dev/zero of=$1 bs=$4 count=$5 >>$seq.full 2>&1";
+       if ($5 == 0) {
+           print "touch $1";
+           exec "touch $1";
+       } else {
+           print "dd if=/dev/zero of=$1 bs=$4 count=$5";
+           exec "dd if=/dev/zero of=$1 bs=$4 count=$5";
+       }
 EOF
+# for debugging the above euid change, try... [need write in cwd]
+#      exec "dd if=/dev/zero of=$1 bs=$4 count=$5 >>$seq.full 2>&1";
 }
 
 _choose_uid()
 {
-    perl -ne '@a = split(/:/); END { print $a[2]; }' /etc/passwd
+    perl -ne '@a = split(/:/); END { printf "id=%d name=%s\n", $a[2],$a[0] }' \
+       /etc/passwd
 }
 
 _choose_gid()
 {
-    perl -ne '@a = split(/:/); END { print $a[2]; }' /etc/group
+    perl -ne '@a = split(/:/); END { printf "id=%d name=%s\n", $a[2],$a[0] }' \
+       /etc/group
 }
 
+#
+# filter to get the guts out
+# and make linux and irix similar
+#
 _filter_repquota()
 {
-    perl -ne 's/^(\w+)\s+([-|+])/[NAME]    \2/g; print'
+    tee -a $seq.full | $AWK_PROG '
+       /File limits/ {
+               gotit = 1
+       }
+       gotit==1 {
+               sub(/Disk/, "Block") 
+               gsub(/timeleft/, "grace")
+               gsub(/[.]0 /,"")
+               sub(/- /, "* ")
+               sub(/[+] /, "* ")
+               gsub(/1week/,"7days")
+               gsub(/NOT STARTED/,"")
+               gsub(/[ \t]+/, " ")
+               if ($0 ~ / [-+]/)
+                   $1 = "name"
+               if ($0 !~ /^$/)
+                   print
+               next
+       }
+    ' | sed -e '/-----------------/d'
+}
+
+_qmount()
+{
+    umount $SCRATCH_DEV >/dev/null 2>&1
+    _scratch_mount || _fail "qmount failed"
+    chmod ugo+rwx $SCRATCH_MNT
+    [ -x /usr/sbin/quot ] && quot $SCRATCH_MNT >>$seq.full 2>&1
+}
+
+#-----------------------------------------------------------------------------------
+#
+# wrappers for Linux/IRIX differences
+#
+_setquota()
+{
+    _opt_type=$1
+    _id=$2
+    _bsoft=$3
+    _bhard=$4
+    _isoft=$5
+    _ihard=$6
+    _fs=$7
+
+    [ $# -eq 7 ] || _fail "_setquota failed with wrong # args: $*"
+
+    if [ $HOSTOS = "Linux" ]; then
+       echo "setquota $_opt_type $_id $_bsoft $_bhard $_isoft $_ihard $_fs" >>$seq.full
+       setquota $_opt_type $_id $_bsoft $_bhard $_isoft $_ihard $_fs
+    else
+       # IRIX
+        if [ $_opt_type = "-u" ]; then
+               _opt_type=""
+               id_param="uid"
+       else 
+               id_param="gid"
+       fi
+       echo "/usr/etc/edquota $_opt_type -f $_fs -l $id_param=$_id,bsoft=$_bsoft,bhard=$_bhard,isoft=$_isoft,ihard=$_ihard" >>$seq.full
+       /usr/etc/edquota $_opt_type -f $_fs -l $id_param=$_id,bsoft=$_bsoft,bhard=$_bhard,isoft=$_isoft,ihard=$_ihard
+    fi
+}
+
+_quota()
+{
+    echo "quota $*" >>$seq.full
+    if [ $HOSTOS = "Linux" ]; then
+       quota $*
+    else
+        # clear -u
+        args=`echo $*|sed -e 's/-u//'`
+       quota -v $args
+    fi
+}
+
+_repquota()
+{
+    echo "repquota $*" >>$seq.full
+    if [ $HOSTOS = "Linux" ]; then
+       repquota $*
+    else
+        # clear -u
+        args=`echo $*|sed -e 's/-u//'`
+       repquota -v $args
+    fi
 }
 
+#-----------------------------------------------------------------------------------
 
 # make sure this script returns success
 /bin/true