Download raw body.
patch: regress: Work around glitchy clocks in vmm guests
Some tests fail intermittently in vmm because the clock does not
advance between steps, resulting in files that should have a newer
mtime than the repo metadata but don't. Example failure:
test_status_shows_local_mods_after_update --- /tmp/got-test-status_shows_local_mods_after_update-duAj87aL/stdout.expected Sun Sep 29 00:18:36 2019
+++ /tmp/got-test-status_shows_local_mods_after_update-duAj87aL/stdout Sun Sep 29 00:18:36 2019
@@ -1 +0,0 @@
-M numbers
test failed; leaving test data in /tmp/got-test-status_shows_local_mods_after_update-duAj87aL
Comparing the mtime on the 'numbers' file with that in .got/file-index
shows that the timestamps are identical, which is why got does not
treat this file as modified.
This intermittent behaviour can be observed outside the context of got
(here, x is a small program that just calls stat(2) on foo and displays
the mtime):
$ echo a >foo; ./x; echo b >foo; ./x
1569708831.911759175
1569708831.931539267
$ echo a >foo; ./x; echo b >foo; ./x
1569708832.741842903
1569708832.741842903
This is unlikely to be a problem in real-world usage because humans
aren't as fast as these regression tests, so I think working around it
in the tests is sufficient.
The below diff makes this work consistently; sleeping for a nanosecond
is sufficient because we just need the clock to advance by any amount
at all.
Better suggestions/OKs?
diff --git a/regress/cmdline/commit.sh b/regress/cmdline/commit.sh
index 55340c7..3413152 100755
--- a/regress/cmdline/commit.sh
+++ b/regress/cmdline/commit.sh
@@ -262,6 +262,7 @@ function test_commit_rejects_conflicted_file {
git_show_head $testroot/repo >> $testroot/stdout.expected
echo >> $testroot/stdout.expected
+ sleep 0.000000001 # vmm clock workaround
(cd $testroot/wt && got update > $testroot/stdout)
cmp -s $testroot/stdout.expected $testroot/stdout
diff --git a/regress/cmdline/diff.sh b/regress/cmdline/diff.sh
index 455469c..2036892 100755
--- a/regress/cmdline/diff.sh
+++ b/regress/cmdline/diff.sh
@@ -121,6 +121,7 @@ function test_diff_shows_conflict {
echo -n "Updated to commit $head_rev" >> $testroot/stdout.expected
echo >> $testroot/stdout.expected
+ sleep 0.000000001 # vmm clock workaround
(cd $testroot/wt && got update > $testroot/stdout)
cmp -s $testroot/stdout.expected $testroot/stdout
diff --git a/regress/cmdline/stage.sh b/regress/cmdline/stage.sh
index c847136..703285f 100755
--- a/regress/cmdline/stage.sh
+++ b/regress/cmdline/stage.sh
@@ -253,6 +253,7 @@ function test_stage_conflict {
git_show_head $testroot/repo >> $testroot/stdout.expected
echo >> $testroot/stdout.expected
+ sleep 0.000000001 # vmm clock workaround
(cd $testroot/wt && got update > $testroot/stdout)
cmp -s $testroot/stdout.expected $testroot/stdout
@@ -1241,6 +1242,7 @@ function test_stage_commit_out_of_date {
fi
(cd $testroot/wt && got unstage > /dev/null)
+ sleep 0.000000001 # vmm clock workaround
(cd $testroot/wt && got update > $testroot/stdout)
ret="$?"
if [ "$ret" != "0" ]; then
@@ -1306,6 +1308,7 @@ function test_stage_commit {
echo "modified file" > $testroot/wt/alpha
(cd $testroot/wt && got stage alpha beta foo > /dev/null)
+ sleep 0.000000001 # vmm clock workaround
echo "modified file again" > $testroot/wt/alpha
echo "new file changed" > $testroot/wt/foo
echo "non-staged change" > $testroot/wt/gamma/delta
diff --git a/regress/cmdline/status.sh b/regress/cmdline/status.sh
index 5fde224..c8ed4a7 100755
--- a/regress/cmdline/status.sh
+++ b/regress/cmdline/status.sh
@@ -188,6 +188,7 @@ function test_status_shows_local_mods_after_update {
git_show_head $testroot/repo >> $testroot/stdout.expected
echo >> $testroot/stdout.expected
+ sleep 0.000000001 # vmm clock workaround
(cd $testroot/wt && got update > $testroot/stdout)
cmp -s $testroot/stdout.expected $testroot/stdout
@@ -319,6 +320,7 @@ function test_status_shows_no_mods_after_complete_merge {
git_show_head $testroot/repo >> $testroot/stdout.expected
echo >> $testroot/stdout.expected
+ sleep 0.000000001 # vmm clock workaround
(cd $testroot/wt && got update > $testroot/stdout)
cmp -s $testroot/stdout.expected $testroot/stdout
@@ -373,6 +375,7 @@ function test_status_shows_conflict {
git_show_head $testroot/repo >> $testroot/stdout.expected
echo >> $testroot/stdout.expected
+ sleep 0.000000001 # vmm clock workaround
(cd $testroot/wt && got update > $testroot/stdout)
cmp -s $testroot/stdout.expected $testroot/stdout
patch: regress: Work around glitchy clocks in vmm guests