summaryrefslogtreecommitdiffstats
path: root/tests/sys
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sys')
-rw-r--r--tests/sys/kern/Makefile1
-rw-r--r--tests/sys/kern/waitpid_nohang.c70
-rw-r--r--tests/sys/mqueue/Makefile4
-rw-r--r--tests/sys/mqueue/mqtest3.c10
-rw-r--r--tests/sys/mqueue/mqtest4.c4
5 files changed, 81 insertions, 8 deletions
diff --git a/tests/sys/kern/Makefile b/tests/sys/kern/Makefile
index cbe382c..b0d3a0e 100644
--- a/tests/sys/kern/Makefile
+++ b/tests/sys/kern/Makefile
@@ -12,6 +12,7 @@ PLAIN_TESTS_C+= subr_unit_test
ATF_TESTS_C+= unix_seqpacket_test
ATF_TESTS_C+= unix_passfd_test
TEST_METADATA.unix_seqpacket_test+= timeout="15"
+ATF_TESTS_C+= waitpid_nohang
LIBADD.ptrace_test+= pthread
LIBADD.unix_seqpacket_test+= pthread
diff --git a/tests/sys/kern/waitpid_nohang.c b/tests/sys/kern/waitpid_nohang.c
new file mode 100644
index 0000000..116ccf3
--- /dev/null
+++ b/tests/sys/kern/waitpid_nohang.c
@@ -0,0 +1,70 @@
+/*-
+ * Copyright (c) 2016 Jilles Tjoelker
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/wait.h>
+
+#include <atf-c.h>
+#include <signal.h>
+#include <unistd.h>
+
+ATF_TC_WITHOUT_HEAD(waitpid_nohang);
+ATF_TC_BODY(waitpid_nohang, tc)
+{
+ pid_t child, pid;
+ int status, r;
+
+ child = fork();
+ ATF_REQUIRE(child != -1);
+ if (child == 0) {
+ sleep(10);
+ _exit(1);
+ }
+
+ status = 42;
+ pid = waitpid(child, &status, WNOHANG);
+ ATF_REQUIRE(pid == 0);
+ ATF_CHECK(status == 42);
+
+ r = kill(child, SIGTERM);
+ ATF_REQUIRE(r == 0);
+ r = waitid(P_PID, child, NULL, WEXITED | WNOWAIT);
+ ATF_REQUIRE(r == 0);
+
+ status = -1;
+ pid = waitpid(child, &status, WNOHANG);
+ ATF_REQUIRE(pid == child);
+ ATF_CHECK(WIFSIGNALED(status) && WTERMSIG(status) == SIGTERM);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, waitpid_nohang);
+ return (atf_no_error());
+}
diff --git a/tests/sys/mqueue/Makefile b/tests/sys/mqueue/Makefile
index ce5033c..251c497 100644
--- a/tests/sys/mqueue/Makefile
+++ b/tests/sys/mqueue/Makefile
@@ -10,8 +10,8 @@ CFLAGS+= -I${SRCTOP}/tests
PROGS+= mqtest1
PROGS+= mqtest2
-#PROGS+= mqtest3
-#PROGS+= mqtest4
+PROGS+= mqtest3
+PROGS+= mqtest4
PROGS+= mqtest5
LIBADD+= rt
diff --git a/tests/sys/mqueue/mqtest3.c b/tests/sys/mqueue/mqtest3.c
index c4b849e..3e20c4d 100644
--- a/tests/sys/mqueue/mqtest3.c
+++ b/tests/sys/mqueue/mqtest3.c
@@ -62,9 +62,10 @@ main(void)
buf = malloc(attr.mq_msgsize);
for (j = 0; j < LOOPS; ++j) {
FD_ZERO(&set);
- FD_SET(__mq_oshandle(mq), &set);
+ FD_SET(mq_getfd_np(mq), &set);
alarm(3);
- status = select(__mq_oshandle(mq)+1, &set, NULL, NULL, NULL);
+ status = select(mq_getfd_np(mq) + 1, &set, NULL,
+ NULL, NULL);
if (status != 1)
err(1, "child process: select()");
status = mq_receive(mq, buf, attr.mq_msgsize, &prio);
@@ -94,8 +95,9 @@ main(void)
}
alarm(3);
FD_ZERO(&set);
- FD_SET(__mq_oshandle(mq), &set);
- status = select(__mq_oshandle(mq)+1, NULL, &set, NULL, NULL);
+ FD_SET(mq_getfd_np(mq), &set);
+ status = select(mq_getfd_np(mq) + 1, NULL, &set,
+ NULL, NULL);
if (status != 1)
err(1, "select()");
status = mq_send(mq, buf, attr.mq_msgsize, PRIO);
diff --git a/tests/sys/mqueue/mqtest4.c b/tests/sys/mqueue/mqtest4.c
index 474d212..b0b3952 100644
--- a/tests/sys/mqueue/mqtest4.c
+++ b/tests/sys/mqueue/mqtest4.c
@@ -57,7 +57,7 @@ main(void)
mq = mq_open(MQNAME, O_RDWR);
if (mq == (mqd_t)-1)
err(1, "child: mq_open");
- EV_SET(&kev, __mq_oshandle(mq), EVFILT_READ, EV_ADD, 0, 0, 0);
+ EV_SET(&kev, mq_getfd_np(mq), EVFILT_READ, EV_ADD, 0, 0, 0);
status = kevent(kq, &kev, 1, NULL, 0, NULL);
if (status == -1)
err(1, "child: kevent");
@@ -89,7 +89,7 @@ main(void)
signal(SIGALRM, sighandler);
kq = kqueue();
- EV_SET(&kev, __mq_oshandle(mq), EVFILT_WRITE, EV_ADD, 0, 0, 0);
+ EV_SET(&kev, mq_getfd_np(mq), EVFILT_WRITE, EV_ADD, 0, 0, 0);
status = kevent(kq, &kev, 1, NULL, 0, NULL);
if (status == -1)
err(1, "kevent");
OpenPOWER on IntegriCloud