From 0c12808b6f776d3a1e77de046650ad9345ed5fd9 Mon Sep 17 00:00:00 2001 From: Marius Kittler Date: Thu, 21 Sep 2023 11:06:58 +0200 Subject: [PATCH] Port getxattr03.c to new test API * Utilize `all_filesystems = 1`-mechanism to test on various file systems instead of relying on the temporary directory's file system to support xattr (which it probably does not as it is commonly a tmpfs) * Simplify code and description Signed-off-by: Marius Kittler Reviewed-by: Richard Palethorpe [rpalethorpe: Removed comment and ifdefs] --- .../kernel/syscalls/getxattr/getxattr03.c | 133 +++++------------- 1 file changed, 35 insertions(+), 98 deletions(-) diff --git a/testcases/kernel/syscalls/getxattr/getxattr03.c b/testcases/kernel/syscalls/getxattr/getxattr03.c index b6ea142878a..1fe4ba48fc1 100644 --- a/testcases/kernel/syscalls/getxattr/getxattr03.c +++ b/testcases/kernel/syscalls/getxattr/getxattr03.c @@ -1,117 +1,54 @@ +// SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2012 Red Hat, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it - * is free of the rightful claim of any third person regarding - * infringement or the like. Any license provided herein, whether - * implied or otherwise, applies only to this software file. Patent - * licenses, if any, provided herein do not apply to combinations of - * this program with other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. + * Copyright (C) 2012 Red Hat, Inc. + * Copyright (c) 2023 Marius Kittler */ -/* - * An empty buffer of size zero can be passed into getxattr(2) to return - * the current size of the named extended attribute. +/*\ + * [Description] + * + * An empty buffer of size zero can be passed into getxattr(2) to + * return the current size of the named extended attribute. */ #include "config.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_SYS_XATTR_H -# include -#endif -#include "test.h" -#include "safe_macros.h" +#include "tst_test.h" -char *TCID = "getxattr03"; +#include +#include "tst_safe_macros.h" -#ifdef HAVE_SYS_XATTR_H +#define MNTPOINT "mntpoint" +#define FNAME MNTPOINT"/getxattr03testfile" #define XATTR_TEST_KEY "user.testkey" #define XATTR_TEST_VALUE "test value" #define XATTR_TEST_VALUE_SIZE (sizeof(XATTR_TEST_VALUE) - 1) -#define TESTFILE "getxattr03testfile" -static void setup(void); -static void cleanup(void); - -int TST_TOTAL = 1; - -int main(int argc, char *argv[]) +static void run(void) { - int lc; - - tst_parse_opts(argc, argv, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - tst_count = 0; - - TEST(getxattr(TESTFILE, XATTR_TEST_KEY, NULL, 0)); - - if (TEST_RETURN == XATTR_TEST_VALUE_SIZE) - tst_resm(TPASS, "getxattr(2) returned correct value"); - else - tst_resm(TFAIL | TTERRNO, "getxattr(2) failed"); - } - - cleanup(); - tst_exit(); + TST_EXP_VAL(getxattr(FNAME, XATTR_TEST_KEY, NULL, 0), + XATTR_TEST_VALUE_SIZE); } static void setup(void) { - int fd; - - tst_require_root(); - - tst_tmpdir(); - - /* Test for xattr support and set attr value */ - fd = SAFE_CREAT(cleanup, TESTFILE, 0644); - close(fd); - - if (setxattr(TESTFILE, XATTR_TEST_KEY, XATTR_TEST_VALUE, - XATTR_TEST_VALUE_SIZE, XATTR_CREATE) == -1) { - if (errno == ENOTSUP) - tst_brkm(TCONF, cleanup, "No xattr support in fs or " - "fs mounted without user_xattr option"); - else - tst_brkm(TBROK | TERRNO, cleanup, "setxattr %s failed", - TESTFILE); - } - - TEST_PAUSE; + SAFE_TOUCH(FNAME, 0644, NULL); + SAFE_SETXATTR(FNAME, XATTR_TEST_KEY, XATTR_TEST_VALUE, + XATTR_TEST_VALUE_SIZE, XATTR_CREATE); } -static void cleanup(void) -{ - tst_rmdir(); -} -#else /* HAVE_SYS_XATTR_H */ -int main(int argc, char *argv[]) -{ - tst_brkm(TCONF, NULL, " does not exist."); -} -#endif +static struct tst_test test = { + .all_filesystems = 1, + .needs_root = 1, + .mntpoint = MNTPOINT, + .mount_device = 1, + .skip_filesystems = (const char *const []) { + "exfat", + "tmpfs", + "ramfs", + "nfs", + "vfat", + NULL + }, + .setup = setup, + .test_all = run, +};