From 67cef682ddde89a460886489a6c18d93b02d4c7b Mon Sep 17 00:00:00 2001 From: kre Date: Tue, 21 Feb 2017 10:40:30 +0000 Subject: [PATCH] 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. --- distrib/sets/lists/tests/mi | 6 ++- etc/mtree/NetBSD.dist.tests | 3 +- tests/usr.bin/Makefile | 6 +-- tests/usr.bin/pkill/Makefile | 8 ++++ tests/usr.bin/pkill/t_pgrep.sh | 75 ++++++++++++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 tests/usr.bin/pkill/Makefile create mode 100644 tests/usr.bin/pkill/t_pgrep.sh diff --git a/distrib/sets/lists/tests/mi b/distrib/sets/lists/tests/mi index a49e3872c3ee..8b4b36b8d6b3 100644 --- a/distrib/sets/lists/tests/mi +++ b/distrib/sets/lists/tests/mi @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.722 2017/02/20 03:14:42 kamil Exp $ +# $NetBSD: mi,v 1.723 2017/02/21 10:40:30 kre Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -3812,6 +3812,10 @@ ./usr/tests/usr.bin/netpgpverify/Atffile tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/netpgpverify/Kyuafile tests-usr.bin-tests compattestfile,atf,kyua ./usr/tests/usr.bin/netpgpverify/t_netpgpverify tests-usr.bin-tests compattestfile,atf +./usr/tests/usr.bin/pkill tests-usr.bin-tests compattestfile,atf +./usr/tests/usr.bin/pkill/Atffile tests-usr.bin-tests compattestfile,atf +./usr/tests/usr.bin/pkill/Kyuafile tests-usr.bin-tests compattestfile,atf,kyua +./usr/tests/usr.bin/pkill/t_pgrep tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/pr tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/pr/Atffile tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/pr/Kyuafile tests-usr.bin-tests compattestfile,atf,kyua diff --git a/etc/mtree/NetBSD.dist.tests b/etc/mtree/NetBSD.dist.tests index df04ee3ff5df..d1cdebfcfdfb 100644 --- a/etc/mtree/NetBSD.dist.tests +++ b/etc/mtree/NetBSD.dist.tests @@ -1,4 +1,4 @@ -# $NetBSD: NetBSD.dist.tests,v 1.141 2017/02/20 03:14:42 kamil Exp $ +# $NetBSD: NetBSD.dist.tests,v 1.142 2017/02/21 10:40:30 kre Exp $ ./usr/libdata/debug/usr/tests ./usr/libdata/debug/usr/tests/atf @@ -407,6 +407,7 @@ ./usr/tests/usr.bin/mixerctl ./usr/tests/usr.bin/mkdep ./usr/tests/usr.bin/nbperf +./usr/tests/usr.bin/pkill ./usr/tests/usr.bin/pr ./usr/tests/usr.bin/rump_server ./usr/tests/usr.bin/sdiff diff --git a/tests/usr.bin/Makefile b/tests/usr.bin/Makefile index 1ed2d1a5885c..14a1f412e6a0 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 @@ -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 diff --git a/tests/usr.bin/pkill/Makefile b/tests/usr.bin/pkill/Makefile new file mode 100644 index 000000000000..438e459d657e --- /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 + +TESTSDIR= ${TESTSBASE}/usr.bin/pkill +TESTS_SH= t_pgrep + +.include diff --git a/tests/usr.bin/pkill/t_pgrep.sh b/tests/usr.bin/pkill/t_pgrep.sh new file mode 100644 index 000000000000..042d68dc1c0f --- /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 +int +#include + +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 +}