summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2015-04-25 04:49:45 +0000
committerngie <ngie@FreeBSD.org>2015-04-25 04:49:45 +0000
commit70eb2d81410b8dedf542c6b3ef6793bed481c88e (patch)
tree4cb3368344680f572de57d4a5fee7eba2474e1e3 /tools
parentf3802269103f598ff81512dafc1cc3e7d669a082 (diff)
downloadFreeBSD-src-70eb2d81410b8dedf542c6b3ef6793bed481c88e.zip
FreeBSD-src-70eb2d81410b8dedf542c6b3ef6793bed481c88e.tar.gz
MFC r280893:
Cleanup and do minor refactoring before converting testcases to ATF - Convert errx(-1, ..) to errx(1, ..) - Move the aio(4) checks to a single function (aio_available); use modfind(2) instead of depending on SIGSYS (doesn't work when aio(4) support is missing, not documented in the aio syscall manpages). - Use aio_available liberally in the testcase functions - Use mkstemp(3) + unlink(2) instead of mktemp(3) - Fix some -Wunused warnings - Bump WARNS to 6 Submitted by: mjohnston [*] Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'tools')
-rw-r--r--tools/regression/aio/aiotest/Makefile2
-rw-r--r--tools/regression/aio/aiotest/aiotest.c130
2 files changed, 69 insertions, 63 deletions
diff --git a/tools/regression/aio/aiotest/Makefile b/tools/regression/aio/aiotest/Makefile
index 6e59f42..59d4316 100644
--- a/tools/regression/aio/aiotest/Makefile
+++ b/tools/regression/aio/aiotest/Makefile
@@ -6,4 +6,6 @@ MAN=
DPADD= ${LIBUTIL}
LDADD= -lutil
+WARNS?= 6
+
.include <bsd.prog.mk>
diff --git a/tools/regression/aio/aiotest/aiotest.c b/tools/regression/aio/aiotest/aiotest.c
index 48c7aba..6a3d612 100644
--- a/tools/regression/aio/aiotest/aiotest.c
+++ b/tools/regression/aio/aiotest/aiotest.c
@@ -38,7 +38,8 @@
* basic operations work on some basic object types.
*/
-#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/module.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/mdioctl.h>
@@ -79,25 +80,15 @@ struct aio_context {
};
static int aio_timedout;
-static int aio_notpresent;
-
-/*
- * Attempt to provide a cleaner failure mode in the event AIO support is not
- * present by catching and reporting SIGSYS.
- */
-static void
-aio_sigsys(int sig)
-{
-
- aio_notpresent = 1;
-}
static void
-aio_sigsys_setup(void)
+aio_available(void)
{
- if (signal(SIGSYS, aio_sigsys) == SIG_ERR)
- errx(-1, "FAIL: signal(SIGSYS): %s", strerror(errno));
+ if (modfind("aio") == -1)
+ errx(0,
+ "aio support not available in the kernel; skipping "
+ "testcases");
}
/*
@@ -105,7 +96,7 @@ aio_sigsys_setup(void)
* signal(3) and alarm(3) APIs to set this up.
*/
static void
-aio_timeout_signal(int sig)
+aio_timeout_signal(int sig __unused)
{
aio_timedout = 1;
@@ -117,7 +108,7 @@ aio_timeout_start(const char *string1, const char *string2, int seconds)
aio_timedout = 0;
if (signal(SIGALRM, aio_timeout_signal) == SIG_ERR)
- errx(-1, "FAIL: %s: %s: aio_timeout_set: signal(SIGALRM): %s",
+ errx(1, "FAIL: %s: %s: aio_timeout_set: signal(SIGALRM): %s",
string1, string2, strerror(errno));
alarm(seconds);
}
@@ -127,7 +118,7 @@ aio_timeout_stop(const char *string1, const char *string2)
{
if (signal(SIGALRM, NULL) == SIG_ERR)
- errx(-1, "FAIL: %s: %s: aio_timeout_stop: signal(NULL): %s",
+ errx(1, "FAIL: %s: %s: aio_timeout_stop: signal(NULL): %s",
string1, string2, strerror(errno));
alarm(0);
}
@@ -179,7 +170,7 @@ aio_context_init(struct aio_context *ac, const char *test, int read_fd,
{
if (buflen > BUFFER_MAX)
- errx(-1, "FAIL: %s: aio_context_init: buffer too large",
+ errx(1, "FAIL: %s: aio_context_init: buffer too large",
test);
bzero(ac, sizeof(*ac));
ac->ac_test = test;
@@ -190,7 +181,7 @@ aio_context_init(struct aio_context *ac, const char *test, int read_fd,
ac->ac_seed = random();
aio_fill_buffer(ac->ac_buffer, buflen, ac->ac_seed);
if (aio_test_buffer(ac->ac_buffer, buflen, ac->ac_seed) == 0)
- errx(-1, "%s: aio_context_init: aio_test_buffer: internal "
+ errx(1, "%s: aio_context_init: aio_test_buffer: internal "
"error", test);
ac->ac_seconds = seconds;
ac->ac_cleanup = cleanup;
@@ -223,7 +214,8 @@ aio_write_test(struct aio_context *ac)
{
struct aiocb aio, *aiop;
ssize_t len;
- int error;
+
+ aio_available();
bzero(&aio, sizeof(aio));
aio.aio_buf = ac->ac_buffer;
@@ -235,33 +227,29 @@ aio_write_test(struct aio_context *ac)
if (aio_write(&aio) < 0) {
if (errno == EINTR) {
- if (aio_notpresent)
- errno = EOPNOTSUPP;
if (aio_timedout) {
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_write_test: "
+ errx(1, "FAIL: %s: aio_write_test: "
"aio_write: timed out", ac->ac_test);
}
}
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_write_test: aio_write: %s",
+ errx(1, "FAIL: %s: aio_write_test: aio_write: %s",
ac->ac_test, strerror(errno));
}
len = aio_waitcomplete(&aiop, NULL);
if (len < 0) {
if (errno == EINTR) {
- if (aio_notpresent)
- errno = EOPNOTSUPP;
if (aio_timedout) {
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_write_test: "
+ errx(1, "FAIL: %s: aio_write_test: "
"aio_waitcomplete: timed out",
ac->ac_test);
}
}
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_write_test: aio_waitcomplete: %s",
+ errx(1, "FAIL: %s: aio_write_test: aio_waitcomplete: %s",
ac->ac_test, strerror(errno));
}
@@ -269,7 +257,7 @@ aio_write_test(struct aio_context *ac)
if (len != ac->ac_buflen) {
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_write_test: aio_waitcomplete: short "
+ errx(1, "FAIL: %s: aio_write_test: aio_waitcomplete: short "
"write (%jd)", ac->ac_test, (intmax_t)len);
}
}
@@ -284,6 +272,8 @@ aio_read_test(struct aio_context *ac)
struct aiocb aio, *aiop;
ssize_t len;
+ aio_available();
+
bzero(ac->ac_buffer, ac->ac_buflen);
bzero(&aio, sizeof(aio));
aio.aio_buf = ac->ac_buffer;
@@ -295,33 +285,29 @@ aio_read_test(struct aio_context *ac)
if (aio_read(&aio) < 0) {
if (errno == EINTR) {
- if (aio_notpresent)
- errno = EOPNOTSUPP;
if (aio_timedout) {
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_read_test: "
+ errx(1, "FAIL: %s: aio_read_test: "
"aio_read: timed out", ac->ac_test);
}
}
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_read_test: aio_read %s", ac->ac_test,
+ errx(1, "FAIL: %s: aio_read_test: aio_read %s", ac->ac_test,
strerror(errno));
}
len = aio_waitcomplete(&aiop, NULL);
if (len < 0) {
if (errno == EINTR) {
- if (aio_notpresent)
- errno = EOPNOTSUPP;
if (aio_timedout) {
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_read_test: "
+ errx(1, "FAIL: %s: aio_read_test: "
"aio_waitcomplete: timed out",
ac->ac_test);
}
}
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_read_test: aio_waitcomplete: %s",
+ errx(1, "FAIL: %s: aio_read_test: aio_waitcomplete: %s",
ac->ac_test, strerror(errno));
}
@@ -329,13 +315,13 @@ aio_read_test(struct aio_context *ac)
if (len != ac->ac_buflen) {
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_read_test: aio_waitcomplete: short "
+ errx(1, "FAIL: %s: aio_read_test: aio_waitcomplete: short "
"read (%jd)", ac->ac_test, (intmax_t)len);
}
if (aio_test_buffer(ac->ac_buffer, ac->ac_buflen, ac->ac_seed) == 0) {
aio_cleanup(ac);
- errx(-1, "FAIL: %s: aio_read_test: buffer mismatch",
+ errx(1, "FAIL: %s: aio_read_test: buffer mismatch",
ac->ac_test);
}
}
@@ -375,10 +361,12 @@ aio_file_test(void)
struct aio_context ac;
int fd;
+ aio_available();
+
strcpy(pathname, PATH_TEMPLATE);
fd = mkstemp(pathname);
if (fd == -1)
- errx(-1, "FAIL: aio_file_test: mkstemp: %s",
+ errx(1, "FAIL: aio_file_test: mkstemp: %s",
strerror(errno));
arg.afa_fd = fd;
@@ -423,15 +411,20 @@ aio_fifo_test(void)
char pathname[PATH_MAX];
struct aio_context ac;
+ aio_available();
+
/*
- * In theory, mktemp() can return a name that is then collided with.
+ * In theory, mkstemp() can return a name that is then collided with.
* Because this is a regression test, we treat that as a test failure
* rather than retrying.
*/
strcpy(pathname, PATH_TEMPLATE);
- mktemp(pathname);
+ if (mkstemp(pathname) == -1)
+ err(1, "FAIL: aio_fifo_test: mkstemp failed");
+ if (unlink(pathname) == -1)
+ err(1, "FAIL: aio_fifo_test: unlink failed");
if (mkfifo(pathname, 0600) == -1)
- errx(-1, "FAIL: aio_fifo_test: mkfifo: %s", strerror(errno));
+ errx(1, "FAIL: aio_fifo_test: mkfifo: %s", strerror(errno));
arg.afa_pathname = pathname;
arg.afa_read_fd = -1;
arg.afa_write_fd = -1;
@@ -441,7 +434,7 @@ aio_fifo_test(void)
error = errno;
aio_fifo_cleanup(&arg);
errno = error;
- errx(-1, "FAIL: aio_fifo_test: read_fd open: %s",
+ errx(1, "FAIL: aio_fifo_test: read_fd open: %s",
strerror(errno));
}
arg.afa_read_fd = read_fd;
@@ -451,7 +444,7 @@ aio_fifo_test(void)
error = errno;
aio_fifo_cleanup(&arg);
errno = error;
- errx(-1, "FAIL: aio_fifo_test: write_fd open: %s",
+ errx(1, "FAIL: aio_fifo_test: write_fd open: %s",
strerror(errno));
}
arg.afa_write_fd = write_fd;
@@ -489,8 +482,10 @@ aio_unix_socketpair_test(void)
struct aio_context ac;
int sockets[2];
+ aio_available();
+
if (socketpair(PF_UNIX, SOCK_STREAM, 0, sockets) < 0)
- errx(-1, "FAIL: aio_socketpair_test: socketpair: %s",
+ errx(1, "FAIL: aio_socketpair_test: socketpair: %s",
strerror(errno));
arg.asa_sockets[0] = sockets[0];
@@ -532,8 +527,10 @@ aio_pty_test(void)
struct termios ts;
int error;
+ aio_available();
+
if (openpty(&read_fd, &write_fd, NULL, NULL, NULL) < 0)
- errx(-1, "FAIL: aio_pty_test: openpty: %s", strerror(errno));
+ errx(1, "FAIL: aio_pty_test: openpty: %s", strerror(errno));
arg.apa_read_fd = read_fd;
arg.apa_write_fd = write_fd;
@@ -542,7 +539,7 @@ aio_pty_test(void)
error = errno;
aio_pty_cleanup(&arg);
errno = error;
- errx(-1, "FAIL: aio_pty_test: tcgetattr: %s",
+ errx(1, "FAIL: aio_pty_test: tcgetattr: %s",
strerror(errno));
}
cfmakeraw(&ts);
@@ -550,7 +547,7 @@ aio_pty_test(void)
error = errno;
aio_pty_cleanup(&arg);
errno = error;
- errx(-1, "FAIL: aio_pty_test: tcsetattr: %s",
+ errx(1, "FAIL: aio_pty_test: tcsetattr: %s",
strerror(errno));
}
@@ -581,8 +578,10 @@ aio_pipe_test(void)
struct aio_context ac;
int pipes[2];
+ aio_available();
+
if (pipe(pipes) < 0)
- errx(-1, "FAIL: aio_pipe_test: pipe: %s", strerror(errno));
+ errx(1, "FAIL: aio_pipe_test: pipe: %s", strerror(errno));
aio_context_init(&ac, "aio_file_test", pipes[0], pipes[1], PIPE_LEN,
PIPE_TIMEOUT, aio_pipe_cleanup, pipes);
@@ -633,15 +632,23 @@ aio_md_cleanup(void *arg)
static void
aio_md_test(void)
{
- int error, fd, i, mdctl_fd, unit;
+ int error, fd, mdctl_fd, unit;
char pathname[PATH_MAX];
struct aio_md_arg arg;
struct aio_context ac;
struct md_ioctl mdio;
+ aio_available();
+
+ if (geteuid() != 0) {
+ fprintf(stderr, "WARNING: aio_md_test: skipped as euid "
+ "!= 0\n");
+ return;
+ }
+
mdctl_fd = open("/dev/" MDCTL_NAME, O_RDWR, 0);
if (mdctl_fd < 0)
- errx(-1, "FAIL: aio_md_test: open(/dev/%s): %s", MDCTL_NAME,
+ errx(1, "FAIL: aio_md_test: open(/dev/%s): %s", MDCTL_NAME,
strerror(errno));
bzero(&mdio, sizeof(mdio));
@@ -658,7 +665,7 @@ aio_md_test(void)
error = errno;
aio_md_cleanup(&arg);
errno = error;
- errx(-1, "FAIL: aio_md_test: MDIOCATTACH: %s",
+ errx(1, "FAIL: aio_md_test: MDIOCATTACH: %s",
strerror(errno));
}
@@ -669,7 +676,7 @@ aio_md_test(void)
error = errno;
aio_md_cleanup(&arg);
errno = error;
- errx(-1, "FAIL: aio_md_test: open(%s): %s", pathname,
+ errx(1, "FAIL: aio_md_test: open(%s): %s", pathname,
strerror(errno));
}
arg.ama_fd = fd;
@@ -685,18 +692,15 @@ aio_md_test(void)
}
int
-main(int argc, char *argv[])
+main(void)
{
- aio_sigsys_setup();
aio_file_test();
aio_fifo_test();
aio_unix_socketpair_test();
aio_pty_test();
aio_pipe_test();
- if (geteuid() == 0)
- aio_md_test();
- else
- fprintf(stderr, "WARNING: aio_md_test: skipped as euid "
- "!= 0\n");
+ aio_md_test();
+
+ return (0);
}
OpenPOWER on IntegriCloud