[LTP] [PATCH v1] Port `getxattr01.c` to new test API

Marius Kittler mkittler@suse.de
Mon Sep 18 14:50:44 CEST 2023


Am Freitag, 15. September 2023, 16:10:11 CEST schrieb Andrea Cervesato via 
ltp:
> > +
> > +	/* create test file and set xattr */
> > +	struct test_case *tc = &tcases[i];
> > +	snprintf(tc->fname, BUFSIZ, "getxattr01testfile-%u", i);
> > +	int fd = SAFE_CREAT(tc->fname, 0644);
> > +	SAFE_CLOSE(fd);
> > +	TEST(setxattr(tc->fname, XATTR_TEST_KEY, XATTR_TEST_VALUE,
> > +				  strlen(XATTR_TEST_VALUE), 
XATTR_CREATE));
> 
> Here you can use TST_EXP_PASS instead of TEST
> 

I wouldn't know how. If this function fails with ENOTSUP specifically, then the 
result should be TCONF. I don't think using TST_EXP_PASS allows that. 
Additionally, if this function fails the remaining tests for this iteration 
should be skipped.

> > +
> > +	/* read xattr back */
> > +	TEST(getxattr(tc->fname, tc->key, tc->value, tc->size));
> > +	if (TST_ERR == tc->exp_err) {
> > +		tst_res(TPASS | TTERRNO, "expected getxattr() return 
code");
> > +	} else {
> > +		tst_res(TFAIL | TTERRNO, "unexpected getxattr() 
return code"
> > +				" - expected errno %d", tc-
>exp_err);
> > 
> >   	}
> 
> Also here you can use TST_EXP_PASS instead of TEST

Also here I wouldn't know how that is possible. There are test cases where an 
error is actually expected.

> > 
> > -	tst_brkm(TCONF, NULL, "<sys/xattr.h> does not exist.");
> > +#ifdef HAVE_SYS_XATTR_H
> > +	char *cwd = SAFE_GETCWD(NULL, 0);
> > +	workdir = SAFE_MALLOC(strlen(cwd) + strlen(MNTPOINT) + 2);
> > +	sprintf(workdir, "%s/%s", cwd, MNTPOINT);
> > +	free(cwd);
> 
> Here you can just SAFE_TOUCH the file if you aim to create one.
> 

Using SAFE_TOUCH() makes sense but I guess the file creation needs to be in 
run() because a file needs to be created per mount. Additionally, one then had 
to create a loop for all test cases.

> In your case, to understand LTP API a bit better, I would take
> fxgetattr01 as reference, more or less.

That test seems very similar, indeed. Do you want me to follow some patterns 
from there specifically? Note that this test also uses just "TEST(…)" similarly 
to my code.

It does a simplification by using SAFE_FSETXATTR and here I could use 
SAFE_SETXATTR. However, then we would lose the ENOTSUP case which I'm not sure 
we want/should lose (especially since I'm mainly porting/refactoring it might 
not be desirable to remove behavior at the same time).




More information about the ltp mailing list