- qemu: tpm: Account for possible migration without actually sharing storage (RHEL-108915) - tests: Test virFileIsSharedFSOverride (RHEL-135287) - util: Fix race condition in virFileIsSharedFSType (RHEL-135287) - util: Fix race condition in virFileIsSharedFSOverride (RHEL-135287) - util: Rework virFileIsSharedFSOverride using virFileCheckParents (RHEL-135287) Resolves: RHEL-108915, RHEL-135287
112 lines
3.7 KiB
Diff
112 lines
3.7 KiB
Diff
From b630429647207ba0d406cf855e590ddaa98fdb9b Mon Sep 17 00:00:00 2001
|
|
Message-ID: <b630429647207ba0d406cf855e590ddaa98fdb9b.1766070256.git.jdenemar@redhat.com>
|
|
From: Jiri Denemark <jdenemar@redhat.com>
|
|
Date: Fri, 5 Dec 2025 15:09:15 +0100
|
|
Subject: [PATCH] tests: Test virFileIsSharedFSOverride
|
|
|
|
Technically virFileIsSharedFSOverride is available on any OS, but we
|
|
need a mocked realpath() to test it. Because the virfilemock library
|
|
also mocks statfs() which is only available on Linux, we don't even try
|
|
to load the library anywhere else. Thus we need to skip testing
|
|
virFileIsSharedFSOverride on non-Linux too.
|
|
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
(cherry picked from commit 121d179e068b584f62ea2c029d89a44e67c909c0)
|
|
|
|
https://issues.redhat.com/browse/RHEL-135287
|
|
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
---
|
|
tests/virfiletest.c | 69 +++++++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 69 insertions(+)
|
|
|
|
diff --git a/tests/virfiletest.c b/tests/virfiletest.c
|
|
index e05925a321..ccd76a3fac 100644
|
|
--- a/tests/virfiletest.c
|
|
+++ b/tests/virfiletest.c
|
|
@@ -329,6 +329,55 @@ testFileIsSharedFSType(const void *opaque G_GNUC_UNUSED)
|
|
}
|
|
|
|
|
|
+static const char *shared_filesystems[] = {
|
|
+ "/run/user/501/gvfs",
|
|
+ "/nfs",
|
|
+ "/gluster",
|
|
+ "/ceph/multi",
|
|
+ "/gpfs/data/blaf",
|
|
+ "/quobyte",
|
|
+ NULL,
|
|
+};
|
|
+
|
|
+static int
|
|
+testFileIsSharedFSOverride(const void *opaque G_GNUC_UNUSED)
|
|
+{
|
|
+#ifndef __linux__
|
|
+ return EXIT_AM_SKIP;
|
|
+#else
|
|
+ const struct testFileIsSharedFSType *data = opaque;
|
|
+ g_autofree char *mtabFile = NULL;
|
|
+ bool actual;
|
|
+ int ret = -1;
|
|
+
|
|
+ /* mtab is used by mocked realpath to decide whether a given path exists */
|
|
+ mtabFile = g_strdup_printf(abs_srcdir "/virfiledata/%s", data->mtabFile);
|
|
+
|
|
+ if (!g_setenv("LIBVIRT_MTAB", mtabFile, true)) {
|
|
+ fprintf(stderr, "Unable to set env variable\n");
|
|
+ goto cleanup;
|
|
+ }
|
|
+
|
|
+ actual = virFileIsSharedFSOverride(data->filename,
|
|
+ (char * const *) shared_filesystems);
|
|
+
|
|
+ if (actual != data->expected) {
|
|
+ fprintf(stderr, "FS of '%s' is %s. Expected: %s\n",
|
|
+ data->filename,
|
|
+ actual ? "shared" : "not shared",
|
|
+ data->expected ? "shared" : "not shared");
|
|
+ goto cleanup;
|
|
+ }
|
|
+
|
|
+ ret = 0;
|
|
+
|
|
+ cleanup:
|
|
+ g_unsetenv("LIBVIRT_MTAB");
|
|
+ return ret;
|
|
+#endif
|
|
+}
|
|
+
|
|
+
|
|
static int
|
|
mymain(void)
|
|
{
|
|
@@ -439,6 +488,26 @@ mymain(void)
|
|
DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/gpfs/data", true);
|
|
DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/quobyte", true);
|
|
|
|
+#define DO_TEST_FILE_IS_SHARED_FS_OVERRIDE(mtab, file, exp) \
|
|
+ do { \
|
|
+ struct testFileIsSharedFSType data = { \
|
|
+ .mtabFile = mtab, .filename = file, .expected = exp \
|
|
+ }; \
|
|
+ if (virTestRun(virTestCounterNext(), testFileIsSharedFSOverride, &data) < 0) \
|
|
+ ret = -1; \
|
|
+ } while (0)
|
|
+
|
|
+ virTestCounterReset("testFileIsSharedFSOverride ");
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts2.txt", "/boot/vmlinuz", false);
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts2.txt", "/run/user/501/gvfs/some/file", true);
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts3.txt", "/nfs/file", true);
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts3.txt", "/gluster/file", true);
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts3.txt", "/some/symlink/file", true);
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts3.txt", "/ceph/file", false);
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts3.txt", "/ceph/multi/file", true);
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts3.txt", "/gpfs/data", false);
|
|
+ DO_TEST_FILE_IS_SHARED_FS_OVERRIDE("mounts3.txt", "/quobyte", true);
|
|
+
|
|
return ret != 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
|
}
|
|
|
|
--
|
|
2.52.0
|