diff options
Diffstat (limited to 'bin/dd/tests')
-rw-r--r-- | bin/dd/tests/Makefile | 1 | ||||
-rw-r--r-- | bin/dd/tests/Makefile.depend | 1 | ||||
-rwxr-xr-x | bin/dd/tests/dd2_test.sh | 92 |
3 files changed, 60 insertions, 34 deletions
diff --git a/bin/dd/tests/Makefile b/bin/dd/tests/Makefile index 029808e6eb28..e0d924f6d13f 100644 --- a/bin/dd/tests/Makefile +++ b/bin/dd/tests/Makefile @@ -1,4 +1,3 @@ -# $FreeBSD$ ATF_TESTS_SH= dd2_test NETBSD_ATF_TESTS_SH= dd_test diff --git a/bin/dd/tests/Makefile.depend b/bin/dd/tests/Makefile.depend index f80275d86ab1..11aba52f82cf 100644 --- a/bin/dd/tests/Makefile.depend +++ b/bin/dd/tests/Makefile.depend @@ -1,4 +1,3 @@ -# $FreeBSD$ # Autogenerated - do NOT edit! DIRDEPS = \ diff --git a/bin/dd/tests/dd2_test.sh b/bin/dd/tests/dd2_test.sh index c0b33fc17226..c4a3065763cd 100755 --- a/bin/dd/tests/dd2_test.sh +++ b/bin/dd/tests/dd2_test.sh @@ -1,30 +1,9 @@ # # Copyright (c) 2017 Spectra Logic Corporation -# All rights reserved. +# Copyright (c) 2023 Klara, Inc. # -# 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. +# SPDX-License-Identifier: BSD-2-Clause # -# 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. -# -# $FreeBSD$ - atf_test_case max_seek max_seek_head() @@ -33,17 +12,23 @@ max_seek_head() } max_seek_body() { - case `df -T . | tail -n 1 | cut -wf 2` in - "ufs") - atf_skip "UFS's maximum file size is too small";; - "zfs") ;; # ZFS is fine - "tmpfs") - atf_skip "tmpfs can't create arbitrarily large spare files";; - *) atf_skip "Unknown file system";; + case $(df -T . | tail -n 1 | cut -wf 2) in + "ufs") + atf_skip "UFS's maximum file size is too small" + ;; + "zfs") + # ZFS is fine + ;; + "tmpfs") + atf_skip "tmpfs can't create arbitrarily large sparse files" + ;; + *) + atf_skip "Unknown file system" + ;; esac touch f.in - seek=`echo "2^63 / 4096 - 1" | bc` + seek=$(bc -e "2^63 / 4096 - 1") atf_check -s exit:0 -e ignore dd if=f.in of=f.out bs=4096 seek=$seek } @@ -55,15 +40,58 @@ seek_overflow_head() seek_overflow_body() { touch f.in - seek=`echo "2^63 / 4096" | bc` + seek=$(bc -e "2^63 / 4096") atf_check -s not-exit:0 -e match:"seek offsets cannot be larger than" \ dd if=f.in of=f.out bs=4096 seek=$seek atf_check -s not-exit:0 -e match:"seek offsets cannot be larger than" \ dd if=f.in of=f.out bs=4096 seek=-1 } +atf_test_case sigint +sigint_open_head() +{ + atf_set "descr" "SIGINT while opening destination" +} +sigint_open_body() +{ + atf_check mkfifo fifo + set -m + dd if=fifo of=/dev/null 2>stderr & + pid=$! + sleep 3 + kill -INT $pid + wait $pid + rv=$? + atf_check test "$rv" -gt 128 + atf_check -o inline:"INT\n" kill -l $((rv-128)) + atf_check test -s stderr +} + +atf_test_case sigint +sigint_read_head() +{ + atf_set "descr" "SIGINT while reading source" +} +sigint_read_body() +{ + atf_check mkfifo fifo + (sleep 30 >fifo &) # ensures that dd does not block on open + set -m + dd if=fifo of=/dev/null 2>stderr & + pid=$! + sleep 3 + kill -INT $pid + wait $pid + rv=$? + atf_check test "$rv" -gt 128 + atf_check -o inline:"INT\n" kill -l $((rv-128)) + atf_check test -s stderr +} + atf_init_test_cases() { atf_add_test_case max_seek atf_add_test_case seek_overflow + atf_add_test_case sigint_open + atf_add_test_case sigint_read } |