On Mon, Aug 17, 2026 at 4:11 PM Luis Henriques <[email protected]> wrote: > > In order to reduce new tests setup/teardown code duplication, factor-out > these functions from the existing acl_cache test.
When I read this I thought you were going to share these helpers with the new symlink and readdir cache tests, but you did not. Maybe a fuse_common.c would make sense to reduce boiler plate in new fuse tests. These helpers and fixture look pretty similar in all three tests. Thanks, Amir. > > Signed-off-by: Luis Henriques <[email protected]> > --- > .../filesystems/fuse/fuse_acl_cache_test.c | 82 ++++++++++++------- > 1 file changed, 53 insertions(+), 29 deletions(-) > > diff --git a/tools/testing/selftests/filesystems/fuse/fuse_acl_cache_test.c > b/tools/testing/selftests/filesystems/fuse/fuse_acl_cache_test.c > index 2411a6e285f1..8bdc90572be2 100644 > --- a/tools/testing/selftests/filesystems/fuse/fuse_acl_cache_test.c > +++ b/tools/testing/selftests/filesystems/fuse/fuse_acl_cache_test.c > @@ -50,6 +50,8 @@ > > #include "kselftest_harness.h" > > +#define MAX_ERR_MSG 256 > + > /* ---- ACL binary encoding ------------------------------------------------ > */ > /* > * POSIX ACL v2 xattr format (little-endian): > @@ -193,52 +195,74 @@ FIXTURE(acl_cache) { > pthread_t thread; > }; > > -FIXTURE_SETUP(acl_cache) > +int fs_setup(struct fuse_session **se, char *mountpoint, char *file_path, > + pthread_t *thread, char *err) > { > char *fuse_argv[] = { "fuse_acl_cache_test", NULL }; > struct fuse_args args = FUSE_ARGS_INIT(1, fuse_argv); > > - g_ds.acl = acl_a; > - g_ds.acl_size = sizeof(acl_a); > - g_ds.getxattr_count = 0; > - > - strcpy(self->mountpoint, "/tmp/acl_cache_test_XXXXXX"); > - if (!mkdtemp(self->mountpoint)) > - SKIP(return, "mkdtemp: %s", strerror(errno)); > + strcpy(mountpoint, "/tmp/acl_cache_test_XXXXXX"); > + if (!mkdtemp(mountpoint)) { > + snprintf(err, MAX_ERR_MSG, "mkdtemp: %s", strerror(errno)); > + return -1; > + } > > - snprintf(self->file_path, sizeof(self->file_path), > - "%s/" FILE_NAME, self->mountpoint); > + snprintf(file_path, PATH_MAX, "%s/" FILE_NAME, mountpoint); > > - self->se = fuse_session_new(&args, &fs_ops, sizeof(fs_ops), NULL); > - if (!self->se) { > - rmdir(self->mountpoint); > - SKIP(return, "fuse_session_new failed"); > + *se = fuse_session_new(&args, &fs_ops, sizeof(fs_ops), NULL); > + if (!*se) { > + rmdir(mountpoint); > + snprintf(err, MAX_ERR_MSG, "fuse_session_new failed"); > + return -1; > } > > - if (fuse_session_mount(self->se, self->mountpoint)) { > - fuse_session_destroy(self->se); > - rmdir(self->mountpoint); > - SKIP(return, "fuse_session_mount failed " > - "(missing fusermount3 or insufficient > privileges)"); > + if (fuse_session_mount(*se, mountpoint)) { > + fuse_session_destroy(*se); > + rmdir(mountpoint); > + snprintf(err, MAX_ERR_MSG, "fuse_session_mount failed " > + "(missing fusermount3 or insufficient privileges)"); > + return -1; > } > > - if (pthread_create(&self->thread, NULL, run_daemon, self->se)) { > - fuse_session_unmount(self->se); > - fuse_session_destroy(self->se); > - rmdir(self->mountpoint); > - SKIP(return, "pthread_create: %s", strerror(errno)); > + if (pthread_create(thread, NULL, run_daemon, *se)) { > + fuse_session_unmount(*se); > + fuse_session_destroy(*se); > + rmdir(mountpoint); > + snprintf(err, MAX_ERR_MSG, "pthread_create: %s", > strerror(errno)); > + return -1; > } > > fuse_opt_free_args(&args); > + > + return 0; > +} > + > +static void fs_teardown(struct fuse_session *se, pthread_t thread, > + char *mountpoint) > +{ > + fuse_session_exit(se); > + fuse_session_unmount(se); > + pthread_join(thread, NULL); > + fuse_session_destroy(se); > + rmdir(mountpoint); > +} > + > +FIXTURE_SETUP(acl_cache) > +{ > + char err[MAX_ERR_MSG]; > + > + g_ds.acl = acl_a; > + g_ds.acl_size = sizeof(acl_a); > + g_ds.getxattr_count = 0; > + > + if (fs_setup(&self->se, self->mountpoint, self->file_path, > + &self->thread, err)) > + SKIP(return, err); > } > > FIXTURE_TEARDOWN(acl_cache) > { > - fuse_session_exit(self->se); > - fuse_session_unmount(self->se); > - pthread_join(self->thread, NULL); > - fuse_session_destroy(self->se); > - rmdir(self->mountpoint); > + fs_teardown(self->se, self->thread, self->mountpoint); > } > > static int do_force_statx(const char *path)

