>From 1a02a3add05b9a2a46d87c660f58cdfc0fa5640e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?=
Date: Wed, 6 Mar 2019 20:09:16 -0800
Subject: [PATCH] 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`.
---
tests/misc/test-N.sh | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/tests/misc/test-N.sh b/tests/misc/test-N.sh
index 348139b..0b1ccfe 100755
--- a/tests/misc/test-N.sh
+++ b/tests/misc/test-N.sh
@@ -17,26 +17,36 @@
# along with this program. If not, see .
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ test
+print_ver_ test stat
+
+stat_test_N() { env test "$(stat -c '%Y' "$1")" -gt "$(stat -c '%X' "$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
+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
+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_
+echo 'data' > file || framework_failure_
stat file
-env test -N file || fail=1
+if stat_test_N file; then
+ env test -N file || fail=1
+fi
Exit $fail
--
2.9.3