qual_signal.test revision 39bac055674d23770b9a724221b728e443196ea7
1d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#!/bin/sh
2d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#
3d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# Check how strace -e signal=set works.
4d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#
5d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
639bac055674d23770b9a724221b728e443196ea7Elliott Hughes# Copyright (c) 2016-2017 The strace developers.
7d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# All rights reserved.
8d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#
9d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# Redistribution and use in source and binary forms, with or without
10d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# modification, are permitted provided that the following conditions
11d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# are met:
12d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# 1. Redistributions of source code must retain the above copyright
13d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#    notice, this list of conditions and the following disclaimer.
14d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# 2. Redistributions in binary form must reproduce the above copyright
15d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#    notice, this list of conditions and the following disclaimer in the
16d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#    documentation and/or other materials provided with the distribution.
17d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# 3. The name of the author may not be used to endorse or promote products
18d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#    derived from this software without specific prior written permission.
19d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#
20d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
31d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes. "${srcdir=.}/init.sh"
32d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
33d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughestest_one_sig()
34d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes{
35d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	local sigs
36d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	sigs="$1"; shift
37d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
3839bac055674d23770b9a724221b728e443196ea7Elliott Hughes	run_prog "../$NAME" "$@" > /dev/null
3939bac055674d23770b9a724221b728e443196ea7Elliott Hughes	run_strace -e trace=none -e signal="$sigs" "../$NAME" "$@" > "$EXP"
40d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	match_diff "$LOG" "$EXP"
41d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes}
42d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
43d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughestest_sigs()
44d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes{
45d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	local first second sigs
46d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	first="$1"; shift
47d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	second="$1"; shift
48d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
49d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	for sigs; do
50d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes		test_one_sig "$sigs" 2 "$first" 15 "$second"
51d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	done
52d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes}
53d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
54d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughestest_sigs '' '' \
55d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	none '!all' \
56d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	CHLD SIGCHLD ALRM SIGALRM \
57d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	chld sigchld alrm sigalrm \
58d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	CHLD,SIGALRM ALRM,SIGCHLD \
59d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	chld,sigalrm alrm,sigchld \
60d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	9 9,4 9,4,11 \
61d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	4,CHLD,11,ALRM,9 \
62d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!2,15' '!INT,TERM' '!SIGINT,TERM' '!INT,SIGTERM' '!SIGTERM,SIGINT' \
63d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!2,INT,TERM' '!2,SIGTERM' '!SIGINT,15' '!INT,SIGTERM,15' \
64d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!2,4,15' '!15,9,2,11,4'
65d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
66d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughestest_sigs SIGINT '' \
67d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	2 INT SIGINT \
68d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	CHLD,SIGINT SIGINT,SIGALRM \
69d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	chld,sigint sigint,sigalrm \
70d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	ALRM,2,SIGCHLD \
71d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!15' '!TERM' '!SIGTERM' \
72d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!15,TERM' '!SIGTERM,15,TERM' \
73d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!SIGALRM,TERM' '!CHLD,SIGTERM' \
74d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!ALRM,15' '!SIGCHLD,ALRM,SIGTERM,KILL' \
75d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!4,15' '!15,9,11,4'
76d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
77d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughestest_sigs '' SIGTERM \
78d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	15 TERM SIGTERM \
79d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	CHLD,SIGTERM SIGTERM,SIGALRM \
80d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	chld,sigterm sigterm,sigalrm \
81d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	ALRM,15,SIGCHLD \
82d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!2' '!INT' '!SIGINT' \
83d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!2,INT' '!SIGINT,2,INT' \
84d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!SIGALRM,INT' '!CHLD,SIGINT' \
85d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!ALRM,2' '!SIGCHLD,ALRM,SIGINT,KILL' \
86d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!4,2' '!2,9,11,4'
87d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
88d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughestest_sigs SIGINT SIGTERM \
89d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	all '!none' \
90d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	INT,TERM SIGINT,TERM SIGTERM,INT SIGINT,SIGTERM \
91d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	int,term sigint,term sigterm,int sigint,sigterm \
92d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	2,15 2,TERM SIGTERM,2 TERM,15,SIGINT,2 \
93d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!CHLD' '!SIGCHLD' '!ALRM' '!SIGALRM' \
94d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!CHLD,SIGALRM' '!ALRM,SIGCHLD' \
95d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	'!9' '!9,4' '!9,4,11' '!4,CHLD,11,ALRM,9'
96d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
97d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesfail_with()
98d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes{
99d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	dump_log_and_fail_with \
100d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes		"strace -e signal=$* failed to handle an argument error properly"
101d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes}
102d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
103d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesfor arg in ' ' invalid_signal_name SIG -1 256 1-1 \
104d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	   1,2,4,8,16,32,64,128,256,512,1024 9,chdir; do
105d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	$STRACE -e signal="$arg" true 2> "$LOG" &&
106d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes		fail_with "$arg"
107d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	LC_ALL=C grep -F 'invalid signal' < "$LOG" > /dev/null ||
108d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes		fail_with "$arg"
109d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesdone
110d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
111d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesexit 0
112