Fix coredump_phnum_test when kern.compress_user_cores != 0

If `kern.compress_user_cores` is non-zero, decompress the core file.

Use `sysctl -f` to restore previous values.

Don't bother restoring `ulimit -c`, since that's a per-process value.

Check more commands with `atf_check`.

Reviewed by:	olivier ngie
MFC after:	1 week
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D21820
This commit is contained in:
Eric van Gyzen 2019-09-30 14:05:44 +00:00
parent 11fd6a60e7
commit 2b2ad2d6c6

View File

@ -40,21 +40,31 @@ coredump_phnum_head()
coredump_phnum_body() coredump_phnum_body()
{ {
# Set up core dumping # Set up core dumping
cat > coredump_phnum_restore_state.sh <<-EOF atf_check -o save:coredump_phnum_restore_state sysctl -e \
#!/bin/sh kern.coredump kern.corefile
ulimit -c '$(ulimit -c)'
sysctl kern.coredump=$(sysctl -n kern.coredump)
sysctl kern.corefile='$(sysctl -n kern.corefile)'
sysctl kern.compress_user_cores='$(sysctl -n kern.compress_user_cores)'
EOF
ulimit -c unlimited ulimit -c unlimited
sysctl kern.coredump=1 atf_check -o ignore sysctl kern.coredump=1
sysctl kern.compress_user_cores=0 atf_check -o ignore sysctl kern.corefile=coredump_phnum_helper.core
sysctl kern.corefile="$(pwd)/coredump_phnum_helper.core" atf_check -o save:cuc sysctl -n kern.compress_user_cores
read cuc < cuc
atf_check -s signal:sigabrt "$(atf_get_srcdir)/coredump_phnum_helper" atf_check -s signal:sigabrt "$(atf_get_srcdir)/coredump_phnum_helper"
case "$cuc" in
0)
;;
1)
atf_check gunzip coredump_phnum_helper.core.gz
;;
2)
atf_check zstd -qd coredump_phnum_helper.core.zst
;;
*)
atf_skip "unsupported kern.compress_user_cores=$cuc"
;;
esac
# Check that core looks good # Check that core looks good
if [ ! -f coredump_phnum_helper.core ]; then if [ ! -f coredump_phnum_helper.core ]; then
atf_fail "Helper program did not dump core" atf_fail "Helper program did not dump core"
@ -76,10 +86,11 @@ EOF
coredump_phnum_cleanup() coredump_phnum_cleanup()
{ {
rm -f coredump_phnum_helper.core rm -f coredump_phnum_helper.core
if [ -f coredump_phnum_restore_state.sh ]; then if [ -f coredump_phnum_restore_state ]; then
. ./coredump_phnum_restore_state.sh sysctl -f coredump_phnum_restore_state
rm -f coredump_phnum_restore_state
fi fi
rm -f coredump_phnum_restore_state.sh rm -f cuc
} }
atf_init_test_cases() atf_init_test_cases()