From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH 1/2] preadv/preadv02.c: add specific error for preadv()
Date: Thu, 31 Mar 2016 16:13:43 +0200 [thread overview]
Message-ID: <20160331141343.GF21298@rei.lan> (raw)
In-Reply-To: <1458871723-5524-1-git-send-email-yangx.jy@cn.fujitsu.com>
Hi!
> /*
> -* Copyright (c) 2015 Fujitsu Ltd.
> +* Copyright (c) 2016 Fujitsu Ltd.
The 2015 should stay there, you should make it:
Copyright (c) 2015-2016 Fujitsu Ltd.
> * Author: Xiao Yang <yangx.jy@cn.fujitsu.com>
> *
> * This program is free software; you can redistribute it and/or modify it
> @@ -21,14 +21,21 @@
> * 1) preadv(2) fails if iov_len is invalid.
> * 2) preadv(2) fails if the vector count iovcnt is less than zero.
> * 3) preadv(2) fails if offset is negative.
> +* 4) preadv(2) fails when attempts to read into a invalid address.
> +* 5) preadv(2) fails if file descriptor is invalid.
> +* 6) preadv(2) fails if file descriptor is not open for reading.
> *
> * Expected Result:
> * 1) preadv(2) should return -1 and set errno to EINVAL.
> * 2) preadv(2) should return -1 and set errno to EINVAL.
> * 3) preadv(2) should return -1 and set errno to EINVAL.
> +* 4) preadv(2) should return -1 and set errno to EFAULT.
> +* 5) preadv(2) should return -1 and set errno to EBADF.
> +* 6) preadv(2) should return -1 and set errno to EBADF.
> */
>
> #include <errno.h>
> +#include <sys/uio.h>
>
> #include "test.h"
> #include "preadv.h"
> @@ -36,7 +43,8 @@
>
> #define CHUNK 64
>
> -static int fd;
> +static int fd1;
> +static int fd2;
> static char buf[CHUNK];
>
> static struct iovec rd_iovec1[] = {
> @@ -45,24 +53,33 @@ static struct iovec rd_iovec1[] = {
>
> static struct iovec rd_iovec2[] = {
> {buf, CHUNK},
> + {(char *)-1, CHUNK},
> };
>
> static struct test_case_t {
> + int des;
This should be called fd, calling it des is quite confusing. Also it
should be pointer to int and it should be initialized to &fd1 or &fd2
instead of setting it in the setup().
> struct iovec *name;
> int count;
> off_t offset;
> + int exp_err;
> } tc[] = {
> /* test1 */
> - {rd_iovec1, 1, 0},
> + {0, rd_iovec1, 1, 0, EINVAL},
> /* test2 */
> - {rd_iovec2, -1, 0},
> + {0, rd_iovec2, -1, 0, EINVAL},
> /* test3 */
> - {rd_iovec2, 1, -1}
> + {0, rd_iovec2, 1, -1, EINVAL},
> + /* test4 */
> + {0, rd_iovec2, 2, 0, EFAULT},
> + /* test5 */
> + {-1, rd_iovec2, 1, 0, EBADF},
> + /* test6 */
> + {0, rd_iovec2, 1, 0, EBADF}
> };
>
> -void verify_preadv(struct test_case_t *tc);
> -void setup(void);
> -void cleanup(void);
> +static void verify_preadv(struct test_case_t *tc);
> +static void setup(void);
> +static void cleanup(void);
>
> char *TCID = "preadv02";
> int TST_TOTAL = ARRAY_SIZE(tc);
> @@ -86,23 +103,27 @@ int main(int ac, char **av)
> tst_exit();
> }
>
> -void verify_preadv(struct test_case_t *tc)
> +static void verify_preadv(struct test_case_t *tc)
> {
> - TEST(preadv(fd, tc->name, tc->count, tc->offset));
> + TEST(preadv(tc->des, tc->name, tc->count, tc->offset));
> if (TEST_RETURN == 0) {
> - tst_resm(TFAIL, "preadv(2) succeed unexpectedly");
> + tst_resm(TFAIL, "preadv() succeeded unexpectedly");
> } else {
> - if (TEST_ERRNO == EINVAL) {
> - tst_resm(TPASS | TTERRNO, "preadv(2) fails as expected");
> + if (TEST_ERRNO == tc->exp_err) {
> + tst_resm(TPASS | TTERRNO,
> + "preadv() failed as expected");
> } else {
> - tst_resm(TFAIL | TTERRNO, "preadv(2) fails unexpectedly,"
> - " expected errno is EINVAL");
> + tst_resm(TFAIL | TTERRNO,
> + "preadv() failed unexpectedly, expected"
> + " errno is %s", tst_strerrno(tc->exp_err));
> }
> }
> }
>
> -void setup(void)
> +static void setup(void)
> {
> + int i;
> +
> if ((tst_kvercmp(2, 6, 30)) < 0) {
> tst_brkm(TCONF, NULL, "This test can only run on kernels"
> " that are 2.6.30 or higher.");
> @@ -114,12 +135,22 @@ void setup(void)
>
> tst_tmpdir();
>
> - fd = SAFE_OPEN(cleanup, "file", O_RDWR | O_CREAT, 0644);
> + fd1 = SAFE_OPEN(cleanup, "file1", O_RDWR | O_CREAT, 0644);
> +
> + fd2 = SAFE_OPEN(cleanup, "file2", O_WRONLY | O_CREAT, 0644);
> +
> + for (i = 0; i < 4; i++)
> + tc[i].des = fd1;
> +
> + tc[5].des = fd2;
> }
>
> -void cleanup(void)
> +static void cleanup(void)
> {
> - if (fd > 0 && close(fd))
> + if (fd1 > 0 && close(fd1))
> + tst_resm(TWARN | TERRNO, "failed to close file");
> +
> + if (fd2 > 0 && close(fd2))
> tst_resm(TWARN | TERRNO, "failed to close file");
>
> tst_rmdir();
Otherwise it looks fine.
--
Cyril Hrubis
chrubis@suse.cz
next prev parent reply other threads:[~2016-03-31 14:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-25 2:08 [LTP] [PATCH 1/2] preadv/preadv02.c: add specific error for preadv() Xiao Yang
2016-03-25 2:08 ` [LTP] [PATCH 2/2] pwritev/pwritev02.c: add specific error for pwritev() Xiao Yang
2016-03-31 14:14 ` Cyril Hrubis
2016-03-31 14:13 ` Cyril Hrubis [this message]
2016-04-01 5:14 ` [LTP] [PATCH v2 1/2] preadv/preadv02.c: add specific error for preadv() Xiao Yang
2016-04-01 5:14 ` [LTP] [PATCH v2 2/2] pwritev/pwritev02.c: add specific error for pwritev() Xiao Yang
2016-04-04 16:01 ` Cyril Hrubis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160331141343.GF21298@rei.lan \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox