[LTP] [PATCH] [v1] syscalls/symlinkat01: Convert to new API
sujiaxun
sujiaxun@uniontech.com
Tue Dec 14 03:58:19 CET 2021
在 2021/12/14 上午12:05, Cyril Hrubis 写道:
> Hi!
>> -static void mysymlinkat_test(struct test_struct *desc)
>> +static void run_test(unsigned int nr)
>> {
>> int fd;
>> + struct test_case *tc = &tcases[nr];
>> +
>> + setup_every_copy();
>>
>> - TEST(mysymlinkat(desc->oldfn, *desc->newfd, desc->newfn));
>> -
>> - /* check return code */
>> - if (TEST_ERRNO == desc->expected_errno) {
>> - if (TEST_RETURN == 0 && desc->referencefn1 != NULL) {
>> + TEST(tst_syscall(__NR_symlinkat, tc->oldfn, *tc->newfd, tc->newfn));
>> + if (TST_ERR == tc->expected_errno) {
>> + if (TST_RET == 0 && tc->referencefn1 != NULL) {
>> int tnum = rand(), vnum = ~tnum;
>>
>> - fd = SAFE_OPEN(cleanup, desc->referencefn1, O_RDWR);
>> - SAFE_WRITE(cleanup, 1, fd, &tnum, sizeof(tnum));
>> - SAFE_CLOSE(cleanup, fd);
>> + fd = SAFE_OPEN(tc->referencefn1, O_RDWR);
>> + SAFE_WRITE(1, fd, &tnum, sizeof(tnum));
>> + SAFE_CLOSE(fd);
>>
>> - fd = SAFE_OPEN(cleanup, desc->referencefn2, O_RDONLY);
>> - SAFE_READ(cleanup, 1, fd, &vnum, sizeof(vnum));
>> - SAFE_CLOSE(cleanup, fd);
>> + fd = SAFE_OPEN(tc->referencefn2, O_RDONLY);
>> + SAFE_READ(1, fd, &vnum, sizeof(vnum));
>> + SAFE_CLOSE(fd);
>>
>> if (tnum == vnum)
>> - tst_resm(TPASS, "Test passed");
>> + tst_res(TPASS, "Test passed");
>> else
>> - tst_resm(TFAIL,
>> + tst_res(TFAIL,
>> "The link file's content isn't as same as the original file's "
>> "although symlinkat returned 0");
>> } else {
>> - tst_resm(TPASS,
>> + tst_res(TPASS,
>> "symlinkat() returned the expected errno %d: %s",
>> - TEST_ERRNO, strerror(TEST_ERRNO));
>> + TST_ERR, strerror(TST_ERR));
>> }
>
> I think that the test would be much clearer to read if we split it into
> two testcases, one that checks for successfull symlink creating and one
> that checks for errors. Then we could easily use the TST_EXP_FAIL()
> macros etc.
>
>> } else {
>> - tst_resm(TFAIL,
>> - TEST_RETURN ==
>> + tst_res(TFAIL,
>> + TST_RET ==
>> 0 ? "symlinkat() surprisingly succeeded" :
>> - "symlinkat() Failed, errno=%d : %s", TEST_ERRNO,
>> - strerror(TEST_ERRNO));
>> + "symlinkat() Failed, errno=%d : %s", TST_ERR,
>> + strerror(TST_ERR));
>> }
>> }
>>
>> @@ -214,27 +145,24 @@ static void setup(void)
>> {
>> char *tmp;
>> int fd;
>> -
>> - tst_sig(NOFORK, DEF_HANDLER, cleanup);
>> -
>> - tst_tmpdir();
>> -
>> - SAFE_MKDIR(cleanup, TEST_DIR1, 0700);
>> - SAFE_MKDIR(cleanup, TEST_DIR3, 0700);
>> - olddirfd = SAFE_OPEN(cleanup, TEST_DIR1, O_DIRECTORY);
>> - deldirfd = SAFE_OPEN(cleanup, TEST_DIR3, O_DIRECTORY);
>> - SAFE_RMDIR(cleanup, TEST_DIR3);
>> - fd = SAFE_OPEN(cleanup, TEST_DIR1 "/" TEST_FILE1, O_CREAT | O_EXCL, 0600);
>> - SAFE_CLOSE(cleanup, fd);
>> +
>> + SAFE_MKDIR(TEST_DIR1, 0700);
>> + SAFE_MKDIR(TEST_DIR3, 0700);
>> + olddirfd = SAFE_OPEN(TEST_DIR1, O_DIRECTORY);
>> + deldirfd = SAFE_OPEN(TEST_DIR3, O_DIRECTORY);
>> + SAFE_RMDIR(TEST_DIR3);
>> + fd = SAFE_OPEN(TEST_DIR1 "/" TEST_FILE1, O_CREAT | O_EXCL, 0600);
>> + SAFE_CLOSE(fd);
>>
>> /* gratuitous memory leak here */
>> tmp = strdup(dpathname);
>> snprintf(dpathname, sizeof(dpathname), tmp, get_current_dir_name());
>
> Can we fix this mess as well? There is no point actually in having the
> format in a variable like this we can easily instead do:
>
> char *pwd;
>
> pwd = get_current_dir_name();
> snprintf(dpathname, sizeof(dpahtname), "%s/" TESTDIR2 "/" TEST_FILE1, pwd);
> free(pwd);
>
> And that fixes two memory leaks we had there.
>
>> -
>> - TEST_PAUSE;
>> }
>>
>> -static void cleanup(void)
>> -{
>> - tst_rmdir();
>> -}
>> +static struct tst_test test = {
>> + .min_kver = "2.6.16",
>> + .setup = setup,
>> + .tcnt = ARRAY_SIZE(tcases),
>> + .test = run_test,
>> + .needs_tmpdir = 1,
>> +};
>
> Other than that there are a few whitespaces wrong, see output of
> 'make check'
>
Thank you, I will resubmit after making changes.
More information about the ltp
mailing list