Hello!
    ping, thanks!

Best Regards,
Guangwen Feng

On 2015/08/17 18:42, Guangwen Feng wrote:
> Add new testcase to verify that a write lease may be placed
> on a file only if there are no other open file descriptors
> for the file.
> 
> Signed-off-by: Guangwen Feng <fenggw-f...@cn.fujitsu.com>
> ---
>  runtest/ltplite                           |   1 +
>  runtest/stress.part3                      |   1 +
>  runtest/syscalls                          |   2 +
>  testcases/kernel/syscalls/.gitignore      |   2 +
>  testcases/kernel/syscalls/fcntl/fcntl32.c | 137 
> ++++++++++++++++++++++++++++++
>  5 files changed, 143 insertions(+)
>  create mode 100644 testcases/kernel/syscalls/fcntl/fcntl32.c
> 
> diff --git a/runtest/ltplite b/runtest/ltplite
> index ab6424c..e3ae8cf 100644
> --- a/runtest/ltplite
> +++ b/runtest/ltplite
> @@ -225,6 +225,7 @@ fcntl26 fcntl26
>  fcntl29 fcntl29
>  fcntl30 fcntl30
>  fcntl31 fcntl31
> +fcntl32 fcntl32
>  
>  fdatasync01 fdatasync01
>  fdatasync02 fdatasync02
> diff --git a/runtest/stress.part3 b/runtest/stress.part3
> index ab9af3c..ca8b70c 100644
> --- a/runtest/stress.part3
> +++ b/runtest/stress.part3
> @@ -164,6 +164,7 @@ fcntl26 fcntl26
>  fcntl29 fcntl29
>  fcntl30 fcntl30
>  fcntl31 fcntl31
> +fcntl32 fcntl32
>  
>  fdatasync01 fdatasync01
>  fdatasync02 fdatasync02
> diff --git a/runtest/syscalls b/runtest/syscalls
> index ee2627f..a641bcd 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -258,6 +258,8 @@ fcntl30 fcntl30
>  fcntl30_64 fcntl30_64
>  fcntl31 fcntl31
>  fcntl31_64 fcntl31_64
> +fcntl32 fcntl32
> +fcntl32_64 fcntl32_64
>  
>  fdatasync01 fdatasync01
>  fdatasync02 fdatasync02
> diff --git a/testcases/kernel/syscalls/.gitignore 
> b/testcases/kernel/syscalls/.gitignore
> index 18c0ad6..2b288e0 100644
> --- a/testcases/kernel/syscalls/.gitignore
> +++ b/testcases/kernel/syscalls/.gitignore
> @@ -221,6 +221,8 @@
>  /fcntl/fcntl30_64
>  /fcntl/fcntl31
>  /fcntl/fcntl31_64
> +/fcntl/fcntl32
> +/fcntl/fcntl32_64
>  /fdatasync/fdatasync01
>  /fdatasync/fdatasync02
>  /flock/flock01
> diff --git a/testcases/kernel/syscalls/fcntl/fcntl32.c 
> b/testcases/kernel/syscalls/fcntl/fcntl32.c
> new file mode 100644
> index 0000000..05d963e
> --- /dev/null
> +++ b/testcases/kernel/syscalls/fcntl/fcntl32.c
> @@ -0,0 +1,137 @@
> +/*
> + * Copyright (c) 2015 Fujitsu Ltd.
> + * Author: Guangwen Feng <fenggw-f...@cn.fujitsu.com>
> + *
> + * 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.
> + *
> + * You should have received a copy of the GNU General Public License
> + * alone with this program.
> + */
> +
> +/*
> + * DESCRIPTION
> + *  Basic test for fcntl(2) using F_SETLEASE & F_WRLCK argument.
> + *  "A write lease may be placed on a file only if there are
> + *  no other open file descriptors for the file."
> + */
> +
> +#include <errno.h>
> +
> +#include "test.h"
> +#include "safe_macros.h"
> +#include "tst_fs_type.h"
> +
> +static void setup(void);
> +static void verify_fcntl(int);
> +static void cleanup(void);
> +
> +#define FILE_MODE    (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID)
> +
> +static int fd1;
> +static int fd2;
> +
> +static struct test_case_t {
> +     int fd1_flag;
> +     int fd2_flag;
> +} test_cases[] = {
> +     {O_RDONLY, O_RDONLY},
> +     {O_RDONLY, O_WRONLY},
> +     {O_RDONLY, O_RDWR},
> +     {O_WRONLY, O_RDONLY},
> +     {O_WRONLY, O_WRONLY},
> +     {O_WRONLY, O_RDWR},
> +     {O_RDWR, O_RDONLY},
> +     {O_RDWR, O_WRONLY},
> +     {O_RDWR, O_RDWR},
> +};
> +
> +char *TCID = "fcntl32";
> +int TST_TOTAL = ARRAY_SIZE(test_cases);
> +
> +int main(int ac, char **av)
> +{
> +     int lc;
> +     int tc;
> +     long type;
> +
> +     tst_parse_opts(ac, av, NULL, NULL);
> +
> +     setup();
> +
> +     switch ((type = tst_fs_type(cleanup, "."))) {
> +     case TST_NFS_MAGIC:
> +     case TST_RAMFS_MAGIC:
> +     case TST_TMPFS_MAGIC:
> +             tst_brkm(TCONF, cleanup, "%s filesystem does not support "
> +                      "fcntl(2)'s F_SETLEASE operation",
> +                      tst_fs_type_name(type));
> +     default:
> +             break;
> +     }
> +
> +     for (lc = 0; TEST_LOOPING(lc); lc++) {
> +             tst_count = 0;
> +
> +             for (tc = 0; tc < TST_TOTAL; tc++)
> +                     verify_fcntl(tc);
> +     }
> +
> +     cleanup();
> +     tst_exit();
> +}
> +
> +static void setup(void)
> +{
> +     tst_sig(NOFORK, DEF_HANDLER, cleanup);
> +     TEST_PAUSE;
> +
> +     tst_tmpdir();
> +
> +     SAFE_TOUCH(cleanup, "file", FILE_MODE, NULL);
> +}
> +
> +static void verify_fcntl(int i)
> +{
> +     fd1 = SAFE_OPEN(cleanup, "file", test_cases[i].fd1_flag);
> +     fd2 = SAFE_OPEN(cleanup, "file", test_cases[i].fd2_flag);
> +
> +     TEST(fcntl(fd1, F_SETLEASE, F_WRLCK));
> +
> +     if (TEST_RETURN == 0) {
> +             tst_resm(TFAIL, "fcntl(F_SETLEASE, F_WRLCK) "
> +                      "succeeded unexpectedly");
> +     } else {
> +             if (TEST_ERRNO == EBUSY || TEST_ERRNO == EAGAIN) {
> +                     tst_resm(TPASS | TTERRNO,
> +                              "fcntl(F_SETLEASE, F_WRLCK) "
> +                              "failed as expected");
> +             } else {
> +                     tst_resm(TFAIL | TTERRNO,
> +                              "fcntl(F_SETLEASE, F_WRLCK) "
> +                              "failed unexpectedly, "
> +                              "expected errno is EBUSY or EAGAIN");
> +             }
> +     }
> +
> +     SAFE_CLOSE(cleanup, fd1);
> +     fd1 = 0;
> +     SAFE_CLOSE(cleanup, fd2);
> +     fd2 = 0;
> +}
> +
> +static void cleanup(void)
> +{
> +     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();
> +}
> 

------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to