From 99547518cd78ddda225f5b60a2a865a2a6898a4c Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Sat, 15 Oct 2022 22:02:11 +0200 Subject: [PATCH] lock: fix flaky TestLockFailedRefresh The comparison of the current time and the last lock refresh were using seconds represented as integers. As the test only waits for up to one second, the associated number truncation can cause the test to take longer than once second and thus to fail. Switch to nanoseconds to avoid this problem. This also slightly speeds up the test. --- cmd/restic/lock.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/restic/lock.go b/cmd/restic/lock.go index 43bc22b4a..cbca0acf6 100644 --- a/cmd/restic/lock.go +++ b/cmd/restic/lock.go @@ -121,7 +121,7 @@ func refreshLocks(ctx context.Context, lock *restic.Lock, lockInfo *lockContext, func monitorLockRefresh(ctx context.Context, lock *restic.Lock, lockInfo *lockContext, refreshed <-chan struct{}) { // time.Now() might use a monotonic timer which is paused during standby // convert to unix time to ensure we compare real time values - lastRefresh := time.Now().Unix() + lastRefresh := time.Now().UnixNano() pollDuration := 1 * time.Second if refreshInterval < pollDuration { // require for TestLockFailedRefresh @@ -145,7 +145,7 @@ func monitorLockRefresh(ctx context.Context, lock *restic.Lock, lockInfo *lockCo case <-refreshed: lastRefresh = time.Now().Unix() case <-timer.C: - if float64(time.Now().Unix()-lastRefresh) < refreshabilityTimeout.Seconds() { + if time.Now().UnixNano()-lastRefresh < refreshabilityTimeout.Nanoseconds() { // restart timer timer.Reset(pollDuration) continue