From: Pádraig Brady Date: Mon, 10 Mar 2025 12:33:20 +0000 (+0000) Subject: tests: dd: ensure posix_fadvise errors are handled X-Git-Tag: v9.7~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b0887fdd507337c58ba964c283d73336a8da2cc;p=thirdparty%2Fcoreutils.git tests: dd: ensure posix_fadvise errors are handled * tests/dd/nocache_fail.sh: Add a test case for the recent fix. --- diff --git a/tests/dd/nocache_fail.sh b/tests/dd/nocache_fail.sh new file mode 100755 index 0000000000..4d30c8558d --- /dev/null +++ b/tests/dd/nocache_fail.sh @@ -0,0 +1,56 @@ +#!/bin/sh +# Ensure we diagnose failure to drop caches +# We didn't check the return from posix_fadvise() correctly before v9.7 + +# Copyright (C) 2025 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src +print_ver_ dd +require_gcc_shared_ + +# Replace each getxattr and lgetxattr call with a call to these stubs. +# Count those and write the total number of calls to the file "x" +# via a global destructor. +cat > k.c <<'EOF' || framework_failure_ +#include +#include +#include +#include + +int posix_fadvise (int fd, off_t offset, off_t len, int advice) +{ + fopen ("called", "w"); + return ENOTSUP; /* Simulate non standard error indication. */ +} +EOF + +# Then compile/link it: +gcc_shared_ k.c k.so \ + || framework_failure_ 'failed to build shared library' + +touch ifile || framework_failure_ + +LD_PRELOAD=$LD_PRELOAD:./k.so dd if=ifile iflag=nocache count=0 2>err +ret=$? + +test -f called || skip_ "internal test failure: maybe LD_PRELOAD doesn't work?" + +grep 'dd: failed to discard cache for: ifile' err || fail=1 + +# Ensure that the dd command failed +test "$ret" = 1 || fail=1 + +Exit $fail diff --git a/tests/local.mk b/tests/local.mk index 12e30b449b..4da6756ac6 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -553,6 +553,7 @@ all_tests = \ tests/dd/no-allocate.sh \ tests/dd/nocache.sh \ tests/dd/nocache_eof.sh \ + tests/dd/nocache_fail.sh \ tests/dd/not-rewound.sh \ tests/dd/reblock.sh \ tests/dd/skip-seek.pl \