]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: test-N: fix false positives on some systems
authorPádraig Brady <P@draigBrady.com>
Thu, 7 Mar 2019 04:09:16 +0000 (20:09 -0800)
committerPádraig Brady <P@draigBrady.com>
Thu, 7 Mar 2019 06:00:53 +0000 (22:00 -0800)
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

index 348139b9f15d2f0fd6456fb0c139d18cd1195b54..e4a95c81d02e3b9610af24aa383a821e418d936c 100755 (executable)
 # 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