Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/fs/common Introduce r/o tests. They do two mounts: th...



details:   https://anonhg.NetBSD.org/src/rev/791bf569c949
branches:  trunk
changeset: 760235:791bf569c949
user:      pooka <pooka%NetBSD.org@localhost>
date:      Fri Dec 31 18:16:41 2010 +0000

description:
Introduce r/o tests.  They do two mounts: the first one is r/w and
runs a generator which primes the fs.  The second one is r/o and
does the actual testing.  Also, introduce a nfsro fstype which does
a clientside r/w mount for a r/o server export.

requested by yamt

(one nfsro test currently fails with EROFS vs. EACCES.  Hopefully
someone else can debate the correct errno)

diffstat:

 tests/fs/common/h_fsmacros.h |  65 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 64 insertions(+), 1 deletions(-)

diffs (93 lines):

diff -r 82b054dde0d9 -r 791bf569c949 tests/fs/common/h_fsmacros.h
--- a/tests/fs/common/h_fsmacros.h      Fri Dec 31 18:12:51 2010 +0000
+++ b/tests/fs/common/h_fsmacros.h      Fri Dec 31 18:16:41 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: h_fsmacros.h,v 1.23 2010/12/31 18:12:51 pooka Exp $    */
+/*     $NetBSD: h_fsmacros.h,v 1.24 2010/12/31 18:16:41 pooka Exp $    */
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -54,6 +54,7 @@
 FSPROTOS(lfs);
 FSPROTOS(msdosfs);
 FSPROTOS(nfs);
+FSPROTOS(nfsro);
 FSPROTOS(puffs);
 FSPROTOS(rumpfs);
 FSPROTOS(sysvbfs);
@@ -126,6 +127,41 @@
                        atf_tc_fail_errno("delfs failed");              \
        }
 
+#define ATF_TC_FSADD_RO(_fs_,_type_,_func_,_desc_,_gen_)               \
+       ATF_TC_WITH_CLEANUP(_fs_##_##_func_);                           \
+       ATF_TC_HEAD(_fs_##_##_func_,tc)                                 \
+       {                                                               \
+               atf_tc_set_md_var(tc, "descr",_type_" test for "_desc_);\
+               atf_tc_set_md_var(tc, "X-fs.type", _type_);             \
+       }                                                               \
+       void *_fs_##_func_##tmp;                                        \
+                                                                       \
+       ATF_TC_BODY(_fs_##_##_func_,tc)                                 \
+       {                                                               \
+               if (!atf_check_fstype(tc, _type_))                      \
+                       atf_tc_skip("filesystem not selected");         \
+               FSTEST_CONSTRUCTOR(tc,_fs_,_fs_##_func_##tmp);          \
+               _gen_(tc,FSTEST_MNTNAME);                               \
+               if (_fs_##_fstest_unmount(tc, FSTEST_MNTNAME, 0) != 0)  \
+                       atf_tc_fail_errno("unmount r/w failed");        \
+               if (_fs_##_fstest_mount(tc, _fs_##_func_##tmp,          \
+                   FSTEST_MNTNAME, MNT_RDONLY) != 0)                   \
+               atf_tc_fail_errno("mount ro failed");                   \
+               _func_(tc,FSTEST_MNTNAME);                              \
+               if (_fs_##_fstest_unmount(tc, FSTEST_MNTNAME, 0) != 0) {\
+                       rump_pub_vfs_mount_print(FSTEST_MNTNAME, 1);    \
+                       atf_tc_fail_errno("unmount failed");            \
+               }                                                       \
+       }                                                               \
+                                                                       \
+       ATF_TC_CLEANUP(_fs_##_##_func_,tc)                              \
+       {                                                               \
+               if (!atf_check_fstype(tc, _type_))                      \
+                       return;                                         \
+               if (_fs_##_fstest_delfs(tc, _fs_##_func_##tmp) != 0)    \
+                       atf_tc_fail_errno("delfs failed");              \
+       }
+
 #define ATF_TP_FSADD(fs,func)                                          \
   ATF_TP_ADD_TC(tp,fs##_##func)
 
@@ -151,6 +187,33 @@
   ATF_TP_FSADD(sysvbfs,func);                                          \
   ATF_TP_FSADD(tmpfs,func);
 
+/*
+ * Same as above, but generate a file system image first and perform
+ * tests for a r/o mount.
+ *
+ * Missing the following file systems:
+ *   + lfs (fstest_lfs routines cannot handle remount.  FIXME!)
+ *   + tmpfs (memory backend)
+ *   + rumpfs (memory backend)
+ *   + puffs (memory backend, but could be run in theory)
+ */
+
+#define ATF_TC_FSAPPLY_RO(func,desc,gen)                               \
+  ATF_TC_FSADD_RO(ext2fs,MOUNT_EXT2FS,func,desc,gen)                   \
+  ATF_TC_FSADD_RO(ffs,MOUNT_FFS,func,desc,gen)                         \
+  ATF_TC_FSADD_RO(msdosfs,MOUNT_MSDOS,func,desc,gen)                   \
+  ATF_TC_FSADD_RO(nfs,MOUNT_NFS,func,desc,gen)                         \
+  ATF_TC_FSADD_RO(nfsro,MOUNT_NFS,func,desc,gen)                       \
+  ATF_TC_FSADD_RO(sysvbfs,MOUNT_SYSVBFS,func,desc,gen)
+
+#define ATF_TP_FSAPPLY_RO(func)                                                \
+  ATF_TP_FSADD(ext2fs,func);                                           \
+  ATF_TP_FSADD(ffs,func);                                              \
+  ATF_TP_FSADD(msdosfs,func);                                          \
+  ATF_TP_FSADD(nfs,func);                                              \
+  ATF_TP_FSADD(nfsro,func);                                            \
+  ATF_TP_FSADD(sysvbfs,func);
+
 #define ATF_FSAPPLY(func,desc)                                         \
        ATF_TC_FSAPPLY(func,desc);                                      \
        ATF_TP_ADD_TCS(tp)                                              \



Home | Main Index | Thread Index | Old Index