diff --git a/cmd/cli/loop_test.go b/cmd/cli/loop_test.go index e8cfb2a..b2c8404 100644 --- a/cmd/cli/loop_test.go +++ b/cmd/cli/loop_test.go @@ -2,6 +2,7 @@ package cli import ( "sync" + "sync/atomic" "testing" ) @@ -9,16 +10,19 @@ func Test_loopGuard(t *testing.T) { lg := newLoopGuard() key := "foo" - var mu sync.Mutex - i := 0 + var i atomic.Int64 + var started atomic.Int64 n := 1000 do := func() { locked := lg.TryLock(key) defer lg.Unlock(key) + started.Add(1) + for started.Load() < 2 { + // Wait until at least 2 goroutines started, otherwise, on system with heavy load, + // or having only 1 CPU, all goroutines can be scheduled to run consequently. + } if locked { - mu.Lock() - i++ - mu.Unlock() + i.Add(1) } } @@ -32,7 +36,7 @@ func Test_loopGuard(t *testing.T) { } wg.Wait() - if i == n { + if i.Load() == int64(n) { t.Fatalf("i must not be increased %d times", n) } }