Whamcloud - gitweb
LU-1502 quota: Add basic tests for quota
authorNiu Yawei <niu@whamcloud.com>
Tue, 12 Jun 2012 08:37:13 +0000 (01:37 -0700)
committerAndreas Dilger <adilger@whamcloud.com>
Sat, 15 Sep 2012 18:50:40 +0000 (12:50 -0600)
Fixed two minor defects in the quota code, added basic tests for
the quota feature.

Note that the m_quota test is *FAILING* on some systems, but the same
test is passing on other systems (in particular the build/test nodes):

  @@ -24,7 +24,7 @@ Pass 2: Checking directory structure
   Pass 3: Checking directory connectivity
   Pass 4: Checking reference counts
   Pass 5: Checking group summary information
  -test_filesys: 11/32768 files (18.2% non-contiguous), 5703/131072 blocks
  +test_filesys: 11/32768 files (18.2% non-contiguous), 5709/131072 blocks
   Exit status is 0

   Filesystem volume name:   <none>
  @@ -39,7 +39,7 @@ Filesystem OS type:       Linux
   Inode count:              32768
   Block count:              131072
   Reserved block count:     6553
  -Free blocks:              125369
  +Free blocks:              125363
   Free inodes:              32757
   First block:              1
   Block size:               1024
  @@ -65,8 +65,8 @@ Group 0: (Blocks 1-8192)
     Reserved GDT blocks at 3-258
     Block bitmap at 259 (+258), Inode bitmap at 260 (+259)
     Inode table at 261-516 (+260)
  -  7650 free blocks, 2037 free inodes, 2 directories
  -  Free blocks: 543-8192
  +  7644 free blocks, 2037 free inodes, 2 directories
  +  Free blocks: 549-8192
     Free inodes: 12-2048
   Group 1: (Blocks 8193-16384)
     Backup superblock at 8193, Group descriptors at 8194-8194

I'm leaving this in the "passing-on-build nodes" state, even though it
is failing on my local system, so that at least we can build and test
packages.

Signed-off-by: Niu Yawei <niu@whamcloud.com>
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: If3d68075aa89d6abf0cf77be93ee3b7d927ed545

configure
configure.in
lib/quota/mkquota.c
tests/Makefile.in
tests/m_quota/expect.1 [new file with mode: 0644]
tests/m_quota/script [new file with mode: 0644]
tests/t_quota_1on/name [new file with mode: 0644]
tests/t_quota_1on/script [new file with mode: 0644]
tests/t_quota_2off/name [new file with mode: 0644]
tests/t_quota_2off/script [new file with mode: 0644]

index 708b812..52def13 100755 (executable)
--- a/configure
+++ b/configure
@@ -5348,6 +5348,7 @@ $as_echo "no" >&6; }
         fi
 
 fi
+QUOTA_CMT=
 
 # Check whether --enable-quota was given.
 if test "${enable_quota+set}" = set; then :
index 40d5924..21357cb 100644 (file)
@@ -607,6 +607,7 @@ dnl
 dnl handle --enable-quota
 dnl
 PKG_PROG_PKG_CONFIG
+QUOTA_CMT=
 AH_TEMPLATE([CONFIG_QUOTA], [Define to 1 to enable quota support])
 AC_ARG_ENABLE([quota],
 [  --disable-libquota    disable quota support],
index fd3fbb5..7023369 100644 (file)
@@ -99,6 +99,7 @@ errcode_t quota_remove_inode(ext2_filsys fs, int qtype)
                quota_inode_truncate(fs, qf_ino);
 
        ext2fs_mark_super_dirty(fs);
+       fs->flags &= ~EXT2_FLAG_SUPER_ONLY;
        ext2fs_write_bitmaps(fs);
        return 0;
 }
index 058a6f5..084c477 100644 (file)
@@ -17,6 +17,7 @@ test_one: $(srcdir)/test_one.in Makefile mke2fs.conf
        @echo "Creating test_one script..."
        @echo "#!/bin/sh" > test_one
 @HTREE_CMT@    @echo "HTREE=y" >> test_one
+@QUOTA_CMT@    @echo "QUOTA=y" >> test_one
        @echo "SRCDIR=@srcdir@" >> test_one
        @echo "DIFF_OPTS=@UNI_DIFF_OPTS@" >> test_one
        @cat $(srcdir)/test_one.in >> test_one
diff --git a/tests/m_quota/expect.1 b/tests/m_quota/expect.1
new file mode 100644 (file)
index 0000000..2066147
--- /dev/null
@@ -0,0 +1,170 @@
+Filesystem label=
+OS type: Linux
+Block size=1024 (log=0)
+Fragment size=1024 (log=0)
+Stride=0 blocks, Stripe width=0 blocks
+32768 inodes, 131072 blocks
+6553 blocks (5.00%) reserved for the super user
+First data block=1
+Maximum filesystem blocks=67371008
+16 block groups
+8192 blocks per group, 8192 fragments per group
+2048 inodes per group
+Superblock backups stored on blocks: 
+       8193, 24577, 40961, 57345, 73729
+
+Allocating group tables:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone                            
+Writing inode tables:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone                            
+Writing superblocks and filesystem accounting information:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone
+
+Filesystem features: ext_attr resize_inode dir_index filetype sparse_super quota
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 11/32768 files (18.2% non-contiguous), 5709/131072 blocks
+Exit status is 0
+
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super quota
+Default mount options:    (none)
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              32768
+Block count:              131072
+Reserved block count:     6553
+Free blocks:              125363
+Free inodes:              32757
+First block:              1
+Block size:               1024
+Fragment size:            1024
+Reserved GDT blocks:      256
+Blocks per group:         8192
+Fragments per group:      8192
+Inodes per group:         2048
+Inode blocks per group:   256
+Mount count:              0
+Check interval:           15552000 (6 months)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:              128
+Default directory hash:   half_md4
+User quota inode:         3
+Group quota inode:        4
+
+
+Group 0: (Blocks 1-8192)
+  Primary superblock at 1, Group descriptors at 2-2
+  Reserved GDT blocks at 3-258
+  Block bitmap at 259 (+258), Inode bitmap at 260 (+259)
+  Inode table at 261-516 (+260)
+  7644 free blocks, 2037 free inodes, 2 directories
+  Free blocks: 549-8192
+  Free inodes: 12-2048
+Group 1: (Blocks 8193-16384)
+  Backup superblock at 8193, Group descriptors at 8194-8194
+  Reserved GDT blocks at 8195-8450
+  Block bitmap at 8451 (+258), Inode bitmap at 8452 (+259)
+  Inode table at 8453-8708 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 8709-16384
+  Free inodes: 2049-4096
+Group 2: (Blocks 16385-24576)
+  Block bitmap at 16385 (+0), Inode bitmap at 16386 (+1)
+  Inode table at 16387-16642 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 16643-24576
+  Free inodes: 4097-6144
+Group 3: (Blocks 24577-32768)
+  Backup superblock at 24577, Group descriptors at 24578-24578
+  Reserved GDT blocks at 24579-24834
+  Block bitmap at 24835 (+258), Inode bitmap at 24836 (+259)
+  Inode table at 24837-25092 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 25093-32768
+  Free inodes: 6145-8192
+Group 4: (Blocks 32769-40960)
+  Block bitmap at 32769 (+0), Inode bitmap at 32770 (+1)
+  Inode table at 32771-33026 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 33027-40960
+  Free inodes: 8193-10240
+Group 5: (Blocks 40961-49152)
+  Backup superblock at 40961, Group descriptors at 40962-40962
+  Reserved GDT blocks at 40963-41218
+  Block bitmap at 41219 (+258), Inode bitmap at 41220 (+259)
+  Inode table at 41221-41476 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 41477-49152
+  Free inodes: 10241-12288
+Group 6: (Blocks 49153-57344)
+  Block bitmap at 49153 (+0), Inode bitmap at 49154 (+1)
+  Inode table at 49155-49410 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 49411-57344
+  Free inodes: 12289-14336
+Group 7: (Blocks 57345-65536)
+  Backup superblock at 57345, Group descriptors at 57346-57346
+  Reserved GDT blocks at 57347-57602
+  Block bitmap at 57603 (+258), Inode bitmap at 57604 (+259)
+  Inode table at 57605-57860 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 57861-65536
+  Free inodes: 14337-16384
+Group 8: (Blocks 65537-73728)
+  Block bitmap at 65537 (+0), Inode bitmap at 65538 (+1)
+  Inode table at 65539-65794 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 65795-73728
+  Free inodes: 16385-18432
+Group 9: (Blocks 73729-81920)
+  Backup superblock at 73729, Group descriptors at 73730-73730
+  Reserved GDT blocks at 73731-73986
+  Block bitmap at 73987 (+258), Inode bitmap at 73988 (+259)
+  Inode table at 73989-74244 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 74245-81920
+  Free inodes: 18433-20480
+Group 10: (Blocks 81921-90112)
+  Block bitmap at 81921 (+0), Inode bitmap at 81922 (+1)
+  Inode table at 81923-82178 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 82179-90112
+  Free inodes: 20481-22528
+Group 11: (Blocks 90113-98304)
+  Block bitmap at 90113 (+0), Inode bitmap at 90114 (+1)
+  Inode table at 90115-90370 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 90371-98304
+  Free inodes: 22529-24576
+Group 12: (Blocks 98305-106496)
+  Block bitmap at 98305 (+0), Inode bitmap at 98306 (+1)
+  Inode table at 98307-98562 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 98563-106496
+  Free inodes: 24577-26624
+Group 13: (Blocks 106497-114688)
+  Block bitmap at 106497 (+0), Inode bitmap at 106498 (+1)
+  Inode table at 106499-106754 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 106755-114688
+  Free inodes: 26625-28672
+Group 14: (Blocks 114689-122880)
+  Block bitmap at 114689 (+0), Inode bitmap at 114690 (+1)
+  Inode table at 114691-114946 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 114947-122880
+  Free inodes: 28673-30720
+Group 15: (Blocks 122881-131071)
+  Block bitmap at 122881 (+0), Inode bitmap at 122882 (+1)
+  Inode table at 122883-123138 (+2)
+  7933 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 123139-131071
+  Free inodes: 30721-32768
diff --git a/tests/m_quota/script b/tests/m_quota/script
new file mode 100644 (file)
index 0000000..c8e7e8d
--- /dev/null
@@ -0,0 +1,8 @@
+DESCRIPTION="enable quota feature on mkfs"
+if [ "$QUOTA" != "y" ]; then
+       echo "$test_name: $DESCRIPTION: skipped"
+       return 0
+fi
+FS_SIZE=131072
+MKE2FS_OPTS="-O quota"
+. $cmd_dir/run_mke2fs
diff --git a/tests/t_quota_1on/name b/tests/t_quota_1on/name
new file mode 100644 (file)
index 0000000..f92e2d5
--- /dev/null
@@ -0,0 +1 @@
+enable quota using tune2fs
diff --git a/tests/t_quota_1on/script b/tests/t_quota_1on/script
new file mode 100644 (file)
index 0000000..a1dd88f
--- /dev/null
@@ -0,0 +1,42 @@
+FSCK_OPT=-yf
+
+if [ "$QUOTA" != "y" ]; then
+       echo "$test_name: $description: skipped"
+       return 0
+fi
+
+$MKE2FS -q -F -o Linux -b 4096 $TMPFILE 10000 > $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "mke2fs failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+dd if=/dev/zero of=$TMPFILE.2 bs=1048576 count=1 >> $test_name.log 2>&1
+cat <<- EOF | $DEBUGFS -w -f /dev/stdin $TMPFILE >> $test_name.log 2>&1
+       write $TMPFILE.2 file1
+       set_inode_field file1 uid 500
+       set_inode_field file1 gid 500
+EOF
+rm -f $TMPFILE.2
+
+$TUNE2FS -O quota  $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "tune2fs -O quota failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" = 0 ] ; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "e2fsck with quota enabled failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+rm -f $TMPFILE
diff --git a/tests/t_quota_2off/name b/tests/t_quota_2off/name
new file mode 100644 (file)
index 0000000..bb0ec98
--- /dev/null
@@ -0,0 +1 @@
+disable quota using tune2fs
diff --git a/tests/t_quota_2off/script b/tests/t_quota_2off/script
new file mode 100644 (file)
index 0000000..ac5d056
--- /dev/null
@@ -0,0 +1,35 @@
+FSCK_OPT=-yf
+
+if [ "$QUOTA" != "y" ]; then
+       echo "$test_name: $description: skipped"
+       return 0
+fi
+
+$MKE2FS -q -F -o Linux -b 4096 -O quota $TMPFILE 100 > $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "mke2fs -O quota failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$TUNE2FS -O ^quota $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "tune2fs -O ^quota failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" = 0 ] ; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "e2fsck with quota enabled failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+rm -f $TMPFILE