summaryrefslogtreecommitdiff
path: root/tests/usr.bin
diff options
context:
space:
mode:
authorkre <kre@NetBSD.org>2017-02-21 10:40:30 +0000
committerkre <kre@NetBSD.org>2017-02-21 10:40:30 +0000
commit2ff8278b07bc43b4e51bc5d35db860f5ccfddd65 (patch)
treea94f528d33d6209531e254c2bc8ed746d7f6a391 /tests/usr.bin
parent979f0c200174e916ca8077db783181c442da5e43 (diff)
PR bin/50934
Add a test program for the bug described in this PR. This is the first pkill/pgrep/prenice test (more would be good!) This test has been confirmed to work once the bug described in the PR has been fixed, so the test is not marked "expected to fail" even though initially that is what should happen. Note: the test cana also fail if the system running the tests happens to be running processes with names that match the patterns searched for by the test, other than the test program itself. This is expected to be unlikely.
Diffstat (limited to 'tests/usr.bin')
-rw-r--r--tests/usr.bin/Makefile6
-rw-r--r--tests/usr.bin/pkill/Makefile8
-rw-r--r--tests/usr.bin/pkill/t_pgrep.sh75
3 files changed, 86 insertions, 3 deletions
diff --git a/tests/usr.bin/Makefile b/tests/usr.bin/Makefile
index 1ed2d1a5885..14a1f412e6a 100644
--- a/tests/usr.bin/Makefile
+++ b/tests/usr.bin/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.23 2017/01/02 15:40:09 christos Exp $
+# $NetBSD: Makefile,v 1.24 2017/02/21 10:40:30 kre Exp $
#
.include <bsd.own.mk>
@@ -7,8 +7,8 @@ TESTSDIR= ${TESTSBASE}/usr.bin
TESTS_SUBDIRS= awk basename bzip2 cc cmp config cut \
diff dirname find gdb grep gzip id \
- infocmp jot ld m4 make mixerctl mkdep \
- nbperf netpgpverify pr rump_server shmif_dumpbus sdiff \
+ infocmp jot ld m4 make mixerctl mkdep nbperf netpgpverify \
+ pkill pr rump_server shmif_dumpbus sdiff \
sed sort tmux tr unifdef uniq vmstat xlint
.include <bsd.test.mk>
diff --git a/tests/usr.bin/pkill/Makefile b/tests/usr.bin/pkill/Makefile
new file mode 100644
index 00000000000..438e459d657
--- /dev/null
+++ b/tests/usr.bin/pkill/Makefile
@@ -0,0 +1,8 @@
+# $NetBSD: Makefile,v 1.1 2017/02/21 10:40:30 kre Exp $
+
+.include <bsd.own.mk>
+
+TESTSDIR= ${TESTSBASE}/usr.bin/pkill
+TESTS_SH= t_pgrep
+
+.include <bsd.test.mk>
diff --git a/tests/usr.bin/pkill/t_pgrep.sh b/tests/usr.bin/pkill/t_pgrep.sh
new file mode 100644
index 00000000000..042d68dc1c0
--- /dev/null
+++ b/tests/usr.bin/pkill/t_pgrep.sh
@@ -0,0 +1,75 @@
+# $NetBSD: t_pgrep.sh,v 1.1 2017/02/21 10:40:30 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+#
+
+atf_test_case pr50934
+basic_shift_test_head() {
+ atf_set "descr" "Test fix for PR bin/50934 (null argv[0])"
+}
+pr50934_body() {
+ atf_require_prog pgrep
+ atf_require_prog cc
+
+ cat > t.c <<'!'
+#include <stdlib.h>
+int
+#include <unistd.h>
+
+main(int argc, char **argv)
+{
+ sleep(2);
+ argv[0] = 0;
+ pause();
+ exit(0);
+}
+!
+
+ cc -o t0123456789abcdefg-beef t.c || atf_fail "t.c compile failed"
+
+ ./t0123456789abcdefg-beef &
+ PID=$!
+
+ pgrep -l t0123456 >OUT ; # should find the process
+ pgrep -l beef >>OUT ; # should find the process
+
+ sleep 5 ; # allow time for sleep in t.c and argv[0]=0
+
+ pgrep -l t0123456 >>OUT ; # should find the process
+ pgrep -l beef >>OUT ; # should find nothing
+
+ kill -9 $PID
+ cat OUT ; # just for the log
+
+ # note that pgrep -l only ever prints p_comm which is of limited sicze
+ atf_check_equal "$(cat OUT)" \
+ "$PID t0123456789abcde $PID t0123456789abcde $PID t0123456789abcde"
+
+ return 0
+}
+
+atf_init_test_cases() {
+ atf_add_test_case pr50934
+}