From f4393eaa31ec4e4f86ec2fc62a833e201ed6d81c Mon Sep 17 00:00:00 2001 From: "Paul \"TBBle\" Hampson" Date: Wed, 29 Jul 2020 06:51:41 +1000 Subject: [PATCH] Ensure that time has passed between foo0 and foo1 On Windows, the resolution of time.Now() can be surprisingly low: 15ms according to the comments in the source of time.Now(). Signed-off-by: Paul "TBBle" Hampson --- .github/workflows/windows.yaml | 2 +- solver/testutil/cachestorage_testsuite.go | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/windows.yaml b/.github/workflows/windows.yaml index fe6a1eb7a..8c6cf06bf 100644 --- a/.github/workflows/windows.yaml +++ b/.github/workflows/windows.yaml @@ -39,5 +39,5 @@ jobs: - name: Unit test env: SKIP_INTEGRATION_TESTS: 1 - run: go test -mod=vendor -v ./cache/... ./client/... ./frontend/dockerfile/... ./session/... ./source/... ./util/... + run: go test -mod=vendor -v ./cache/... ./client/... ./frontend/dockerfile/... ./session/... ./solver/... ./source/... ./util/... working-directory: src/github.com/moby/buildkit diff --git a/solver/testutil/cachestorage_testsuite.go b/solver/testutil/cachestorage_testsuite.go index 41e94d3fa..e883ddd2a 100644 --- a/solver/testutil/cachestorage_testsuite.go +++ b/solver/testutil/cachestorage_testsuite.go @@ -37,12 +37,20 @@ func runStorageTest(t *testing.T, fn func(t *testing.T, st solver.CacheKeyStorag func testResults(t *testing.T, st solver.CacheKeyStorage) { t.Parallel() + timeNow := time.Now() err := st.AddResult("foo", solver.CacheResult{ ID: "foo0", - CreatedAt: time.Now(), + CreatedAt: timeNow, }) require.NoError(t, err) + // Windows time.Now() resolution can be quite coarse, so frequently + // time.Now() will be the same between two nearby calls. + if time.Now() == timeNow { + time.Sleep(time.Duration(100) * time.Millisecond) + } + require.NotEqual(t, timeNow, time.Now(), "time has stopped") + err = st.AddResult("foo", solver.CacheResult{ ID: "foo1", CreatedAt: time.Now(), @@ -67,7 +75,7 @@ func testResults(t *testing.T, st solver.CacheKeyStorage) { require.True(t, ok) f1, ok := m["foo1"] require.True(t, ok) - require.True(t, f0.CreatedAt.Before(f1.CreatedAt)) + require.True(t, f0.CreatedAt.Before(f1.CreatedAt), "f0.CreatedAt %v was not Before f1.CreatedAt %v", f0.CreatedAt, f1.CreatedAt) m = map[string]solver.CacheResult{} err = st.WalkResults("bar", func(r solver.CacheResult) error {