]> granicus.if.org Git - strace/commitdiff
tests: enhance test coverage of quotactl syscall parser
authorZhibin Li <08826794brmt@gmail.com>
Thu, 12 Jul 2018 09:32:11 +0000 (17:32 +0800)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 15 Jul 2018 18:51:09 +0000 (18:51 +0000)
* tests/quotactl.c (print_dqfmt): New function.
(main): Use print_dqfmt to print flags of quota format, improve existing
tests and add more tests for Q_GETFMT.
* tests/quotactl-xfs.c: Improve existing tests and add more tests for
Q_XGETQSTAT and Q_XGETQSTATV.

tests/quotactl-xfs.c
tests/quotactl.c

index fa536eb31fab1351806817a6a06f49ce2c9d9476..9955292b78130929902bfbbed1fdf8260994b043 100644 (file)
@@ -298,21 +298,30 @@ main(void)
                    ARG_STR("/dev/sda1"), xqstat, print_xquota_stat, (intptr_t) 1);
 
        check_quota(CQF_ID_SKIP | CQF_ADDR_CB,
+                   ARG_STR(QCMD(Q_XGETQSTAT, USRQUOTA)),
+                   ARG_STR("NULL"), xqstat, print_xquota_stat, (intptr_t) 2);
+
+       check_quota(CQF_ID_SKIP,
                    ARG_STR(QCMD(Q_XGETQSTAT, PRJQUOTA)),
                    unterminated, unterminated_str,
-                   xqstat + 1, print_xquota_stat, (intptr_t) 2);
+                   xqstat + 1);
 
 
        /* Q_XGETQSTATV */
 
        check_quota(CQF_ID_SKIP | CQF_ADDR_CB,
                    ARG_STR(QCMD(Q_XGETQSTATV, USRQUOTA)),
-                   ARG_STR("/dev/sda1"), xqstatv, print_xquota_statv, 1);
+                   ARG_STR("/dev/sda1"), xqstatv, print_xquota_statv, (intptr_t) 1);
 
        check_quota(CQF_ID_SKIP | CQF_ADDR_CB,
                    ARG_STR(QCMD(Q_XGETQSTATV, GRPQUOTA)),
                    ARG_STR(NULL), xqstatv, print_xquota_statv, (intptr_t) 2);
 
+       check_quota(CQF_ID_SKIP,
+                   ARG_STR(QCMD(Q_XGETQSTATV, PRJQUOTA)),
+                   unterminated, unterminated_str,
+                   xqstatv + 1);
+
 
        /* Q_XQUOTARM */
 
index f1648d94eb25ba6e52e01809490eb6c2afe40af3..21d20102a6a408a31296656503e70afd96f5f9a4 100644 (file)
@@ -161,6 +161,37 @@ print_dqinfo(long rc, void *ptr, void *arg)
        printf("}");
 }
 
+void
+print_dqfmt(long rc, void *ptr, void *arg)
+{
+       uint32_t *fmtval = ptr;
+       long out_arg = (long) arg;
+       const char *fmtstr;
+
+       if (((rc != 0) && out_arg) || (out_arg > 1)) {
+               printf("%p", fmtval);
+               return;
+       }
+       printf("[");
+       switch (*fmtval) {
+       case 1:
+               fmtstr = "QFMT_VFS_OLD";
+               break;
+       case 2:
+               fmtstr = "QFMT_VFS_V0";
+               break;
+       case 3:
+               fmtstr = "QFMT_OCFS2";
+               break;
+       case 4:
+               fmtstr = "QFMT_VFS_V1";
+               break;
+       default:
+               printf("%#x /* QFMT_VFS_??? */]", *fmtval);
+               return;
+       }
+       printf("%s]", fmtstr);
+}
 
 int
 main(void)
@@ -294,9 +325,14 @@ main(void)
        check_quota(CQF_ID_SKIP,
                    ARG_STR(QCMD(Q_GETFMT, USRQUOTA)),
                    unterminated, unterminated_str, fmt + 1);
-       check_quota(CQF_ID_SKIP,
+       check_quota(CQF_ID_SKIP | CQF_ADDR_CB,
+                   ARG_STR(QCMD(Q_GETFMT, GRPQUOTA)),
+                   ARG_STR("/dev/sda1"), fmt, print_dqfmt, (uintptr_t) 1);
+       /* Try to check valid quota format */
+       *fmt = QFMT_VFS_OLD;
+       check_quota(CQF_ID_SKIP | CQF_ADDR_CB,
                    ARG_STR(QCMD(Q_GETFMT, GRPQUOTA)),
-                   ARG_STR("/dev/sda1"), fmt);
+                   ARG_STR("/dev/sda1"), fmt, print_dqfmt, (uintptr_t) 1);
 
 
        /* Q_SYNC */