diff options
Diffstat (limited to 'tests/sys')
-rw-r--r-- | tests/sys/aio/aio_kqueue_test.c | 2 | ||||
-rw-r--r-- | tests/sys/aio/aio_test.c | 5 | ||||
-rw-r--r-- | tests/sys/aio/lio_kqueue_test.c | 2 | ||||
-rw-r--r-- | tests/sys/aio/local.h | 74 |
4 files changed, 83 insertions, 0 deletions
diff --git a/tests/sys/aio/aio_kqueue_test.c b/tests/sys/aio/aio_kqueue_test.c index 97c2c38f..08d57f8 100644 --- a/tests/sys/aio/aio_kqueue_test.c +++ b/tests/sys/aio/aio_kqueue_test.c @@ -47,6 +47,7 @@ #include <unistd.h> #include "freebsd_test_suite/macros.h" +#include "local.h" #define PATH_TEMPLATE "aio.XXXXXXXXXX" @@ -70,6 +71,7 @@ main (int argc, char *argv[]) unsigned i, j; PLAIN_REQUIRE_KERNEL_MODULE("aio", 0); + PLAIN_REQUIRE_UNSAFE_AIO(0); kq = kqueue(); if (kq < 0) { diff --git a/tests/sys/aio/aio_test.c b/tests/sys/aio/aio_test.c index 4134e78..607f46d 100644 --- a/tests/sys/aio/aio_test.c +++ b/tests/sys/aio/aio_test.c @@ -60,6 +60,7 @@ #include <atf-c.h> #include "freebsd_test_suite/macros.h" +#include "local.h" #define PATH_TEMPLATE "aio.XXXXXXXXXX" @@ -340,6 +341,7 @@ ATF_TC_BODY(aio_file_test, tc) int fd; ATF_REQUIRE_KERNEL_MODULE("aio"); + ATF_REQUIRE_UNSAFE_AIO(); strcpy(pathname, PATH_TEMPLATE); fd = mkstemp(pathname); @@ -386,6 +388,7 @@ ATF_TC_BODY(aio_fifo_test, tc) struct aio_context ac; ATF_REQUIRE_KERNEL_MODULE("aio"); + ATF_REQUIRE_UNSAFE_AIO(); /* * In theory, mkstemp() can return a name that is then collided with. @@ -497,6 +500,7 @@ ATF_TC_BODY(aio_pty_test, tc) int error; ATF_REQUIRE_KERNEL_MODULE("aio"); + ATF_REQUIRE_UNSAFE_AIO(); ATF_REQUIRE_MSG(openpty(&read_fd, &write_fd, NULL, NULL, NULL) == 0, "openpty failed: %s", strerror(errno)); @@ -544,6 +548,7 @@ ATF_TC_BODY(aio_pipe_test, tc) int pipes[2]; ATF_REQUIRE_KERNEL_MODULE("aio"); + ATF_REQUIRE_UNSAFE_AIO(); ATF_REQUIRE_MSG(pipe(pipes) != -1, "pipe failed: %s", strerror(errno)); diff --git a/tests/sys/aio/lio_kqueue_test.c b/tests/sys/aio/lio_kqueue_test.c index e69b9c9..5178a1d 100644 --- a/tests/sys/aio/lio_kqueue_test.c +++ b/tests/sys/aio/lio_kqueue_test.c @@ -50,6 +50,7 @@ #include <unistd.h> #include "freebsd_test_suite/macros.h" +#include "local.h" #define PATH_TEMPLATE "aio.XXXXXXXXXX" @@ -74,6 +75,7 @@ main(int argc, char *argv[]) int tmp_file = 0, failed = 0; PLAIN_REQUIRE_KERNEL_MODULE("aio", 0); + PLAIN_REQUIRE_UNSAFE_AIO(0); kq = kqueue(); if (kq < 0) diff --git a/tests/sys/aio/local.h b/tests/sys/aio/local.h new file mode 100644 index 0000000..308b700 --- /dev/null +++ b/tests/sys/aio/local.h @@ -0,0 +1,74 @@ +/*- + * Copyright (c) 2016 Chelsio Communications, Inc. + * All rights reserved. + * Written by: John Baldwin <jhb@FreeBSD.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _AIO_TEST_LOCAL_H_ +#define _AIO_TEST_LOCAL_H_ + +#include <sys/types.h> +#include <sys/sysctl.h> +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +#include <atf-c.h> + +#define ATF_REQUIRE_UNSAFE_AIO() do { \ + size_t _len; \ + int _unsafe; \ + \ + _len = sizeof(_unsafe); \ + if (sysctlbyname("vfs.aio.enable_unsafe", &_unsafe, &_len, NULL,\ + 0) < 0) { \ + if (errno != ENOENT) \ + atf_libc_error(errno, \ + "Failed to read vfs.aio.enable_unsafe"); \ + } else if (_unsafe == 0) \ + atf_tc_skip("Unsafe AIO is disabled"); \ +} while (0) + +#define PLAIN_REQUIRE_UNSAFE_AIO(_exit_code) do { \ + size_t _len; \ + int _unsafe; \ + \ + _len = sizeof(_unsafe); \ + if (sysctlbyname("vfs.aio.enable_unsafe", &_unsafe, &_len, NULL,\ + 0) < 0) { \ + if (errno != ENOENT) { \ + printf("Failed to read vfs.aio.enable_unsafe: %s\n",\ + strerror(errno)); \ + _exit(1); \ + } \ + } else if (_unsafe == 0) { \ + printf("Unsafe AIO is disabled"); \ + _exit(_exit_code); \ + } \ +} while (0) + +#endif /* !_AIO_TEST_LOCAL_H_ */ |