t_trapsignal.sh revision 1.5
11.5Smartin# $NetBSD: t_trapsignal.sh,v 1.5 2019/01/26 16:44:30 martin Exp $
21.1Schristos#
31.1Schristos# Copyright (c) 2017 The NetBSD Foundation, Inc.
41.1Schristos# All rights reserved.
51.1Schristos#
61.1Schristos# This code is derived from software contributed to The NetBSD Foundation
71.1Schristos# by Christos Zoulas.
81.1Schristos#
91.1Schristos# Redistribution and use in source and binary forms, with or without
101.1Schristos# modification, are permitted provided that the following conditions
111.1Schristos# are met:
121.1Schristos# 1. Redistributions of source code must retain the above copyright
131.1Schristos#    notice, this list of conditions and the following disclaimer.
141.1Schristos# 2. Redistributions in binary form must reproduce the above copyright
151.1Schristos#    notice, this list of conditions and the following disclaimer in the
161.1Schristos#    documentation and/or other materials provided with the distribution.
171.1Schristos#
181.1Schristos# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
191.1Schristos# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
201.1Schristos# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
211.1Schristos# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
221.1Schristos# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
231.1Schristos# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
241.1Schristos# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
251.1Schristos# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
261.1Schristos# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
271.1Schristos# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
281.1Schristos# POSSIBILITY OF SUCH DAMAGE.
291.1Schristos#
301.1Schristos
311.1SchristosHELPER=$(atf_get_srcdir)/h_segv
321.4Skamil
331.4Skamil# SIGSEGV
341.4Skamil
351.3Skamilatf_test_case segv_simple
361.3Skamilsegv_simple()
371.3Skamil{
381.3Skamil	atf_set "descr" "Test unhandled SIGSEGV with the right exit code"
391.3Skamil}
401.3Skamilsegv_simple_body()
411.3Skamil{
421.3Skamil	atf_check -s signal:11 -o "inline:" -e "inline:" \
431.3Skamil		${HELPER} segv recurse
441.3Skamil}
451.3Skamil
461.3Skamilatf_test_case segv_handle
471.3Skamilsegv_handle()
481.3Skamil{
491.3Skamil	atf_set "descr" "Test handled SIGSEGV traps call the signal handler"
501.3Skamil}
511.3Skamilsegv_handle_body()
521.3Skamil{
531.3Skamil	atf_check -s exit:0 -o "inline:" -e "inline:got 11\n" \
541.3Skamil		${HELPER} segv handle
551.3Skamil}
561.3Skamil
571.3Skamilatf_test_case segv_mask
581.3Skamilsegv_mask()
591.3Skamil{
601.3Skamil	atf_set "descr" "Test that masking SIGSEGV get reset"
611.3Skamil}
621.3Skamilsegv_mask_body()
631.3Skamil{
641.3Skamil	atf_check -s signal:11 -o "inline:" -e "inline:" \
651.3Skamil		${HELPER} segv mask
661.3Skamil}
671.3Skamil
681.3Skamilatf_test_case segv_handle_mask
691.3Skamilsegv_handle_mask()
701.3Skamil{
711.3Skamil	atf_set "descr" "Test handled and masked SIGSEGV traps get reset"
721.3Skamil}
731.3Skamilsegv_handle_mask_body()
741.3Skamil{
751.3Skamil	atf_check -s signal:11 -o "inline:" -e "inline:" \
761.3Skamil		${HELPER} segv mask handle
771.3Skamil}
781.3Skamil
791.3Skamilatf_test_case segv_handle_recurse
801.3Skamilsegv_handle_recurse()
811.3Skamil{
821.3Skamil	atf_set "descr" "Test that receiving SIGSEGV in the handler resets"
831.3Skamil}
841.3Skamil
851.3Skamilsegv_handle_recurse_body()
861.3Skamil{
871.3Skamil	atf_check -s signal:11 -o "inline:" -e "inline:got 11\n" \
881.3Skamil		${HELPER} segv handle recurse
891.3Skamil}
901.3Skamil
911.3Skamilatf_test_case segv_ignore
921.3Skamilsegv_ignore()
931.3Skamil{
941.3Skamil	atf_set "descr" "Test ignored SIGSEGV trap with right exit code"
951.3Skamil}
961.3Skamil
971.3Skamilsegv_ignore_body()
981.3Skamil{
991.3Skamil	atf_check -s signal:11 -o "inline:" -e "inline:" \
1001.3Skamil		${HELPER} segv ignore
1011.3Skamil}
1021.3Skamil
1031.4Skamil# SIGTRAP
1041.4Skamil
1051.1Schristosatf_test_case trap_simple
1061.1Schristostrap_simple()
1071.1Schristos{
1081.3Skamil	atf_set "descr" "Test unhandled SIGTRAP with the right exit code"
1091.1Schristos}
1101.1Schristostrap_simple_body()
1111.1Schristos{
1121.3Skamil	atf_check -s signal:5 -o "inline:" -e "inline:" \
1131.3Skamil		${HELPER} trap recurse
1141.1Schristos}
1151.1Schristos
1161.1Schristosatf_test_case trap_handle
1171.1Schristostrap_handle()
1181.1Schristos{
1191.3Skamil	atf_set "descr" "Test handled SIGTRAP traps call the signal handler"
1201.1Schristos}
1211.1Schristostrap_handle_body()
1221.1Schristos{
1231.3Skamil	atf_check -s exit:0 -o "inline:" -e "inline:got 5\n" \
1241.3Skamil		${HELPER} trap handle
1251.1Schristos}
1261.1Schristos
1271.1Schristosatf_test_case trap_mask
1281.1Schristostrap_mask()
1291.1Schristos{
1301.3Skamil	atf_set "descr" "Test that masking the trapped SIGTRAP signal get reset"
1311.1Schristos}
1321.1Schristostrap_mask_body()
1331.1Schristos{
1341.3Skamil	atf_check -s signal:5 -o "inline:" -e "inline:" \
1351.3Skamil		${HELPER} trap mask
1361.1Schristos}
1371.1Schristos
1381.1Schristosatf_test_case trap_handle_mask
1391.1Schristostrap_handle_mask()
1401.1Schristos{
1411.3Skamil	atf_set "descr" "Test handled and masked SIGTRAP traps get reset"
1421.1Schristos}
1431.1Schristostrap_handle_mask_body()
1441.1Schristos{
1451.3Skamil	atf_check -s signal:5 -o "inline:" -e "inline:" \
1461.3Skamil		${HELPER} trap mask handle
1471.1Schristos}
1481.1Schristos
1491.1Schristosatf_test_case trap_handle_recurse
1501.1Schristostrap_handle_recurse()
1511.1Schristos{
1521.3Skamil	atf_set "descr" "Test that receiving SIGTRAP in the handler resets"
1531.1Schristos}
1541.1Schristos
1551.1Schristostrap_handle_recurse_body()
1561.1Schristos{
1571.3Skamil	atf_check -s signal:5 -o "inline:" -e "inline:got 5\n" \
1581.3Skamil		${HELPER} trap handle recurse
1591.1Schristos}
1601.1Schristos
1611.2Skamilatf_test_case trap_ignore
1621.2Skamiltrap_ignore()
1631.2Skamil{
1641.2Skamil	atf_set "descr" "Test ignored trap with right exit code"
1651.2Skamil}
1661.2Skamil
1671.2Skamiltrap_ignore_body()
1681.2Skamil{
1691.3Skamil	atf_check -s signal:5 -o "inline:" -e "inline:" \
1701.3Skamil		${HELPER} trap ignore
1711.2Skamil}
1721.2Skamil
1731.4Skamil# SIGFPE
1741.4Skamil
1751.5Smartinfpe_available()
1761.5Smartin{
1771.5Smartin	if ${HELPER} fpe check > msg.$$
1781.5Smartin	then
1791.5Smartin		rm -f msg.$$
1801.5Smartin	else
1811.5Smartin		msg=$( cat msg.$$ )
1821.5Smartin		rm -f msg.$$
1831.5Smartin		atf_skip "$msg"
1841.5Smartin	fi
1851.5Smartin}
1861.5Smartin
1871.4Skamilatf_test_case fpe_simple
1881.4Skamilfpe_simple()
1891.4Skamil{
1901.4Skamil	atf_set "descr" "Test unhandled SIGFPE with the right exit code"
1911.4Skamil}
1921.4Skamilfpe_simple_body()
1931.4Skamil{
1941.5Smartin	fpe_available
1951.4Skamil	atf_check -s signal:8 -o "inline:" -e "inline:" \
1961.4Skamil		${HELPER} fpe recurse
1971.4Skamil}
1981.4Skamil
1991.4Skamilatf_test_case fpe_handle
2001.4Skamilfpe_handle()
2011.4Skamil{
2021.4Skamil	atf_set "descr" "Test handled SIGFPE traps call the signal handler"
2031.4Skamil}
2041.4Skamilfpe_handle_body()
2051.4Skamil{
2061.5Smartin	fpe_available
2071.4Skamil	atf_check -s exit:0 -o "inline:" -e "inline:got 8\n" \
2081.4Skamil		${HELPER} fpe handle
2091.4Skamil}
2101.4Skamil
2111.4Skamilatf_test_case fpe_mask
2121.4Skamilfpe_mask()
2131.4Skamil{
2141.4Skamil	atf_set "descr" "Test that masking the trapped SIGFPE signal get reset"
2151.4Skamil}
2161.4Skamilfpe_mask_body()
2171.4Skamil{
2181.5Smartin	fpe_available
2191.4Skamil	atf_check -s signal:8 -o "inline:" -e "inline:" \
2201.4Skamil		${HELPER} fpe mask
2211.4Skamil}
2221.4Skamil
2231.4Skamilatf_test_case fpe_handle_mask
2241.4Skamilfpe_handle_mask()
2251.4Skamil{
2261.4Skamil	atf_set "descr" "Test handled and masked SIGFPE traps get reset"
2271.4Skamil}
2281.4Skamilfpe_handle_mask_body()
2291.4Skamil{
2301.5Smartin	fpe_available
2311.4Skamil	atf_check -s signal:8 -o "inline:" -e "inline:" \
2321.4Skamil		${HELPER} fpe mask handle
2331.4Skamil}
2341.4Skamil
2351.4Skamilatf_test_case fpe_handle_recurse
2361.4Skamilfpe_handle_recurse()
2371.4Skamil{
2381.4Skamil	atf_set "descr" "Test that receiving SIGFPE in the handler resets"
2391.4Skamil}
2401.4Skamil
2411.4Skamilfpe_handle_recurse_body()
2421.4Skamil{
2431.5Smartin	fpe_available
2441.4Skamil	atf_check -s signal:8 -o "inline:" -e "inline:got 8\n" \
2451.4Skamil		${HELPER} fpe handle recurse
2461.4Skamil}
2471.4Skamil
2481.4Skamilatf_test_case fpe_ignore
2491.4Skamilfpe_ignore()
2501.4Skamil{
2511.4Skamil	atf_set "descr" "Test ignored trap with right exit code"
2521.4Skamil}
2531.4Skamil
2541.4Skamilfpe_ignore_body()
2551.4Skamil{
2561.5Smartin	fpe_available
2571.4Skamil	atf_check -s signal:8 -o "inline:" -e "inline:" \
2581.4Skamil		${HELPER} fpe ignore
2591.4Skamil}
2601.4Skamil
2611.4Skamil# SIGBUS
2621.4Skamil
2631.4Skamilatf_test_case bus_simple
2641.4Skamilbus_simple()
2651.4Skamil{
2661.4Skamil	atf_set "descr" "Test unhandled SIGBUS with the right exit code"
2671.4Skamil}
2681.4Skamilbus_simple_body()
2691.4Skamil{
2701.4Skamil	atf_check -s signal:10 -o "inline:" -e "inline:" \
2711.4Skamil		${HELPER} bus recurse
2721.4Skamil}
2731.4Skamil
2741.4Skamilatf_test_case bus_handle
2751.4Skamilbus_handle()
2761.4Skamil{
2771.4Skamil	atf_set "descr" "Test handled SIGBUS traps call the signal handler"
2781.4Skamil}
2791.4Skamilbus_handle_body()
2801.4Skamil{
2811.4Skamil	atf_check -s exit:0 -o "inline:" -e "inline:got 10\n" \
2821.4Skamil		${HELPER} bus handle
2831.4Skamil}
2841.4Skamil
2851.4Skamilatf_test_case bus_mask
2861.4Skamilbus_mask()
2871.4Skamil{
2881.4Skamil	atf_set "descr" "Test that masking the trapped SIGBUS signal get reset"
2891.4Skamil}
2901.4Skamilbus_mask_body()
2911.4Skamil{
2921.4Skamil	atf_check -s signal:10 -o "inline:" -e "inline:" \
2931.4Skamil		${HELPER} bus mask
2941.4Skamil}
2951.4Skamil
2961.4Skamilatf_test_case bus_handle_mask
2971.4Skamilbus_handle_mask()
2981.4Skamil{
2991.4Skamil	atf_set "descr" "Test handled and masked SIGBUS traps get reset"
3001.4Skamil}
3011.4Skamilbus_handle_mask_body()
3021.4Skamil{
3031.4Skamil	atf_check -s signal:10 -o "inline:" -e "inline:" \
3041.4Skamil		${HELPER} bus mask handle
3051.4Skamil}
3061.4Skamil
3071.4Skamilatf_test_case bus_handle_recurse
3081.4Skamilbus_handle_recurse()
3091.4Skamil{
3101.4Skamil	atf_set "descr" "Test that receiving SIGBUS in the handler resets"
3111.4Skamil}
3121.4Skamil
3131.4Skamilbus_handle_recurse_body()
3141.4Skamil{
3151.4Skamil	atf_check -s signal:10 -o "inline:" -e "inline:got 10\n" \
3161.4Skamil		${HELPER} bus handle recurse
3171.4Skamil}
3181.4Skamil
3191.4Skamilatf_test_case bus_ignore
3201.4Skamilbus_ignore()
3211.4Skamil{
3221.4Skamil	atf_set "descr" "Test ignored trap with right exit code"
3231.4Skamil}
3241.4Skamil
3251.4Skamilbus_ignore_body()
3261.4Skamil{
3271.4Skamil	atf_check -s signal:10 -o "inline:" -e "inline:" \
3281.4Skamil		${HELPER} bus ignore
3291.4Skamil}
3301.4Skamil
3311.1Schristosatf_init_test_cases()
3321.1Schristos{
3331.3Skamil	atf_add_test_case segv_simple
3341.3Skamil	atf_add_test_case segv_handle
3351.3Skamil	atf_add_test_case segv_mask
3361.3Skamil	atf_add_test_case segv_handle_recurse
3371.3Skamil	atf_add_test_case segv_ignore
3381.3Skamil
3391.1Schristos	atf_add_test_case trap_simple
3401.1Schristos	atf_add_test_case trap_handle
3411.1Schristos	atf_add_test_case trap_mask
3421.1Schristos	atf_add_test_case trap_handle_recurse
3431.2Skamil	atf_add_test_case trap_ignore
3441.4Skamil
3451.4Skamil#	atf_add_test_case ill_simple
3461.4Skamil#	atf_add_test_case ill_handle
3471.4Skamil#	atf_add_test_case ill_mask
3481.4Skamil#	atf_add_test_case ill_handle_recurse
3491.4Skamil#	atf_add_test_case ill_ignore
3501.4Skamil
3511.4Skamil	atf_add_test_case fpe_simple
3521.4Skamil	atf_add_test_case fpe_handle
3531.4Skamil	atf_add_test_case fpe_mask
3541.4Skamil	atf_add_test_case fpe_handle_recurse
3551.4Skamil	atf_add_test_case fpe_ignore
3561.4Skamil
3571.4Skamil	atf_add_test_case bus_simple
3581.4Skamil	atf_add_test_case bus_handle
3591.4Skamil	atf_add_test_case bus_mask
3601.4Skamil	atf_add_test_case bus_handle_recurse
3611.4Skamil	atf_add_test_case bus_ignore
3621.1Schristos}
363