aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar Laszlo Csomor <laszlocsomor@google.com>2018-03-09 04:51:38 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-09 04:53:21 -0800
commita31e035fb42aa8db9fd248ef2ebd665a411053b8 (patch)
treed14b8813a8f2c30af5c871d035c7473dcfbd0f4f /src/test
parenta278aec030ec67acc6c383e83364ce6062e59c11 (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')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java15
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);