]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
tests: add findmnt --kernel=listmount
authorKarel Zak <kzak@redhat.com>
Wed, 2 Oct 2024 10:35:48 +0000 (12:35 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 8 Jan 2025 12:57:43 +0000 (13:57 +0100)
* add listmount() and statmount() check to test_sysinfo
* check for statmount fields by findmnt

Signed-off-by: Karel Zak <kzak@redhat.com>
tests/helpers/test_sysinfo.c
tests/ts/findmnt/listmount [new file with mode: 0755]

index 76983bce657e88a899031b26b86aa5fbe0fef245..f23f9111ab53850e95aa7061f4579f3e75a7367a 100644 (file)
@@ -28,6 +28,8 @@
 #include <time.h>
 #include <sys/ioctl.h>
 
+#include "c.h"
+
 #ifdef __linux__
 # include <sys/mount.h>
 # include "mount-api-utils.h"
@@ -140,6 +142,31 @@ static int hlp_fsopen_ok(void)
        return 0;
 }
 
+static int hlp_statmount_ok(void)
+{
+#ifdef HAVE_STATMOUNT_API
+       errno = 0;
+       ul_statmount(0, 0, 0, NULL, 0, 0);
+#else
+       errno = ENOSYS;
+#endif
+       printf("%d\n", errno != ENOSYS);
+       return 0;
+}
+
+static int hlp_listmount_ok(void)
+{
+#ifdef HAVE_STATMOUNT_API
+       uint64_t dummy;
+       errno = 0;
+       ul_listmount(LSMT_ROOT, 0, 0, &dummy, 1, LISTMOUNT_REVERSE);
+#else
+       errno = ENOSYS;
+#endif
+       printf("%d\n", errno != ENOSYS);
+       return 0;
+}
+
 static int hlp_sz_time(void)
 {
        printf("%zu\n", sizeof(time_t));
@@ -191,6 +218,8 @@ static const mntHlpfnc hlps[] =
        { "wcsspn-ok",  hlp_wcsspn_ok   },
        { "enotty-ok",  hlp_enotty_ok   },
        { "fsopen-ok",  hlp_fsopen_ok   },
+       { "statmount-ok", hlp_statmount_ok },
+       { "listmount-ok", hlp_listmount_ok },
        { "sz(time_t)", hlp_sz_time     },
        { "ns-gettype-ok", hlp_get_nstype_ok },
        { "ns-getuserns-ok", hlp_get_userns_ok },
diff --git a/tests/ts/findmnt/listmount b/tests/ts/findmnt/listmount
new file mode 100755 (executable)
index 0000000..769b460
--- /dev/null
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+# This file is part of util-linux.
+#
+# This file 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 file 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.
+
+TS_TOPDIR="${0%/*}/../.."
+TS_DESC="listmount & statmount"
+
+. "$TS_TOPDIR"/functions.sh
+ts_init "$*"
+
+ts_check_test_command "$TS_CMD_FINDMNT"
+
+[ "$("$TS_HELPER_SYSINFO" statmount-ok)" = "1" ] || ts_skip "no statmount"
+[ "$("$TS_HELPER_SYSINFO" listmount-ok)" = "1" ] || ts_skip "no listmount"
+
+function check_field {
+       local name="$1"
+
+       data=$( $TS_CMD_FINDMNT --noheadings --kernel=listmount --output "$name" --target /proc )
+       [ -n "$data" ] || echo "$name empty"
+}
+
+
+ts_init_subtest "target"
+check_field "TARGET" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "vfs-options"
+check_field "VFS-OPTIONS" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "fs-options"
+check_field "FS-OPTIONS" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "options"
+check_field "OPTIONS" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "fstype"
+check_field "FSTYPE" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "propagation"
+check_field "PROPAGATION" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "fsroot"
+check_field "FSROOT" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "parent"
+check_field "PARENT" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "id"
+check_field "ID" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_finalize