From: Eric Blake Date: Sat, 10 Oct 2009 03:09:38 +0000 (-0600) Subject: test-stat-time: port to buggy NFS clients X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9f3206eb29d0f56a6509c727fe8df2ddb002e71;p=pspp test-stat-time: port to buggy NFS clients On darwin, the NFS client reports mtime with st_sec==INT_MAX and st_nsec monotonically increasing per transaction until the next sync(); but sync() is expensive, so it is easier to just skip this part of the test if mtime is nowhere near ctime. * tests/test-stat-time.c (main) [W32]: Reduce ifdefs. (test_ctime): Also skip test if mtime and ctime are skewed. Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index 61e6168bc8..90c436b411 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-10-09 Eric Blake + test-stat-time: port to buggy NFS clients + * tests/test-stat-time.c (main) [W32]: Reduce ifdefs. + (test_ctime): Also skip test if mtime and ctime are skewed. + maint: prefer 'file system' over 'filesystem' * doc/posix-functions/fstatat.texi (fstatat): Likewise. * doc/posix-functions/lstat.texi (lstat): Likewise. diff --git a/tests/test-stat-time.c b/tests/test-stat-time.c index 77b99a46f8..375902499a 100644 --- a/tests/test-stat-time.c +++ b/tests/test-stat-time.c @@ -186,10 +186,21 @@ test_mtime (const struct stat *statinfo, struct timespec *modtimes) } } -#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) +#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ +/* Skip the ctime tests on native Windows platforms, because their + st_ctime is either the same as st_mtime (plus or minus an offset) + or set to the file _creation_ time, and is not influenced by rename + or chmod. */ +# define test_ctime ((void) 0) +#else static void test_ctime (const struct stat *statinfo) { + /* On some buggy NFS clients, mtime and ctime are disproportionately + skewed from one another. Skip this test in that case. */ + if (statinfo[0].st_mtime != statinfo[0].st_ctime) + return; + /* mtime(stamp2) < ctime(renamed) */ ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime || (statinfo[2].st_mtime == statinfo[1].st_ctime @@ -246,12 +257,7 @@ main () cleanup (0); prepare_test (statinfo, modtimes); test_mtime (statinfo, modtimes); - /* Skip the ctime tests on native Windows platforms, because there st_ctime - is either the same as st_mtime (plus or minus an offset) or set to the - file _creation_ time, and is not influenced by rename or chmod. */ -#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) test_ctime (statinfo); -#endif test_birthtime (statinfo, modtimes, birthtimes); cleanup (0);