aboutsummaryrefslogtreecommitdiff
path: root/bin/dd/tests
diff options
context:
space:
mode:
Diffstat (limited to 'bin/dd/tests')
-rw-r--r--bin/dd/tests/Makefile1
-rw-r--r--bin/dd/tests/Makefile.depend1
-rwxr-xr-xbin/dd/tests/dd2_test.sh92
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
}