Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Apr 2015 04:49:46 +0000 (UTC)
From:      Garrett Cooper <ngie@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r281969 - stable/10/tools/regression/aio/aiotest
Message-ID:  <201504250449.t3P4nk0s054345@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ngie
Date: Sat Apr 25 04:49:45 2015
New Revision: 281969
URL: https://svnweb.freebsd.org/changeset/base/281969

Log:
  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

Modified:
  stable/10/tools/regression/aio/aiotest/Makefile
  stable/10/tools/regression/aio/aiotest/aiotest.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/tools/regression/aio/aiotest/Makefile
==============================================================================
--- stable/10/tools/regression/aio/aiotest/Makefile	Sat Apr 25 04:40:08 2015	(r281968)
+++ stable/10/tools/regression/aio/aiotest/Makefile	Sat Apr 25 04:49:45 2015	(r281969)
@@ -6,4 +6,6 @@ MAN=
 DPADD=	${LIBUTIL}
 LDADD=	-lutil
 
+WARNS?=	6
+
 .include <bsd.prog.mk>

Modified: stable/10/tools/regression/aio/aiotest/aiotest.c
==============================================================================
--- stable/10/tools/regression/aio/aiotest/aiotest.c	Sat Apr 25 04:40:08 2015	(r281968)
+++ stable/10/tools/regression/aio/aiotest/aiotest.c	Sat Apr 25 04:49:45 2015	(r281969)
@@ -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, c
 
 	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, co
 {
 
 	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,
 {
 
 	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,
 	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);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504250449.t3P4nk0s054345>