cp: Add tests involving sparse files.

MFC after:	1 week
Sponsored by:	Klara, Inc.
Reviewed by:	markj
Differential Revision:	https://reviews.freebsd.org/D38290
This commit is contained in:
Dag-Erling Smørgrav 2023-02-01 21:06:24 +01:00
parent 606d0e4a9a
commit 822fa7ae1e

View file

@ -199,6 +199,91 @@ recursive_link_Lflag_body()
'(' ! -L foo-mirror/foo/baz ')'
}
file_is_sparse()
{
atf_check test "$(stat -f "%b" "$1")" != "$(stat -f "%z" "$1")"
}
files_are_equal()
{
atf_check test "$(stat -f "%d %i" "$1")" != "$(stat -f "%d %i" "$2")"
atf_check cmp "$1" "$2"
}
atf_test_case sparse_leading_hole
sparse_leading_hole_body()
{
# A one-megabyte hole followed by one megabyte of data
truncate -s 1M foo
seq -f%015g 65536 >>foo
file_is_sparse foo
atf_check cp foo bar
files_are_equal foo bar
file_is_sparse bar
}
atf_test_case sparse_multiple_holes
sparse_multiple_holes_body()
{
# Three one-megabyte blocks of data preceded, separated, and
# followed by one-megabyte holes
truncate -s 1M foo
seq -f%015g >>foo
truncate -s 3M foo
seq -f%015g >>foo
truncate -s 5M foo
seq -f%015g >>foo
truncate -s 7M foo
file_is_sparse foo
atf_check cp foo bar
files_are_equal foo bar
file_is_sparse bar
}
atf_test_case sparse_only_hole
sparse_only_hole_body()
{
# A one-megabyte hole
truncate -s 1M foo
file_is_sparse foo
atf_check cp foo bar
files_are_equal foo bar
file_is_sparse bar
}
atf_test_case sparse_to_dev
sparse_to_dev_body()
{
# Three one-megabyte blocks of data preceded, separated, and
# followed by one-megabyte holes
truncate -s 1M foo
seq -f%015g >>foo
truncate -s 3M foo
seq -f%015g >>foo
truncate -s 5M foo
seq -f%015g >>foo
truncate -s 7M foo
file_is_sparse foo
atf_check -o file:foo cp foo /dev/stdout
}
atf_test_case sparse_trailing_hole
sparse_trailing_hole_body()
{
# One megabyte of data followed by a one-megabyte hole
seq -f%015g 65536 >foo
truncate -s 2M foo
file_is_sparse foo
atf_check cp foo bar
files_are_equal foo bar
file_is_sparse bar
}
atf_test_case standalone_Pflag
standalone_Pflag_body()
{
@ -221,5 +306,10 @@ atf_init_test_cases()
atf_add_test_case recursive_link_dflt
atf_add_test_case recursive_link_Hflag
atf_add_test_case recursive_link_Lflag
atf_add_test_case sparse_leading_hole
atf_add_test_case sparse_multiple_holes
atf_add_test_case sparse_only_hole
atf_add_test_case sparse_to_dev
atf_add_test_case sparse_trailing_hole
atf_add_test_case standalone_Pflag
}