diff options
author | Pádraig Brady <P@draigBrady.com> | 2019-03-06 20:09:16 -0800 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2019-03-06 22:00:53 -0800 |
commit | b918a20234db81055f1e804fcd77378a246ddd98 (patch) | |
tree | bffbd88352be61e46c8641fcb90b4588361cacf7 | |
parent | bf2f64c7d5aaefb9cfa078a43cb7fa20a9612ed3 (diff) | |
download | coreutils-b918a20234db81055f1e804fcd77378a246ddd98.tar.gz |
tests: test-N: fix false positives on some systems
Testing by Assaf Gordon on OSX showed the atime wasn't
being updated when explicitly set back in time.
Also Debian 8.11 / mips64 was seen to not update the
mtime when truncating an empty file.
* tests/misc/test-N.sh: Isolate from different timestamping
behaviors of various (file) systems, by correlating
the timestamps with stat(1) before using `test -N`.
-rwxr-xr-x | tests/misc/test-N.sh | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/tests/misc/test-N.sh b/tests/misc/test-N.sh index 348139b9f..e4a95c81d 100755 --- a/tests/misc/test-N.sh +++ b/tests/misc/test-N.sh @@ -17,26 +17,34 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src -print_ver_ test +print_ver_ test stat + +stat_mtime() { env stat -c '%Y' "$1"; } +stat_atime() { env stat -c '%X' "$1"; } +stat_test_N() { env test "$(stat_mtime "$1")" -gt "$(stat_atime "$1")"; } # For a freshly touched file, atime should equal mtime: 'test -N' returns 1. touch file || framework_failure_ -stat file -returns_ 1 env test -N file || fail=1 +if ! stat_test_N file; then + returns_ 1 env test -N file || fail=1 +fi # Set access time to 2 days ago: 'test -N' returns 0. -touch -a -d "12:00 today -2 days" file || framework_failure_ -stat file -env test -N file || fail=1 +touch -a -d '12:00 today -2 days' file || framework_failure_ +if stat_test_N file; then + env test -N file || fail=1 +fi # Set mtime to 2 days before atime: 'test -N' returns 1; -touch -m -d "12:00 today -4 days" file || framework_failure_ -stat file -returns_ 1 env test -N file || fail=1 +touch -m -d '12:00 today -4 days' file || framework_failure_ +if ! stat_test_N file; then + returns_ 1 env test -N file || fail=1 +fi # Now modify the file: 'test -N' returns 0. -> file || framework_failure_ -stat file -env test -N file || fail=1 +echo 'data' > file || framework_failure_ +if stat_test_N file; then + env test -N file || fail=1 +fi Exit $fail |