Fixed two Bazel java tests on Windows by using the right native file system
Newly passing:
//src/test/java/com/google/devtools/build/...
lib/skyframe:SkyframeTests
lib:actions_test
Also refactored FileSystems.java
--
Change-Id: I03ab9db5c1ab5e5be4ff1efbc5cf2d280084254a
Reviewed-on: https://bazel-review.googlesource.com/#/c/3843
MOS_MIGRATED_REVID=125449456
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemConcurrencyTest.java b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemConcurrencyTest.java
index 0ae1a25..2d6308f 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemConcurrencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemConcurrencyTest.java
@@ -36,7 +36,7 @@
@Before
public final void initializeFileSystem() throws Exception {
- FileSystem testFS = FileSystems.initDefaultAsNative();
+ FileSystem testFS = FileSystems.getNativeFileSystem();
// Resolve symbolic links in the temp dir:
workingDir = testFS.getPath(new File(TestUtils.tmpDir()).getCanonicalPath());
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemsTest.java b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemsTest.java
index 5e10a3e..1e250a0 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemsTest.java
@@ -30,19 +30,19 @@
@Test
public void testFileSystemsCreatesOnlyOneDefaultNative() {
- assertSame(FileSystems.initDefaultAsNative(),
- FileSystems.initDefaultAsNative());
+ assertSame(FileSystems.getNativeFileSystem(),
+ FileSystems.getNativeFileSystem());
}
@Test
public void testFileSystemsCreatesOnlyOneDefaultJavaIo() {
- assertSame(FileSystems.initDefaultAsJavaIo(),
- FileSystems.initDefaultAsJavaIo());
+ assertSame(FileSystems.getJavaIoFileSystem(),
+ FileSystems.getJavaIoFileSystem());
}
@Test
public void testFileSystemsCanSwitchDefaults() {
- assertNotSame(FileSystems.initDefaultAsNative(),
- FileSystems.initDefaultAsJavaIo());
+ assertNotSame(FileSystems.getNativeFileSystem(),
+ FileSystems.getJavaIoFileSystem());
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathGetParentTest.java b/src/test/java/com/google/devtools/build/lib/vfs/UnixPathGetParentTest.java
index db0cad3..d4719f6 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathGetParentTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/UnixPathGetParentTest.java
@@ -38,7 +38,7 @@
@Before
public final void createTestRoot() throws Exception {
- unixFs = FileSystems.initDefaultAsNative();
+ unixFs = FileSystems.getNativeFileSystem();
testRoot = unixFs.getPath(TestUtils.tmpDir()).getRelative("UnixPathGetParentTest");
FileSystemUtils.createDirectoryAndParents(testRoot);
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathTest.java b/src/test/java/com/google/devtools/build/lib/vfs/UnixPathTest.java
index cd174c6..2be5055 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnixPathTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/UnixPathTest.java
@@ -53,7 +53,7 @@
private File tmpDir;
protected FileSystem getUnixFileSystem() {
- return FileSystems.initDefaultAsNative();
+ return FileSystems.getNativeFileSystem();
}
@Before
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/ZipFileSystemTest.java b/src/test/java/com/google/devtools/build/lib/vfs/ZipFileSystemTest.java
index 8ff07bc..bbe4129 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/ZipFileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/ZipFileSystemTest.java
@@ -60,7 +60,7 @@
@Before
public final void initializeFileSystems() throws Exception {
- FileSystem unixFs = FileSystems.initDefaultAsNative();
+ FileSystem unixFs = FileSystems.getNativeFileSystem();
Path testdataDir = unixFs.getPath(BlazeTestUtils.runfilesDir()).getRelative(
TestConstants.JAVATESTS_ROOT + "/com/google/devtools/build/lib/vfs");
Path zPath1 = testdataDir.getChild("sample_with_dirs.zip");
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java b/src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java
index 38ad5f4..9329a8b 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/util/FileSystems.java
@@ -13,13 +13,16 @@
// limitations under the License.
package com.google.devtools.build.lib.vfs.util;
+import com.google.common.base.Verify;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.JavaIoFileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.UnionFileSystem;
import com.google.devtools.build.lib.vfs.UnixFileSystem;
+import com.google.devtools.build.lib.vfs.WindowsFileSystem;
import com.google.devtools.build.lib.vfs.ZipFileSystem;
import java.io.IOException;
@@ -34,60 +37,69 @@
private FileSystems() {}
- private static FileSystem defaultFileSystem;
+ private static FileSystem defaultNativeFileSystem;
+ private static FileSystem defaultJavaIoFileSystem;
+ private static FileSystem defaultUnionFileSystem;
/**
- * Initializes the default {@link FileSystem} instance as a platform native
- * (Unix) file system, creating one iff needed, and returns the instance.
- *
- * <p>This method is idempotent as long as the initialization is of the same
- * type (Native/JavaIo/Union).
+ * Initializes the default native {@link FileSystem} instance as a platform native
+ * (Unix or Windows) file system. If it's not initialized, then initialize it,
+ * otherwise verify if the type of the instance is correct.
*/
- public static synchronized FileSystem initDefaultAsNative() {
- if (!(defaultFileSystem instanceof UnixFileSystem)) {
- defaultFileSystem = new UnixFileSystem();
+ public static synchronized FileSystem getNativeFileSystem() {
+ if (OS.getCurrent() == OS.WINDOWS) {
+ if (defaultNativeFileSystem == null) {
+ defaultNativeFileSystem = new WindowsFileSystem();
+ } else {
+ Verify.verify(defaultNativeFileSystem instanceof WindowsFileSystem);
+ }
+ } else {
+ if (defaultNativeFileSystem == null) {
+ defaultNativeFileSystem = new UnixFileSystem();
+ } else {
+ Verify.verify(defaultNativeFileSystem instanceof UnixFileSystem);
+ }
}
- return defaultFileSystem;
+ return defaultNativeFileSystem;
}
/**
- * Initializes the default {@link FileSystem} instance as a java.io.File
- * file system, creating one iff needed, and returns the instance.
- *
- * <p>This method is idempotent as long as the initialization is of the same
- * type (Native/JavaIo/Union).
+ * Initializes the default java {@link FileSystem} instance as a java.io.File
+ * file system. If it's not initialized, then initialize it,
+ * otherwise verify if the type of the instance is correct.
*/
- public static synchronized FileSystem initDefaultAsJavaIo() {
- if (!(defaultFileSystem instanceof JavaIoFileSystem)) {
- defaultFileSystem = new JavaIoFileSystem();
+ public static synchronized FileSystem getJavaIoFileSystem() {
+ if (defaultJavaIoFileSystem == null) {
+ defaultJavaIoFileSystem = new JavaIoFileSystem();
+ } else {
+ Verify.verify(defaultJavaIoFileSystem instanceof JavaIoFileSystem);
}
- return defaultFileSystem;
+ return defaultJavaIoFileSystem;
}
/**
- * Initializes the default {@link FileSystem} instance as a
- * {@link UnionFileSystem}, creating one iff needed,
- * and returns the instance.
- *
- * <p>This method is idempotent as long as the initialization is of the same
- * type (Native/JavaIo/Union).
+ * Initializes the default union {@link FileSystem} instance as a
+ * {@link UnionFileSystem}. If it's not initialized, then initialize it,
+ * otherwise verify if the type of the instance is correct.
*
* @param prefixMapping the desired mapping of path prefixes to delegate file systems
* @param rootFileSystem the default file system for paths that don't match any prefix map
*/
- public static synchronized FileSystem initDefaultAsUnion(
+ public static synchronized FileSystem getUnionFileSystem(
Map<PathFragment, FileSystem> prefixMapping, FileSystem rootFileSystem) {
- if (!(defaultFileSystem instanceof UnionFileSystem)) {
- defaultFileSystem = new UnionFileSystem(prefixMapping, rootFileSystem);
+ if (defaultUnionFileSystem == null) {
+ defaultUnionFileSystem = new UnionFileSystem(prefixMapping, rootFileSystem);
+ } else {
+ Verify.verify(defaultUnionFileSystem instanceof UnionFileSystem);
}
- return defaultFileSystem;
+ return defaultUnionFileSystem;
}
/**
* Returns a new instance of a simple {@link FileSystem} implementation that
* presents the contents of a zip file as a read-only file system view.
*/
- public static FileSystem newZipFileSystem(Path zipFile) throws IOException {
+ public static FileSystem getZipFileSystem(Path zipFile) throws IOException {
return new ZipFileSystem(zipFile);
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/util/FsApparatus.java b/src/test/java/com/google/devtools/build/lib/vfs/util/FsApparatus.java
index 101061f..fc88272 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/util/FsApparatus.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/util/FsApparatus.java
@@ -56,7 +56,7 @@
* does not hold with our usage of Unix filesystems.
*/
public static FsApparatus newNative() {
- FileSystem fs = FileSystems.initDefaultAsNative();
+ FileSystem fs = FileSystems.getNativeFileSystem();
Path wd = fs.getPath(TMP_DIR);
try {