diff options
author | Laszlo Csomor <laszlocsomor@google.com> | 2018-03-09 04:51:38 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-09 04:53:21 -0800 |
commit | a31e035fb42aa8db9fd248ef2ebd665a411053b8 (patch) | |
tree | d14b8813a8f2c30af5c871d035c7473dcfbd0f4f /src/test/java/com/google/devtools | |
parent | a278aec030ec67acc6c383e83364ce6062e59c11 (diff) |
tests: fix flaky RecursiveFSTraversalFunctionTest
Fix the testTraversalOfGeneratedDirectory method
in RecursiveFilesystemTraversalFunctionTest that
was flaky on Windows.
The fix is to wait so that changes to files in the
InMemoryFileSystem will have observable effects on
the file ctimes.
Depends on https://github.com/bazelbuild/bazel/pull/4787
Fixes https://github.com/bazelbuild/bazel/issues/4755
Closes #4788.
PiperOrigin-RevId: 188470080
Diffstat (limited to 'src/test/java/com/google/devtools')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java index 719195dbc5..2a2b408bde 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.util.AnalysisMock; +import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; @@ -44,6 +45,8 @@ import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalFuncti import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFile; import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.TraversalRequest; import com.google.devtools.build.lib.testutil.FoundationTestCase; +import com.google.devtools.build.lib.util.io.OutErr; +import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.Root; @@ -277,8 +280,6 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe // Strip metadata so only the type and path of the objects are compared. actual.add(act.stripMetadataForTesting()); } - // First just assert equality of the keys, so in case of a mismatch the error message is easier - // to read. assertThat(actual).containsExactly((Object[]) expectedFilesIgnoringMetadata); // The returned object still has the unstripped metadata. @@ -480,6 +481,10 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe progressReceiver.clear(); // Add a new file to the directory and see that the value is rebuilt. + TimestampGranularityMonitor.waitForTimestampGranularity( + directoryArtifact.getPath().stat().getLastChangeTime(), + BlazeClock.instance(), + OutErr.SYSTEM_OUT_ERR); RootedPath file3 = createFile(childOf(directoryArtifact, "foo.txt")); if (directoryArtifact.isSourceArtifact()) { invalidateDirectory(directoryArtifact); @@ -827,9 +832,9 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe progressReceiver.clear(); // Change the mtime of the file but not the digest. See that the value is *not* rebuilt. - long mtime = path.asPath().getLastModifiedTime(); - mtime += 1000000L; // more than the timestamp granularity of any filesystem - path.asPath().setLastModifiedTime(mtime); + TimestampGranularityMonitor.waitForTimestampGranularity( + path.asPath().stat().getLastChangeTime(), BlazeClock.instance(), OutErr.SYSTEM_OUT_ERR); + path.asPath().setLastModifiedTime(System.currentTimeMillis()); RecursiveFilesystemTraversalValue v2 = traverseAndAssertFiles(params, expected); assertThat(v2).isEqualTo(v1); assertTraversalRootHashesAreEqual(v1, v2); |