aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar aehlig <aehlig@google.com>2017-12-19 07:12:25 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-19 07:13:52 -0800
commitc801c393bcfabbe6e5058fd77ef2d67660c75da3 (patch)
tree1711325efe0f0e0fa9adb6d2aef8310a666e587b /src/test/java/com/google/devtools/build/lib
parent2918e78a2b3144d5cacc1ab20ab4626a72df797a (diff)
Automated rollback of commit 82e68b75304438c96ff878a0c2b8d18b42002486.
Fixes #4322, #4306. *** Reason for rollback *** Introduces a deadlock (see https://github.com/bazelbuild/bazel/issues/4322) *** Original change description *** Make FileSystem operate on LocalPath instead of Path. PiperOrigin-RevId: 179549866
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
-rw-r--r--src/test/java/com/google/devtools/build/lib/actions/DigestUtilsTest.java14
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/exec/SingleBuildFileCacheTest.java35
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/pkgcache/IOExceptionsTest.java77
-rw-r--r--src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java12
-rw-r--r--src/test/java/com/google/devtools/build/lib/pkgcache/TargetPatternEvaluatorIOTest.java19
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunctionTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java37
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java35
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ParallelBuilderTest.java88
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java40
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/FileSystemTest.java41
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/FileSystemUtilsTest.java16
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/GlobTest.java21
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/PathTrieTest.java78
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/SearchPathTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/SymlinkAwareFileSystemTest.java24
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java97
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/UnixLocalPathTest.java11
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/WindowsLocalPathTest.java39
-rw-r--r--src/test/java/com/google/devtools/build/lib/windows/WindowsFileSystemTest.java17
31 files changed, 410 insertions, 367 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/actions/DigestUtilsTest.java b/src/test/java/com/google/devtools/build/lib/actions/DigestUtilsTest.java
index 6fee2c1061..259e0f2088 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/DigestUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/DigestUtilsTest.java
@@ -25,7 +25,6 @@ import com.google.devtools.build.lib.testutil.TestUtils;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystem.HashFunction;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import java.io.IOException;
@@ -59,7 +58,7 @@ public class DigestUtilsTest {
FileSystem myfs =
new InMemoryFileSystem(BlazeClock.instance(), hf) {
@Override
- protected byte[] getDigest(LocalPath path, HashFunction hashFunction) throws IOException {
+ protected byte[] getDigest(Path path, HashFunction hashFunction) throws IOException {
try {
barrierLatch.countDown();
readyLatch.countDown();
@@ -73,8 +72,7 @@ public class DigestUtilsTest {
}
@Override
- protected byte[] getFastDigest(LocalPath path, HashFunction hashFunction)
- throws IOException {
+ protected byte[] getFastDigest(Path path, HashFunction hashFunction) throws IOException {
return fastDigest ? super.getDigest(path, hashFunction) : null;
}
};
@@ -133,7 +131,7 @@ public class DigestUtilsTest {
FileSystem myFS =
new InMemoryFileSystem(BlazeClock.instance(), hf) {
@Override
- protected byte[] getFastDigest(LocalPath path, HashFunction hashFunction)
+ protected byte[] getFastDigest(Path path, HashFunction hashFunction)
throws IOException {
// Digest functions have more than 3 bytes, usually at least 16.
return malformed;
@@ -141,7 +139,6 @@ public class DigestUtilsTest {
};
Path path = myFS.getPath("/file");
FileSystemUtils.writeContentAsLatin1(path, "a");
-
byte[] result = DigestUtils.getDigestOrFail(path, 1);
assertThat(result).isEqualTo(path.getDigest());
assertThat(result).isNotSameAs(malformed);
@@ -224,14 +221,13 @@ public class DigestUtilsTest {
FileSystem tracingFileSystem =
new InMemoryFileSystem(BlazeClock.instance()) {
@Override
- protected byte[] getFastDigest(LocalPath path, HashFunction hashFunction)
- throws IOException {
+ protected byte[] getFastDigest(Path path, HashFunction hashFunction) throws IOException {
getFastDigestCounter.incrementAndGet();
return null;
}
@Override
- protected byte[] getDigest(LocalPath path, HashFunction hashFunction) throws IOException {
+ protected byte[] getDigest(Path path, HashFunction hashFunction) throws IOException {
getDigestCounter.incrementAndGet();
return super.getDigest(path, hashFunction);
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
index b7711aaa8d..67d9b6254a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
@@ -19,7 +19,7 @@ import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
import com.google.devtools.build.lib.clock.BlazeClock;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
-import com.google.devtools.build.lib.vfs.LocalPath;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import java.io.IOException;
import java.util.function.Function;
@@ -30,15 +30,15 @@ import org.junit.runners.JUnit4;
/** {@link AnalysisTestCase} with custom filesystem that can throw on stat if desired. */
@RunWith(JUnit4.class)
public class AnalysisWithIOExceptionsTest extends AnalysisTestCase {
- private static final Function<LocalPath, String> NULL_FUNCTION = (path) -> null;
+ private static final Function<Path, String> NULL_FUNCTION = (path) -> null;
- private Function<LocalPath, String> crashMessage = NULL_FUNCTION;
+ private Function<Path, String> crashMessage = NULL_FUNCTION;
@Override
protected FileSystem createFileSystem() {
return new InMemoryFileSystem(BlazeClock.instance()) {
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
String crash = crashMessage.apply(path);
if (crash != null) {
throw new IOException(crash);
diff --git a/src/test/java/com/google/devtools/build/lib/exec/SingleBuildFileCacheTest.java b/src/test/java/com/google/devtools/build/lib/exec/SingleBuildFileCacheTest.java
index 023b41e57c..f9d0372e0a 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/SingleBuildFileCacheTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/SingleBuildFileCacheTest.java
@@ -24,7 +24,6 @@ import com.google.devtools.build.lib.actions.DigestOfDirectoryException;
import com.google.devtools.build.lib.testutil.Suite;
import com.google.devtools.build.lib.testutil.TestSpec;
import com.google.devtools.build.lib.vfs.FileSystem;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import com.google.protobuf.ByteString;
@@ -55,23 +54,23 @@ public class SingleBuildFileCacheTest {
public final void setUp() throws Exception {
calls = new HashMap<>();
md5Overrides = new HashMap<>();
- fs =
- new InMemoryFileSystem() {
- @Override
- protected InputStream getInputStream(LocalPath path) throws IOException {
- int c = calls.containsKey(path.toString()) ? calls.get(path.toString()) : 0;
- c++;
- calls.put(path.toString(), c);
- return super.getInputStream(path);
- }
-
- @Override
- protected byte[] getDigest(LocalPath path, HashFunction hf) throws IOException {
- assertThat(hf).isEqualTo(HashFunction.MD5);
- byte[] override = md5Overrides.get(path.getPathString());
- return override != null ? override : super.getDigest(path, hf);
- }
- };
+ fs = new InMemoryFileSystem() {
+ @Override
+ protected InputStream getInputStream(Path path) throws IOException {
+ int c = calls.containsKey(path.toString())
+ ? calls.get(path.toString()) : 0;
+ c++;
+ calls.put(path.toString(), c);
+ return super.getInputStream(path);
+ }
+
+ @Override
+ protected byte[] getDigest(Path path, HashFunction hf) throws IOException {
+ assertThat(hf).isEqualTo(HashFunction.MD5);
+ byte[] override = md5Overrides.get(path.getPathString());
+ return override != null ? override : super.getDigest(path, hf);
+ }
+ };
underTest = new SingleBuildFileCache("/", fs);
Path root = fs.getRootDirectory();
Path file = root.getChild("empty");
diff --git a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
index 7f1f342d5e..bbb8be7e82 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
@@ -28,7 +28,6 @@ import com.google.devtools.build.lib.packages.util.PackageFactoryApparatus;
import com.google.devtools.build.lib.packages.util.PackageFactoryTestBase;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.testutil.TestUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
@@ -1000,7 +999,7 @@ public class PackageFactoryTest extends PackageFactoryTestBase {
scratch.file("/e/BUILD", "sh_library(name = 'e', data = glob(['*.txt']))");
Path parentDir = buildFile.getParentDirectory();
scratch.file("/e/data.txt");
- throwOnReaddir = LocalPath.create(parentDir.getPathString());
+ throwOnReaddir = parentDir;
try {
packages.createPackage("e", buildFile);
} catch (NoSuchPackageException expected) {
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
index fa5e7605ac..eb614fc49c 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
@@ -39,7 +39,6 @@ import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import java.io.FileNotFoundException;
@@ -81,7 +80,7 @@ public abstract class PackageFactoryTestBase {
protected abstract PackageFactoryApparatus createPackageFactoryApparatus();
- protected LocalPath throwOnReaddir = null;
+ protected Path throwOnReaddir = null;
protected static AttributeMap attributes(Rule rule) {
return RawAttributeMapper.of(rule);
@@ -123,8 +122,7 @@ public abstract class PackageFactoryTestBase {
FileSystem fs =
new InMemoryFileSystem() {
@Override
- public Collection<Dirent> readdir(LocalPath path, boolean followSymlinks)
- throws IOException {
+ public Collection<Dirent> readdir(Path path, boolean followSymlinks) throws IOException {
if (path.equals(throwOnReaddir)) {
throw new FileNotFoundException(path.getPathString());
}
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IOExceptionsTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IOExceptionsTest.java
index 9f84f73a57..184f22201b 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/IOExceptionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IOExceptionsTest.java
@@ -25,7 +25,6 @@ import com.google.devtools.build.lib.skyframe.TransitiveTargetKey;
import com.google.devtools.build.lib.skyframe.TransitiveTargetValue;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -49,16 +48,15 @@ public class IOExceptionsTest extends PackageLoadingTestCase {
private static final String FS_ROOT = "/fsg";
- private static final Function<LocalPath, String> NULL_FUNCTION =
- new Function<LocalPath, String>() {
- @Override
- @Nullable
- public String apply(LocalPath path) {
- return null;
- }
- };
+ private static final Function<Path, String> NULL_FUNCTION = new Function<Path, String>() {
+ @Override
+ @Nullable
+ public String apply(Path path) {
+ return null;
+ }
+ };
- private Function<LocalPath, String> crashMessage = NULL_FUNCTION;
+ private Function<Path, String> crashMessage = NULL_FUNCTION;
@Before
public final void initializeVisitor() throws Exception {
@@ -84,7 +82,7 @@ public class IOExceptionsTest extends PackageLoadingTestCase {
protected FileSystem createFileSystem() {
return new InMemoryFileSystem(BlazeClock.instance(), PathFragment.create(FS_ROOT)) {
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
String crash = crashMessage.apply(path);
if (crash != null) {
throw new IOException(crash);
@@ -99,16 +97,15 @@ public class IOExceptionsTest extends PackageLoadingTestCase {
reporter.removeHandler(failFastHandler); // expect errors
final Path buildPath = scratch.file("pkg/BUILD",
"sh_library(name = 'x')");
- crashMessage =
- new Function<LocalPath, String>() {
- @Override
- public String apply(LocalPath path) {
- if (buildPath.getLocalPath().equals(path)) {
- return "custom crash: " + buildPath;
- }
- return null;
- }
- };
+ crashMessage = new Function<Path, String>() {
+ @Override
+ public String apply(Path path) {
+ if (buildPath.equals(path)) {
+ return "custom crash: " + buildPath;
+ }
+ return null;
+ }
+ };
assertThat(visitTransitively(Label.parseAbsolute("//pkg:x"))).isFalse();
scratch.overwriteFile("pkg/BUILD",
"# another comment to force reload",
@@ -129,16 +126,15 @@ public class IOExceptionsTest extends PackageLoadingTestCase {
"sh_library(name = 'top', deps = ['//pkg:x'])");
final Path buildPath = scratch.file("pkg/BUILD",
"sh_library(name = 'x')");
- crashMessage =
- new Function<LocalPath, String>() {
- @Override
- public String apply(LocalPath path) {
- if (buildPath.getLocalPath().equals(path)) {
- return "custom crash: " + buildPath;
- }
- return null;
- }
- };
+ crashMessage = new Function<Path, String>() {
+ @Override
+ public String apply(Path path) {
+ if (buildPath.equals(path)) {
+ return "custom crash: " + buildPath;
+ }
+ return null;
+ }
+ };
assertThat(visitTransitively(Label.parseAbsolute("//top:top"))).isFalse();
assertContainsEvent("no such package 'pkg'");
// The traditional label visitor does not propagate the original IOException message.
@@ -163,16 +159,15 @@ public class IOExceptionsTest extends PackageLoadingTestCase {
final Path buildPath = scratch.file("top/BUILD",
"sh_library(name = 'x')");
buildPath.getParentDirectory().getRelative("pkg").createDirectory();
- crashMessage =
- new Function<LocalPath, String>() {
- @Override
- public String apply(LocalPath path) {
- if (buildPath.getLocalPath().equals(path)) {
- return "custom crash: " + buildPath;
- }
- return null;
- }
- };
+ crashMessage = new Function<Path, String>() {
+ @Override
+ public String apply(Path path) {
+ if (buildPath.equals(path)) {
+ return "custom crash: " + buildPath;
+ }
+ return null;
+ }
+ };
assertThat(visitTransitively(Label.parseAbsolute("//top/pkg:x"))).isFalse();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
index 04e41a3c79..6e83bbedca 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
@@ -48,7 +48,6 @@ import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -77,8 +76,8 @@ import org.junit.runners.JUnit4;
public class IncrementalLoadingTest {
protected PackageCacheTester tester;
- private LocalPath throwOnReaddir = null;
- private LocalPath throwOnStat = null;
+ private Path throwOnReaddir = null;
+ private Path throwOnStat = null;
@Before
public final void createTester() throws Exception {
@@ -86,8 +85,7 @@ public class IncrementalLoadingTest {
FileSystem fs =
new InMemoryFileSystem(clock) {
@Override
- public Collection<Dirent> readdir(LocalPath path, boolean followSymlinks)
- throws IOException {
+ public Collection<Dirent> readdir(Path path, boolean followSymlinks) throws IOException {
if (path.equals(throwOnReaddir)) {
throw new FileNotFoundException(path.getPathString());
}
@@ -96,7 +94,7 @@ public class IncrementalLoadingTest {
@Nullable
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (path.equals(throwOnStat)) {
throw new IOException("bork " + path.getPathString());
}
@@ -339,7 +337,7 @@ public class IncrementalLoadingTest {
Path buildFile = tester.addFile("e/BUILD", "sh_library(name = 'e', data = glob(['*.txt']))");
Path parentDir = buildFile.getParentDirectory();
tester.addFile("e/data.txt");
- throwOnReaddir = parentDir.getLocalPath();
+ throwOnReaddir = parentDir;
tester.sync();
try {
tester.getTarget("//e:e");
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/TargetPatternEvaluatorIOTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/TargetPatternEvaluatorIOTest.java
index 1eb87496a4..37a992d405 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/TargetPatternEvaluatorIOTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/TargetPatternEvaluatorIOTest.java
@@ -21,7 +21,6 @@ import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryContentInfo;
@@ -42,15 +41,14 @@ public class TargetPatternEvaluatorIOTest extends AbstractTargetPatternEvaluator
private static class Transformer {
@SuppressWarnings("unused")
@Nullable
- public FileStatus stat(FileStatus stat, LocalPath path, boolean followSymlinks)
- throws IOException {
+ public FileStatus stat(FileStatus stat, Path path, boolean followSymlinks) throws IOException {
return stat;
}
@SuppressWarnings("unused")
@Nullable
- public Collection<Dirent> readdir(
- Collection<Dirent> readdir, LocalPath path, boolean followSymlinks) throws IOException {
+ public Collection<Dirent> readdir(Collection<Dirent> readdir, Path path, boolean followSymlinks)
+ throws IOException {
return readdir;
}
}
@@ -61,14 +59,13 @@ public class TargetPatternEvaluatorIOTest extends AbstractTargetPatternEvaluator
protected FileSystem createFileSystem() {
return new InMemoryFileSystem(BlazeClock.instance(), PathFragment.create(FS_ROOT)) {
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
FileStatus defaultResult = super.stat(path, followSymlinks);
return transformer.stat(defaultResult, path, followSymlinks);
}
@Override
- protected Collection<Dirent> readdir(LocalPath path, boolean followSymlinks)
- throws IOException {
+ protected Collection<Dirent> readdir(Path path, boolean followSymlinks) throws IOException {
Collection<Dirent> defaultResult = super.readdir(path, followSymlinks);
return transformer.readdir(defaultResult, path, followSymlinks);
}
@@ -136,7 +133,7 @@ public class TargetPatternEvaluatorIOTest extends AbstractTargetPatternEvaluator
return new Transformer() {
@Nullable
@Override
- public FileStatus stat(FileStatus stat, LocalPath path, boolean followSymlinks)
+ public FileStatus stat(final FileStatus stat, Path path, boolean followSymlinks)
throws IOException {
if (path.getPathString().endsWith(badPathSuffix)) {
return new InMemoryContentInfo(BlazeClock.instance()) {
@@ -203,8 +200,8 @@ public class TargetPatternEvaluatorIOTest extends AbstractTargetPatternEvaluator
return new Transformer() {
@Nullable
@Override
- public Collection<Dirent> readdir(
- Collection<Dirent> readdir, LocalPath path, boolean followSymlinks) throws IOException {
+ public Collection<Dirent> readdir(Collection<Dirent> readdir, Path path,
+ boolean followSymlinks) throws IOException {
if (path.getPathString().endsWith(badPathSuffix)) {
throw new IOException("Path ended in " + badPathSuffix + ", so readdir failed.");
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunctionTest.java
index 289b420eac..68437dbdb3 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunctionTest.java
@@ -26,7 +26,7 @@ import com.google.devtools.build.lib.syntax.SkylarkImport;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
-import com.google.devtools.build.lib.vfs.LocalPath;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import com.google.devtools.build.skyframe.ErrorInfo;
import com.google.devtools.build.skyframe.EvaluationResult;
@@ -47,9 +47,10 @@ public class ASTFileLookupFunctionTest extends BuildViewTestCase {
boolean statThrowsIoException;
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (statThrowsIoException
- && path.getPathString()
+ && path.asFragment()
+ .getPathString()
.equals("/workspace/tools/build_rules/prelude_" + TestConstants.PRODUCT_NAME)) {
throw new IOException("bork");
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
index de9a9ab594..4004e85b8f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
@@ -40,7 +40,6 @@ import com.google.devtools.build.lib.events.NullEventHandler;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.EvaluationResult;
@@ -102,7 +101,7 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase {
setupRoot(
new CustomInMemoryFs() {
@Override
- public byte[] getDigest(LocalPath path, HashFunction hf) throws IOException {
+ public byte[] getDigest(Path path, HashFunction hf) throws IOException {
return path.getBaseName().equals("unreadable")
? expectedDigest
: super.getDigest(path, hf);
@@ -159,7 +158,7 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase {
setupRoot(
new CustomInMemoryFs() {
@Override
- public byte[] getDigest(LocalPath path, HashFunction hf) throws IOException {
+ public byte[] getDigest(Path path, HashFunction hf) throws IOException {
throw exception;
}
});
@@ -183,7 +182,7 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase {
setupRoot(
new CustomInMemoryFs() {
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (path.getBaseName().equals("bad")) {
throw exception;
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
index 6fd4837e1e..ff83c4a4dd 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
@@ -29,7 +29,6 @@ import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
import com.google.devtools.build.lib.testutil.TestUtils;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import com.google.devtools.build.skyframe.InMemoryMemoizingEvaluator;
@@ -172,7 +171,7 @@ abstract class ArtifactFunctionTestCase {
/** InMemoryFileSystem that can pretend to do a fast digest. */
protected class CustomInMemoryFs extends InMemoryFileSystem {
@Override
- protected byte[] getFastDigest(LocalPath path, HashFunction hashFunction) throws IOException {
+ protected byte[] getFastDigest(Path path, HashFunction hashFunction) throws IOException {
return fastDigest ? getDigest(path, hashFunction) : null;
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
index ee0f01976d..e28fef3774 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
@@ -52,7 +52,6 @@ import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
@@ -445,7 +444,7 @@ public class FileFunctionTest {
createFsAndRoot(
new CustomInMemoryFs(manualClock) {
@Override
- protected byte[] getFastDigest(LocalPath path, HashFunction hf) throws IOException {
+ protected byte[] getFastDigest(Path path, HashFunction hf) throws IOException {
return digest;
}
});
@@ -486,7 +485,7 @@ public class FileFunctionTest {
createFsAndRoot(
new CustomInMemoryFs(manualClock) {
@Override
- protected byte[] getFastDigest(LocalPath path, HashFunction hf) {
+ protected byte[] getFastDigest(Path path, HashFunction hf) {
return path.getBaseName().equals("unreadable") ? expectedDigest : null;
}
});
@@ -831,7 +830,7 @@ public class FileFunctionTest {
fs =
new CustomInMemoryFs(manualClock) {
@Override
- protected byte[] getDigest(LocalPath path, HashFunction hf) throws IOException {
+ protected byte[] getDigest(Path path, HashFunction hf) throws IOException {
digestCalls.incrementAndGet();
return super.getDigest(path, hf);
}
@@ -896,8 +895,8 @@ public class FileFunctionTest {
// Our custom filesystem says "a" does not exist, so FileFunction shouldn't bother trying to
// think about "a/b". Test for this by having a stat of "a/b" fail with an io error, and
// observing that we don't encounter the error.
- fs.stubStat(path("a").getLocalPath(), null);
- fs.stubStatError(path("a/b").getLocalPath(), new IOException("ouch!"));
+ fs.stubStat(path("a"), null);
+ fs.stubStatError(path("a/b"), new IOException("ouch!"));
assertThat(valueForPath(path("a/b")).exists()).isFalse();
}
@@ -947,7 +946,7 @@ public class FileFunctionTest {
return 0;
}
};
- fs.stubStat(path("a").getLocalPath(), inconsistentParentFileStatus);
+ fs.stubStat(path("a"), inconsistentParentFileStatus);
// Disable fast-path md5 so that we don't try try to md5 the "a" (since it actually physically
// is a directory).
fastDigest = false;
@@ -968,7 +967,7 @@ public class FileFunctionTest {
public void testFilesystemInconsistencies_GetFastDigest() throws Exception {
file("a");
// Our custom filesystem says "a/b" exists but "a" does not exist.
- fs.stubFastDigestError(path("a").getLocalPath(), new IOException("nope"));
+ fs.stubFastDigestError(path("a"), new IOException("nope"));
SequentialBuildDriver driver = makeDriver();
SkyKey skyKey = skyKey("a");
EvaluationResult<FileValue> result =
@@ -986,7 +985,7 @@ public class FileFunctionTest {
createFsAndRoot(
new CustomInMemoryFs(manualClock) {
@Override
- protected boolean isReadable(LocalPath path) throws IOException {
+ protected boolean isReadable(Path path) throws IOException {
if (path.getBaseName().equals("unreadable")) {
throw new IOException("isReadable failed");
}
@@ -1292,7 +1291,7 @@ public class FileFunctionTest {
public void testInjectionOverIOException() throws Exception {
Path foo = file("foo");
SkyKey fooKey = skyKey("foo");
- fs.stubStatError(foo.getLocalPath(), new IOException("bork"));
+ fs.stubStatError(foo, new IOException("bork"));
BuildDriver driver = makeDriver();
EvaluationResult<FileValue> result =
driver.evaluate(
@@ -1307,7 +1306,7 @@ public class FileFunctionTest {
.hasExceptionThat()
.hasMessageThat()
.isEqualTo("bork");
- fs.stubbedStatErrors.remove(foo.getLocalPath());
+ fs.stubbedStatErrors.remove(foo);
differencer.inject(
fileStateSkyKey("foo"),
FileStateValue.create(
@@ -1677,36 +1676,36 @@ public class FileFunctionTest {
private class CustomInMemoryFs extends InMemoryFileSystem {
- private final Map<LocalPath, FileStatus> stubbedStats = Maps.newHashMap();
- private final Map<LocalPath, IOException> stubbedStatErrors = Maps.newHashMap();
- private final Map<LocalPath, IOException> stubbedFastDigestErrors = Maps.newHashMap();
+ private final Map<Path, FileStatus> stubbedStats = Maps.newHashMap();
+ private final Map<Path, IOException> stubbedStatErrors = Maps.newHashMap();
+ private final Map<Path, IOException> stubbedFastDigestErrors = Maps.newHashMap();
public CustomInMemoryFs(ManualClock manualClock) {
super(manualClock);
}
- public void stubFastDigestError(LocalPath path, IOException error) {
+ public void stubFastDigestError(Path path, IOException error) {
stubbedFastDigestErrors.put(path, error);
}
@Override
- protected byte[] getFastDigest(LocalPath path, HashFunction hashFunction) throws IOException {
+ protected byte[] getFastDigest(Path path, HashFunction hashFunction) throws IOException {
if (stubbedFastDigestErrors.containsKey(path)) {
throw stubbedFastDigestErrors.get(path);
}
return fastDigest ? getDigest(path) : null;
}
- public void stubStat(LocalPath path, @Nullable FileStatus stubbedResult) {
+ public void stubStat(Path path, @Nullable FileStatus stubbedResult) {
stubbedStats.put(path, stubbedResult);
}
- public void stubStatError(LocalPath path, IOException error) {
+ public void stubStatError(Path path, IOException error) {
stubbedStatErrors.put(path, error);
}
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (stubbedStatErrors.containsKey(path)) {
throw stubbedStatErrors.get(path);
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
index a57f39526f..eb2d141b1c 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
@@ -48,7 +48,6 @@ import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileStatusWithDigest;
import com.google.devtools.build.lib.vfs.FileStatusWithDigestAdapter;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -808,7 +807,7 @@ public class FilesystemValueCheckerTest {
}
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (statThrowsRuntimeException) {
throw new RuntimeException("bork");
}
@@ -816,7 +815,7 @@ public class FilesystemValueCheckerTest {
}
@Override
- protected String readSymbolicLink(LocalPath path) throws IOException {
+ protected PathFragment readSymbolicLink(Path path) throws IOException {
if (readlinkThrowsIoException) {
throw new IOException("readlink failed");
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
index 3ac3dc49a6..13acf704e9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
@@ -43,7 +43,6 @@ import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
@@ -630,7 +629,7 @@ public abstract class GlobFunctionTest {
@Test
public void testResilienceToFilesystemInconsistencies_DirectoryExistence() throws Exception {
// Our custom filesystem says "pkgPath/BUILD" exists but "pkgPath" does not exist.
- fs.stubStat(pkgPath.getLocalPath(), null);
+ fs.stubStat(pkgPath, null);
RootedPath pkgRootedPath = RootedPath.toRootedPath(root, pkgPath);
FileStateValue pkgDirFileStateValue = FileStateValue.create(pkgRootedPath, null);
FileValue pkgDirValue =
@@ -655,7 +654,7 @@ public abstract class GlobFunctionTest {
// Our custom filesystem says directory "pkgPath/foo/bar" contains a subdirectory "wiz" but a
// direct stat on "pkgPath/foo/bar/wiz" says it does not exist.
Path fooBarDir = pkgPath.getRelative("foo/bar");
- fs.stubStat(fooBarDir.getRelative("wiz").getLocalPath(), null);
+ fs.stubStat(fooBarDir.getRelative("wiz"), null);
RootedPath fooBarDirRootedPath = RootedPath.toRootedPath(root, fooBarDir);
SkyValue fooBarDirListingValue =
DirectoryListingStateValue.create(
@@ -684,7 +683,7 @@ public abstract class GlobFunctionTest {
RootedPath.toRootedPath(root, pkgPath.getRelative("foo/bar/wiz/file"));
final FileStatus realStat = fileRootedPath.asPath().stat();
fs.stubStat(
- fileRootedPath.asPath().getLocalPath(),
+ fileRootedPath.asPath(),
new FileStatus() {
@Override
@@ -761,18 +760,18 @@ public abstract class GlobFunctionTest {
private static final class CustomInMemoryFs extends InMemoryFileSystem {
- private Map<LocalPath, FileStatus> stubbedStats = Maps.newHashMap();
+ private Map<Path, FileStatus> stubbedStats = Maps.newHashMap();
public CustomInMemoryFs(ManualClock manualClock) {
super(manualClock);
}
- public void stubStat(LocalPath path, @Nullable FileStatus stubbedResult) {
+ public void stubStat(Path path, @Nullable FileStatus stubbedResult) {
stubbedStats.put(path, stubbedResult);
}
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (stubbedStats.containsKey(path)) {
return stubbedStats.get(path);
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
index 54f23f430d..8773d54825 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
@@ -39,7 +39,6 @@ import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -165,7 +164,7 @@ public class PackageFunctionTest extends BuildViewTestCase {
return 0;
}
};
- fs.stubStat(fooDir.getLocalPath(), inconsistentParentFileStatus);
+ fs.stubStat(fooDir, inconsistentParentFileStatus);
RootedPath pkgRootedPath = RootedPath.toRootedPath(pkgRoot, fooDir);
SkyValue fooDirValue = FileStateValue.create(pkgRootedPath, tsgm);
differencer.inject(ImmutableMap.of(FileStateValue.key(pkgRootedPath), fooDirValue));
@@ -197,7 +196,7 @@ public class PackageFunctionTest extends BuildViewTestCase {
// Our custom filesystem says "foo/bar/baz" does not exist but it also says that "foo/bar"
// has a child directory "baz".
- fs.stubStat(bazDir.getLocalPath(), null);
+ fs.stubStat(bazDir, null);
RootedPath barDirRootedPath = RootedPath.toRootedPath(pkgRoot, barDir);
FileStateValue barDirFileStateValue = FileStateValue.create(barDirRootedPath, tsgm);
FileValue barDirFileValue = FileValue.value(barDirRootedPath, barDirFileStateValue,
@@ -226,7 +225,7 @@ public class PackageFunctionTest extends BuildViewTestCase {
Path fooDir = fooBuildFile.getParentDirectory();
Path barDir = fooDir.getRelative("bar");
scratch.file("foo/bar/baz.sh");
- fs.scheduleMakeUnreadableAfterReaddir(barDir.getLocalPath());
+ fs.scheduleMakeUnreadableAfterReaddir(barDir);
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
String expectedMessage = "Encountered error 'Directory is not readable'";
@@ -537,7 +536,7 @@ public class PackageFunctionTest extends BuildViewTestCase {
scratch.file("foo/BUILD",
"sh_library(name = 'foo', srcs = ['bar/baz.sh'])");
Path barBuildFile = scratch.file("foo/bar/BUILD");
- fs.stubStatError(barBuildFile.getLocalPath(), new IOException("nope"));
+ fs.stubStatError(barBuildFile, new IOException("nope"));
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
EvaluationResult<PackageValue> result = SkyframeExecutorTestUtils.evaluate(
getSkyframeExecutor(), skyKey, /*keepGoing=*/false, reporter);
@@ -675,7 +674,7 @@ public class PackageFunctionTest extends BuildViewTestCase {
public void testPackageLoadingErrorOnIOExceptionReadingBuildFile() throws Exception {
Path fooBuildFilePath = scratch.file("foo/BUILD");
IOException exn = new IOException("nope");
- fs.throwExceptionOnGetInputStream(fooBuildFilePath.getLocalPath(), exn);
+ fs.throwExceptionOnGetInputStream(fooBuildFilePath, exn);
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
EvaluationResult<PackageValue> result = SkyframeExecutorTestUtils.evaluate(
@@ -693,7 +692,7 @@ public class PackageFunctionTest extends BuildViewTestCase {
scratch.file("foo/BUILD", "load('//foo:bzl.bzl', 'x')");
Path fooBzlFilePath = scratch.file("foo/bzl.bzl");
IOException exn = new IOException("nope");
- fs.throwExceptionOnGetInputStream(fooBzlFilePath.getLocalPath(), exn);
+ fs.throwExceptionOnGetInputStream(fooBzlFilePath, exn);
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
EvaluationResult<PackageValue> result = SkyframeExecutorTestUtils.evaluate(
@@ -740,49 +739,49 @@ public class PackageFunctionTest extends BuildViewTestCase {
}
}
- private final Map<LocalPath, FileStatusOrException> stubbedStats = Maps.newHashMap();
- private final Set<LocalPath> makeUnreadableAfterReaddir = Sets.newHashSet();
- private final Map<LocalPath, IOException> pathsToErrorOnGetInputStream = Maps.newHashMap();
+ private final Map<Path, FileStatusOrException> stubbedStats = Maps.newHashMap();
+ private final Set<Path> makeUnreadableAfterReaddir = Sets.newHashSet();
+ private final Map<Path, IOException> pathsToErrorOnGetInputStream = Maps.newHashMap();
public CustomInMemoryFs(ManualClock manualClock) {
super(manualClock);
}
- public void stubStat(LocalPath path, @Nullable FileStatus stubbedResult) {
+ public void stubStat(Path path, @Nullable FileStatus stubbedResult) {
stubbedStats.put(path, new FileStatusOrException.FileStatusImpl(stubbedResult));
}
- public void stubStatError(LocalPath path, IOException stubbedResult) {
+ public void stubStatError(Path path, IOException stubbedResult) {
stubbedStats.put(path, new FileStatusOrException.ExceptionImpl(stubbedResult));
}
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (stubbedStats.containsKey(path)) {
return stubbedStats.get(path).get();
}
return super.stat(path, followSymlinks);
}
- public void scheduleMakeUnreadableAfterReaddir(LocalPath path) {
+ public void scheduleMakeUnreadableAfterReaddir(Path path) {
makeUnreadableAfterReaddir.add(path);
}
@Override
- public Collection<Dirent> readdir(LocalPath path, boolean followSymlinks) throws IOException {
+ public Collection<Dirent> readdir(Path path, boolean followSymlinks) throws IOException {
Collection<Dirent> result = super.readdir(path, followSymlinks);
if (makeUnreadableAfterReaddir.contains(path)) {
- setReadable(path, false);
+ path.setReadable(false);
}
return result;
}
- public void throwExceptionOnGetInputStream(LocalPath path, IOException exn) {
+ public void throwExceptionOnGetInputStream(Path path, IOException exn) {
pathsToErrorOnGetInputStream.put(path, exn);
}
@Override
- protected InputStream getInputStream(LocalPath path) throws IOException {
+ protected InputStream getInputStream(Path path) throws IOException {
IOException exnToThrow = pathsToErrorOnGetInputStream.get(path);
if (exnToThrow != null) {
throw exnToThrow;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ParallelBuilderTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ParallelBuilderTest.java
index 13f5fa2df3..e271d90237 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ParallelBuilderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ParallelBuilderTest.java
@@ -45,7 +45,6 @@ import com.google.devtools.build.lib.testutil.TestUtils;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import java.io.FileNotFoundException;
@@ -242,59 +241,58 @@ public class ParallelBuilderTest extends TimestampBuilderTestCase {
@Test
public void testUpdateCacheError() throws Exception {
- FileSystem fs =
- new InMemoryFileSystem() {
- @Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
- final FileStatus stat = super.stat(path, followSymlinks);
- if (path.toString().endsWith("/out/foo")) {
- return new FileStatus() {
- private final FileStatus original = stat;
+ FileSystem fs = new InMemoryFileSystem() {
+ @Override
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
+ final FileStatus stat = super.stat(path, followSymlinks);
+ if (path.toString().endsWith("/out/foo")) {
+ return new FileStatus() {
+ private final FileStatus original = stat;
- @Override
- public boolean isSymbolicLink() {
- return original.isSymbolicLink();
- }
+ @Override
+ public boolean isSymbolicLink() {
+ return original.isSymbolicLink();
+ }
- @Override
- public boolean isFile() {
- return original.isFile();
- }
+ @Override
+ public boolean isFile() {
+ return original.isFile();
+ }
- @Override
- public boolean isDirectory() {
- return original.isDirectory();
- }
+ @Override
+ public boolean isDirectory() {
+ return original.isDirectory();
+ }
- @Override
- public boolean isSpecialFile() {
- return original.isSpecialFile();
- }
+ @Override
+ public boolean isSpecialFile() {
+ return original.isSpecialFile();
+ }
- @Override
- public long getSize() throws IOException {
- return original.getSize();
- }
+ @Override
+ public long getSize() throws IOException {
+ return original.getSize();
+ }
- @Override
- public long getNodeId() throws IOException {
- return original.getNodeId();
- }
+ @Override
+ public long getNodeId() throws IOException {
+ return original.getNodeId();
+ }
- @Override
- public long getLastModifiedTime() throws IOException {
- throw new IOException();
- }
+ @Override
+ public long getLastModifiedTime() throws IOException {
+ throw new IOException();
+ }
- @Override
- public long getLastChangeTime() throws IOException {
- return original.getLastChangeTime();
- }
- };
+ @Override
+ public long getLastChangeTime() throws IOException {
+ return original.getLastChangeTime();
}
- return stat;
- }
- };
+ };
+ }
+ return stat;
+ }
+ };
Artifact foo = createDerivedArtifact(fs, "foo");
registerAction(new TestAction(TestAction.NO_EFFECT, emptySet, ImmutableList.of(foo)));
reporter.removeHandler(failFastHandler);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
index 8bca6bd55c..63e900f344 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
@@ -490,7 +490,7 @@ public class SkyframeLabelVisitorTest extends SkyframeLabelVisitorTestCase {
return 0;
}
};
- fs.stubStat(bazDir.getLocalPath(), inconsistentParentFileStatus);
+ fs.stubStat(bazDir, inconsistentParentFileStatus);
Set<Label> labels = ImmutableSet.of(Label.parseAbsolute("//foo:foo"));
getSkyframeExecutor()
.getPackageManager()
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java
index e3c54a55a2..f20cea8a51 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java
@@ -36,8 +36,8 @@ import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader;
import com.google.devtools.build.lib.testutil.ManualClock;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import com.google.devtools.build.skyframe.DelegatingWalkableGraph;
import com.google.devtools.build.skyframe.InMemoryMemoizingEvaluator;
@@ -240,18 +240,18 @@ abstract public class SkyframeLabelVisitorTestCase extends PackageLoadingTestCas
protected static class CustomInMemoryFs extends InMemoryFileSystem {
- private Map<LocalPath, FileStatus> stubbedStats = Maps.newHashMap();
+ private Map<Path, FileStatus> stubbedStats = Maps.newHashMap();
public CustomInMemoryFs(ManualClock manualClock) {
super(manualClock);
}
- public void stubStat(LocalPath path, @Nullable FileStatus stubbedResult) {
+ public void stubStat(Path path, @Nullable FileStatus stubbedResult) {
stubbedStats.put(path, stubbedResult);
}
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (stubbedStats.containsKey(path)) {
return stubbedStats.get(path);
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java
index 986c5a5038..1e944d22cb 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java
@@ -26,7 +26,6 @@ import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -133,7 +132,7 @@ public class TargetMarkerFunctionTest extends BuildViewTestCase {
reporter.removeHandler(failFastHandler);
scratch.file("a/BUILD", "sh_library(name = 'b/c')");
Path subpackageBuildFile = scratch.file("a/b/BUILD", "sh_library(name = 'c')");
- fs.stubStatIOException(subpackageBuildFile.getLocalPath(), new IOException("nope"));
+ fs.stubStatIOException(subpackageBuildFile, new IOException("nope"));
BuildFileNotFoundException exn =
(BuildFileNotFoundException) getErrorFromTargetValue("//a:b/c");
assertThat(exn).hasMessageThat().contains("nope");
@@ -141,18 +140,18 @@ public class TargetMarkerFunctionTest extends BuildViewTestCase {
private static class CustomInMemoryFs extends InMemoryFileSystem {
- private Map<LocalPath, IOException> stubbedStatExceptions = Maps.newHashMap();
+ private Map<Path, IOException> stubbedStatExceptions = Maps.newHashMap();
public CustomInMemoryFs() {
super(BlazeClock.instance());
}
- public void stubStatIOException(LocalPath path, IOException stubbedResult) {
+ public void stubStatIOException(Path path, IOException stubbedResult) {
stubbedStatExceptions.put(path, stubbedResult);
}
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (stubbedStatExceptions.containsKey(path)) {
throw stubbedStatExceptions.get(path);
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
index 1e52a54ec5..3e156beaec 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
@@ -40,7 +40,6 @@ import com.google.devtools.build.lib.actions.util.TestAction.DummyAction;
import com.google.devtools.build.lib.events.NullEventHandler;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.LocalPath;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.EvaluationResult;
@@ -181,7 +180,7 @@ public class TreeArtifactMetadataTest extends ArtifactFunctionTestCase {
setupRoot(
new CustomInMemoryFs() {
@Override
- public FileStatus stat(LocalPath path, boolean followSymlinks) throws IOException {
+ public FileStatus stat(Path path, boolean followSymlinks) throws IOException {
if (path.getBaseName().equals("one")) {
throw exception;
}
diff --git a/src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java b/src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java
index be410fdf6f..d4a079db94 100644
--- a/src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/DependencySetWindowsTest.java
@@ -38,13 +38,11 @@ public class DependencySetWindowsTest {
@Test
public void dotDParser_windowsPaths() throws Exception {
- Path dotd =
- scratch.file(
- "C:/tmp/foo.d",
- "bazel-out/hello-lib/cpp/hello-lib.o: \\",
- " cpp/hello-lib.cc cpp/hello-lib.h c:\\mingw\\include\\stdio.h \\",
- " c:\\mingw\\include\\_mingw.h \\",
- " c:\\mingw\\lib\\gcc\\mingw32\\4.8.1\\include\\stdarg.h");
+ Path dotd = scratch.file("/tmp/foo.d",
+ "bazel-out/hello-lib/cpp/hello-lib.o: \\",
+ " cpp/hello-lib.cc cpp/hello-lib.h c:\\mingw\\include\\stdio.h \\",
+ " c:\\mingw\\include\\_mingw.h \\",
+ " c:\\mingw\\lib\\gcc\\mingw32\\4.8.1\\include\\stdarg.h");
Set<Path> expected = Sets.newHashSet(
root.getRelative("cpp/hello-lib.cc"),
@@ -58,11 +56,9 @@ public class DependencySetWindowsTest {
@Test
public void dotDParser_windowsPathsWithSpaces() throws Exception {
- Path dotd =
- scratch.file(
- "C:/tmp/foo.d",
- "bazel-out/hello-lib/cpp/hello-lib.o: \\",
- "C:\\Program\\ Files\\ (x86)\\LLVM\\stddef.h");
+ Path dotd = scratch.file("/tmp/foo.d",
+ "bazel-out/hello-lib/cpp/hello-lib.o: \\",
+ "C:\\Program\\ Files\\ (x86)\\LLVM\\stddef.h");
assertThat(newDependencySet().read(dotd).getDependencies())
.containsExactlyElementsIn(
Sets.newHashSet(fileSystem.getPath("C:/Program Files (x86)/LLVM/stddef.h")));
@@ -73,14 +69,12 @@ public class DependencySetWindowsTest {
// This is (slightly simplified) actual output from clang. Yes, clang will happily mix
// forward slashes and backslashes in a single path, not to mention using backslashes as
// separators next to backslashes as escape characters.
- Path dotd =
- scratch.file(
- "C:/tmp/foo.d",
- "bazel-out/hello-lib/cpp/hello-lib.o: \\",
- "cpp/hello-lib.cc cpp/hello-lib.h /mingw/include\\stdio.h \\",
- "/mingw/include\\_mingw.h \\",
- "C:\\Program\\ Files\\ (x86)\\LLVM\\bin\\..\\lib\\clang\\3.5.0\\include\\stddef.h \\",
- "C:\\Program\\ Files\\ (x86)\\LLVM\\bin\\..\\lib\\clang\\3.5.0\\include\\stdarg.h");
+ Path dotd = scratch.file("/tmp/foo.d",
+ "bazel-out/hello-lib/cpp/hello-lib.o: \\",
+ "cpp/hello-lib.cc cpp/hello-lib.h /mingw/include\\stdio.h \\",
+ "/mingw/include\\_mingw.h \\",
+ "C:\\Program\\ Files\\ (x86)\\LLVM\\bin\\..\\lib\\clang\\3.5.0\\include\\stddef.h \\",
+ "C:\\Program\\ Files\\ (x86)\\LLVM\\bin\\..\\lib\\clang\\3.5.0\\include\\stdarg.h");
Set<Path> expected = Sets.newHashSet(
root.getRelative("cpp/hello-lib.cc"),
@@ -99,8 +93,10 @@ public class DependencySetWindowsTest {
Path file2 = fileSystem.getPath("C:/blah/blah/genhello/hello.h");
Path file2DiffCase = fileSystem.getPath("C:/Blah/blah/Genhello/hello.h");
String filename = "hello.o";
- Path dotd =
- scratch.file("C:/tmp/foo.d", filename + ": \\", " " + file1 + " \\", " " + file2 + " ");
+ Path dotd = scratch.file("/tmp/foo.d",
+ filename + ": \\",
+ " " + file1 + " \\",
+ " " + file2 + " ");
assertThat(newDependencySet().read(dotd).getDependencies())
.containsExactly(file1, file2DiffCase);
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemTest.java b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemTest.java
index 09ac79eec6..278a288dda 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemTest.java
@@ -379,7 +379,7 @@ public abstract class FileSystemTest {
@Test
public void testSymbolicFileLinkExists() throws Exception {
Path someLink = absolutize("some-link");
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
someLink.createSymbolicLink(xFile);
assertThat(someLink.exists()).isTrue();
assertThat(someLink.statIfFound()).isNotNull();
@@ -389,7 +389,7 @@ public abstract class FileSystemTest {
@Test
public void testSymbolicFileLinkIsSymbolicLink() throws Exception {
Path someLink = absolutize("some-link");
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
someLink.createSymbolicLink(xFile);
assertThat(someLink.isSymbolicLink()).isTrue();
}
@@ -398,7 +398,7 @@ public abstract class FileSystemTest {
@Test
public void testSymbolicFileLinkIsFile() throws Exception {
Path someLink = absolutize("some-link");
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
someLink.createSymbolicLink(xFile);
assertThat(someLink.isFile()).isTrue();
}
@@ -407,7 +407,7 @@ public abstract class FileSystemTest {
@Test
public void testSymbolicFileLinkIsNotDirectory() throws Exception {
Path someLink = absolutize("some-link");
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
someLink.createSymbolicLink(xFile);
assertThat(someLink.isDirectory()).isFalse();
}
@@ -416,7 +416,7 @@ public abstract class FileSystemTest {
@Test
public void testSymbolicDirLinkExists() throws Exception {
Path someLink = absolutize("some-link");
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
someLink.createSymbolicLink(xEmptyDirectory);
assertThat(someLink.exists()).isTrue();
assertThat(someLink.statIfFound()).isNotNull();
@@ -426,7 +426,7 @@ public abstract class FileSystemTest {
@Test
public void testSymbolicDirLinkIsSymbolicLink() throws Exception {
Path someLink = absolutize("some-link");
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
someLink.createSymbolicLink(xEmptyDirectory);
assertThat(someLink.isSymbolicLink()).isTrue();
}
@@ -435,7 +435,7 @@ public abstract class FileSystemTest {
@Test
public void testSymbolicDirLinkIsDirectory() throws Exception {
Path someLink = absolutize("some-link");
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
someLink.createSymbolicLink(xEmptyDirectory);
assertThat(someLink.isDirectory()).isTrue();
}
@@ -444,7 +444,7 @@ public abstract class FileSystemTest {
@Test
public void testSymbolicDirLinkIsNotFile() throws Exception {
Path someLink = absolutize("some-link");
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
someLink.createSymbolicLink(xEmptyDirectory);
assertThat(someLink.isFile()).isFalse();
}
@@ -1287,7 +1287,7 @@ public abstract class FileSystemTest {
Path xNonEmptyDirectoryBar = xNonEmptyDirectory.getChild("bar");
xNonEmptyDirectory.setWritable(false);
- if (testFS.supportsSymbolicLinksNatively(xNonEmptyDirectoryBar.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(xNonEmptyDirectoryBar)) {
try {
createSymbolicLink(xNonEmptyDirectoryBar, xNonEmptyDirectoryFoo);
fail("No exception thrown.");
@@ -1335,19 +1335,19 @@ public abstract class FileSystemTest {
@Test
public void testResolveSymlinks() throws Exception {
- if (testFS.supportsSymbolicLinksNatively(xLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(xLink)) {
createSymbolicLink(xLink, xFile);
FileSystemUtils.createEmptyFile(xFile);
- assertThat(testFS.resolveOneLink(xLink.getLocalPath())).isEqualTo(xFile.getPathString());
+ assertThat(testFS.resolveOneLink(xLink)).isEqualTo(xFile.asFragment());
assertThat(xLink.resolveSymbolicLinks()).isEqualTo(xFile);
}
}
@Test
public void testResolveDanglingSymlinks() throws Exception {
- if (testFS.supportsSymbolicLinksNatively(xLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(xLink)) {
createSymbolicLink(xLink, xNothing);
- assertThat(testFS.resolveOneLink(xLink.getLocalPath())).isEqualTo(xNothing.getPathString());
+ assertThat(testFS.resolveOneLink(xLink)).isEqualTo(xNothing.asFragment());
try {
xLink.resolveSymbolicLinks();
fail();
@@ -1358,15 +1358,15 @@ public abstract class FileSystemTest {
@Test
public void testResolveNonSymlinks() throws Exception {
- if (testFS.supportsSymbolicLinksNatively(xFile.getLocalPath())) {
- assertThat(testFS.resolveOneLink(xFile.getLocalPath())).isNull();
+ if (testFS.supportsSymbolicLinksNatively(xFile)) {
+ assertThat(testFS.resolveOneLink(xFile)).isNull();
assertThat(xFile.resolveSymbolicLinks()).isEqualTo(xFile);
}
}
@Test
public void testCreateHardLink_Success() throws Exception {
- if (!testFS.supportsHardLinksNatively(xFile.getLocalPath())) {
+ if (!testFS.supportsHardLinksNatively(xFile)) {
return;
}
xFile.createHardLink(xLink);
@@ -1379,7 +1379,7 @@ public abstract class FileSystemTest {
@Test
public void testCreateHardLink_NeitherOriginalNorLinkExists() throws Exception {
- if (!testFS.supportsHardLinksNatively(xFile.getLocalPath())) {
+ if (!testFS.supportsHardLinksNatively(xFile)) {
return;
}
@@ -1398,7 +1398,7 @@ public abstract class FileSystemTest {
@Test
public void testCreateHardLink_OriginalDoesNotExistAndLinkExists() throws Exception {
- if (!testFS.supportsHardLinksNatively(xFile.getLocalPath())) {
+ if (!testFS.supportsHardLinksNatively(xFile)) {
return;
}
@@ -1419,7 +1419,7 @@ public abstract class FileSystemTest {
@Test
public void testCreateHardLink_BothOriginalAndLinkExist() throws Exception {
- if (!testFS.supportsHardLinksNatively(xFile.getLocalPath())) {
+ if (!testFS.supportsHardLinksNatively(xFile)) {
return;
}
/* Both original file and link file exist */
@@ -1437,7 +1437,6 @@ public abstract class FileSystemTest {
}
protected boolean isHardLinked(Path a, Path b) throws IOException {
- return testFS.stat(a.getLocalPath(), false).getNodeId()
- == testFS.stat(b.getLocalPath(), false).getNodeId();
+ return testFS.stat(a, false).getNodeId() == testFS.stat(b, false).getNodeId();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemUtilsTest.java b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemUtilsTest.java
index 3b9a2dc76d..0e9b74ed3b 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemUtilsTest.java
@@ -851,8 +851,8 @@ public class FileSystemUtilsTest {
FileSystemUtils.createHardLink(linkPath, originalPath);
assertThat(originalPath.exists()).isTrue();
assertThat(linkPath.exists()).isTrue();
- assertThat(fileSystem.stat(linkPath.getLocalPath(), false).getNodeId())
- .isEqualTo(fileSystem.stat(originalPath.getLocalPath(), false).getNodeId());
+ assertThat(fileSystem.stat(linkPath, false).getNodeId())
+ .isEqualTo(fileSystem.stat(originalPath, false).getNodeId());
}
@Test
@@ -892,11 +892,11 @@ public class FileSystemUtilsTest {
assertThat(linkPath1.exists()).isTrue();
assertThat(linkPath2.exists()).isTrue();
assertThat(linkPath3.exists()).isTrue();
- assertThat(fileSystem.stat(linkPath1.getLocalPath(), false).getNodeId())
- .isEqualTo(fileSystem.stat(originalPath1.getLocalPath(), false).getNodeId());
- assertThat(fileSystem.stat(linkPath2.getLocalPath(), false).getNodeId())
- .isEqualTo(fileSystem.stat(originalPath2.getLocalPath(), false).getNodeId());
- assertThat(fileSystem.stat(linkPath3.getLocalPath(), false).getNodeId())
- .isEqualTo(fileSystem.stat(originalPath3.getLocalPath(), false).getNodeId());
+ assertThat(fileSystem.stat(linkPath1, false).getNodeId())
+ .isEqualTo(fileSystem.stat(originalPath1, false).getNodeId());
+ assertThat(fileSystem.stat(linkPath2, false).getNodeId())
+ .isEqualTo(fileSystem.stat(originalPath2, false).getNodeId());
+ assertThat(fileSystem.stat(linkPath3, false).getNodeId())
+ .isEqualTo(fileSystem.stat(originalPath3, false).getNodeId());
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/GlobTest.java b/src/test/java/com/google/devtools/build/lib/vfs/GlobTest.java
index 70fc86dc48..5b0958fae1 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/GlobTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/GlobTest.java
@@ -54,18 +54,15 @@ public class GlobTest {
@Before
public final void initializeFileSystem() throws Exception {
- fs =
- new InMemoryFileSystem() {
- @Override
- public Collection<Dirent> readdir(LocalPath path, boolean followSymlinks)
- throws IOException {
- if (throwOnReaddir != null
- && path.getPathString().equals(throwOnReaddir.getPathString())) {
- throw new FileNotFoundException(path.getPathString());
- }
- return super.readdir(path, followSymlinks);
- }
- };
+ fs = new InMemoryFileSystem() {
+ @Override
+ public Collection<Dirent> readdir(Path path, boolean followSymlinks) throws IOException {
+ if (path.equals(throwOnReaddir)) {
+ throw new FileNotFoundException(path.getPathString());
+ }
+ return super.readdir(path, followSymlinks);
+ }
+ };
tmpPath = fs.getPath("/globtmp");
for (String dir : ImmutableList.of("foo/bar/wiz",
"foo/barnacle/wiz",
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/PathTrieTest.java b/src/test/java/com/google/devtools/build/lib/vfs/PathTrieTest.java
new file mode 100644
index 0000000000..0807b4aa5d
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/vfs/PathTrieTest.java
@@ -0,0 +1,78 @@
+// Copyright 2014 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.vfs;
+
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Unit tests for {@link PathTrie}. */
+@RunWith(JUnit4.class)
+public class PathTrieTest {
+ @Test
+ public void empty() {
+ PathTrie<Integer> pathTrie = new PathTrie<>();
+ assertThat(pathTrie.get(PathFragment.EMPTY_FRAGMENT)).isNull();
+ assertThat(pathTrie.get(PathFragment.create("/x"))).isNull();
+ assertThat(pathTrie.get(PathFragment.create("/x/y"))).isNull();
+ }
+
+ @Test
+ public void simpleBranches() {
+ PathTrie<Integer> pathTrie = new PathTrie<>();
+ pathTrie.put(PathFragment.create("/a"), 1);
+ pathTrie.put(PathFragment.create("/b"), 2);
+
+ assertThat(pathTrie.get(PathFragment.EMPTY_FRAGMENT)).isNull();
+ assertThat(pathTrie.get(PathFragment.create("/a"))).isEqualTo(1);
+ assertThat(pathTrie.get(PathFragment.create("/a/b"))).isEqualTo(1);
+ assertThat(pathTrie.get(PathFragment.create("/a/b/c"))).isEqualTo(1);
+ assertThat(pathTrie.get(PathFragment.create("/b"))).isEqualTo(2);
+ assertThat(pathTrie.get(PathFragment.create("/b/c"))).isEqualTo(2);
+ }
+
+ @Test
+ public void nestedDirectories() {
+ PathTrie<Integer> pathTrie = new PathTrie<>();
+ pathTrie.put(PathFragment.create("/a/b/c"), 3);
+ assertThat(pathTrie.get(PathFragment.EMPTY_FRAGMENT)).isNull();
+ assertThat(pathTrie.get(PathFragment.create("/a"))).isNull();
+ assertThat(pathTrie.get(PathFragment.create("/a/b"))).isNull();
+ assertThat(pathTrie.get(PathFragment.create("/a/b/c"))).isEqualTo(3);
+ assertThat(pathTrie.get(PathFragment.create("/a/b/c/d"))).isEqualTo(3);
+
+ pathTrie.put(PathFragment.create("/a"), 1);
+ assertThat(pathTrie.get(PathFragment.EMPTY_FRAGMENT)).isNull();
+ assertThat(pathTrie.get(PathFragment.create("/b"))).isNull();
+ assertThat(pathTrie.get(PathFragment.create("/a"))).isEqualTo(1);
+ assertThat(pathTrie.get(PathFragment.create("/a/b"))).isEqualTo(1);
+ assertThat(pathTrie.get(PathFragment.create("/a/b/c"))).isEqualTo(3);
+ assertThat(pathTrie.get(PathFragment.create("/a/b/c/d"))).isEqualTo(3);
+
+ pathTrie.put(PathFragment.ROOT_FRAGMENT, 0);
+ assertThat(pathTrie.get(PathFragment.EMPTY_FRAGMENT)).isEqualTo(0);
+ assertThat(pathTrie.get(PathFragment.create("/b"))).isEqualTo(0);
+ assertThat(pathTrie.get(PathFragment.create("/a"))).isEqualTo(1);
+ assertThat(pathTrie.get(PathFragment.create("/a/b"))).isEqualTo(1);
+ }
+
+ @Test
+ public void unrootedDirectoriesError() {
+ PathTrie<Integer> pathTrie = new PathTrie<>();
+ assertThrows(IllegalArgumentException.class, () -> pathTrie.put(PathFragment.create("a"), 1));
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/SearchPathTest.java b/src/test/java/com/google/devtools/build/lib/vfs/SearchPathTest.java
index b49af40df9..6c545ac790 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/SearchPathTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/SearchPathTest.java
@@ -38,7 +38,7 @@ public class SearchPathTest {
assertThat(SearchPath.parse(fs, "/:/bin")).isEqualTo(searchPath);
assertThat(SearchPath.parse(fs, ".:/:/bin")).isEqualTo(searchPath);
- fs.getOutputStream(fs.getPath("/bin/exe").getLocalPath()).write(new byte[5]);
+ fs.getOutputStream(fs.getPath("/bin/exe")).write(new byte[5]);
assertThat(SearchPath.which(searchPath, "exe")).isNull();
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/SymlinkAwareFileSystemTest.java b/src/test/java/com/google/devtools/build/lib/vfs/SymlinkAwareFileSystemTest.java
index b9f6485c8a..4720a6e773 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/SymlinkAwareFileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/SymlinkAwareFileSystemTest.java
@@ -78,7 +78,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
assertThat(linkPath.isDirectory(Symlinks.NOFOLLOW)).isFalse();
assertThat(linkPath.isDirectory(Symlinks.FOLLOW)).isFalse();
- if (testFS.supportsSymbolicLinksNatively(linkPath.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(linkPath)) {
assertThat(linkPath.getFileSize(Symlinks.NOFOLLOW)).isEqualTo(newPath.toString().length());
assertThat(linkPath.getFileSize()).isEqualTo(newPath.getFileSize(Symlinks.NOFOLLOW));
}
@@ -196,7 +196,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
PathFragment relative = PathFragment.create(linkTarget);
linkPath.delete();
createSymbolicLink(linkPath, relative);
- if (testFS.supportsSymbolicLinksNatively(linkPath.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(linkPath)) {
assertThat(linkPath.getFileSize(Symlinks.NOFOLLOW)).isEqualTo(linkTarget.length());
assertThat(linkPath.readSymbolicLink()).isEqualTo(relative);
}
@@ -224,7 +224,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
// The path may not be a symlink, neither on Darwin nor on Linux.
String nonLinkEntry = null;
- for (String child : testFS.getDirectoryEntries(rootPath.getLocalPath())) {
+ for (String child : testFS.getDirectoryEntries(rootPath)) {
Path p = rootPath.getChild(child);
if (!p.isSymbolicLink() && p.isDirectory()) {
nonLinkEntry = p.getBaseName();
@@ -259,7 +259,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
Path link = absolutize("recursive-link");
createSymbolicLink(link, link);
- if (testFS.supportsSymbolicLinksNatively(link.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(link)) {
try {
link.resolveSymbolicLinks();
fail();
@@ -276,7 +276,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
createSymbolicLink(link2, link1);
createSymbolicLink(link1, link2);
- if (testFS.supportsSymbolicLinksNatively(link1.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(link1)) {
try {
link1.resolveSymbolicLinks();
fail();
@@ -288,7 +288,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
@Test
public void testResolveSymbolicLinksENOENT() {
- if (testFS.supportsSymbolicLinksNatively(xDanglingLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(xDanglingLink)) {
try {
xDanglingLink.resolveSymbolicLinks();
fail();
@@ -302,7 +302,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
public void testResolveSymbolicLinksENOTDIR() throws IOException {
Path badLinkTarget = xFile.getChild("bad"); // parent is not a directory!
Path badLink = absolutize("badLink");
- if (testFS.supportsSymbolicLinksNatively(badLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(badLink)) {
createSymbolicLink(badLink, badLinkTarget);
try {
badLink.resolveSymbolicLinks();
@@ -317,7 +317,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
@Test
public void testResolveSymbolicLinksWithUplevelRefs() throws IOException {
- if (testFS.supportsSymbolicLinksNatively(xLinkToFile.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(xLinkToFile)) {
// Create a series of links that refer to xFile as ./xFile,
// ./../foo/xFile, ./../../bar/foo/xFile, etc. They should all resolve
// to xFile.
@@ -335,7 +335,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
@Test
public void testReadSymbolicLink() throws IOException {
- if (testFS.supportsSymbolicLinksNatively(xDanglingLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(xDanglingLink)) {
assertThat(xDanglingLink.readSymbolicLink().toString()).isEqualTo(xNothing.toString());
}
@@ -364,7 +364,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
throws IOException {
xEmptyDirectory.setWritable(false);
Path xChildOfReadonlyDir = xEmptyDirectory.getChild("x");
- if (testFS.supportsSymbolicLinksNatively(xChildOfReadonlyDir.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(xChildOfReadonlyDir)) {
try {
xChildOfReadonlyDir.createSymbolicLink(xNothing);
fail();
@@ -386,7 +386,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
assertThat(someLink.isSymbolicLink()).isTrue();
assertThat(someLink.exists(Symlinks.NOFOLLOW)).isTrue(); // the link itself exists
assertThat(someLink.exists()).isFalse(); // ...but the referent doesn't
- if (testFS.supportsSymbolicLinksNatively(someLink.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(someLink)) {
try {
someLink.resolveSymbolicLinks();
} catch (FileNotFoundException e) {
@@ -398,7 +398,7 @@ public abstract class SymlinkAwareFileSystemTest extends FileSystemTest {
@Test
public void testCannotCreateSymbolicLinkWithoutParent() throws IOException {
Path xChildOfMissingDir = xNothing.getChild("x");
- if (testFS.supportsSymbolicLinksNatively(xChildOfMissingDir.getLocalPath())) {
+ if (testFS.supportsSymbolicLinksNatively(xChildOfMissingDir)) {
try {
xChildOfMissingDir.createSymbolicLink(xFile);
fail();
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java b/src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java
index a330197a99..1e877a5255 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/UnionFileSystemTest.java
@@ -54,8 +54,8 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
private UnionFileSystem createDefaultUnionFileSystem() {
return new UnionFileSystem(
ImmutableMap.of(
- LocalPath.create("/in"), inDelegate,
- LocalPath.create("/out"), outDelegate),
+ PathFragment.create("/in"), inDelegate,
+ PathFragment.create("/out"), outDelegate),
defaultDelegate);
}
@@ -76,9 +76,9 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
@Test
public void testBasicDelegation() throws Exception {
unionfs = createDefaultUnionFileSystem();
- LocalPath fooPath = LocalPath.create("/foo");
- LocalPath inPath = LocalPath.create("/in");
- LocalPath outPath = LocalPath.create("/out/in.txt");
+ Path fooPath = unionfs.getPath("/foo");
+ Path inPath = unionfs.getPath("/in");
+ Path outPath = unionfs.getPath("/out/in.txt");
assertThat(unionfs.getDelegate(inPath)).isSameAs(inDelegate);
assertThat(unionfs.getDelegate(outPath)).isSameAs(outDelegate);
assertThat(unionfs.getDelegate(fooPath)).isSameAs(defaultDelegate);
@@ -101,7 +101,7 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
@Test
public void testDefaultFileSystemRequired() throws Exception {
try {
- new UnionFileSystem(ImmutableMap.of(), null);
+ new UnionFileSystem(ImmutableMap.<PathFragment, FileSystem>of(), null);
fail("Able to create a UnionFileSystem with no default!");
} catch (NullPointerException expected) {
// OK - should fail in this case.
@@ -114,16 +114,16 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
public void testPrefixDelegation() throws Exception {
unionfs =
new UnionFileSystem(
- ImmutableMap.of(
- LocalPath.create("/foo"), inDelegate,
- LocalPath.create("/foo/bar"), outDelegate),
+ ImmutableMap.<PathFragment, FileSystem>of(
+ PathFragment.create("/foo"), inDelegate,
+ PathFragment.create("/foo/bar"), outDelegate),
defaultDelegate);
- assertThat(unionfs.getDelegate(LocalPath.create("/foo/foo.txt"))).isSameAs(inDelegate);
- assertThat(unionfs.getDelegate(LocalPath.create("/foo/bar/foo.txt"))).isSameAs(outDelegate);
- assertThat(unionfs.getDelegate(LocalPath.create("/foo/bar/../foo.txt"))).isSameAs(inDelegate);
- assertThat(unionfs.getDelegate(LocalPath.create("/bar/foo.txt"))).isSameAs(defaultDelegate);
- assertThat(unionfs.getDelegate(LocalPath.create("/foo/bar/../.."))).isSameAs(defaultDelegate);
+ assertThat(unionfs.getDelegate(unionfs.getPath("/foo/foo.txt"))).isSameAs(inDelegate);
+ assertThat(unionfs.getDelegate(unionfs.getPath("/foo/bar/foo.txt"))).isSameAs(outDelegate);
+ assertThat(unionfs.getDelegate(unionfs.getPath("/foo/bar/../foo.txt"))).isSameAs(inDelegate);
+ assertThat(unionfs.getDelegate(unionfs.getPath("/bar/foo.txt"))).isSameAs(defaultDelegate);
+ assertThat(unionfs.getDelegate(unionfs.getPath("/foo/bar/../.."))).isSameAs(defaultDelegate);
}
// Checks that files cannot be modified when the filesystem is created
@@ -133,17 +133,17 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
unionfs =
new UnionFileSystem(
ImmutableMap.of(
- LocalPath.create("/rw"), new XAttrInMemoryFs(BlazeClock.instance()),
- LocalPath.create("/ro"),
+ PathFragment.create("/rw"), new XAttrInMemoryFs(BlazeClock.instance()),
+ PathFragment.create("/ro"),
new XAttrInMemoryFs(BlazeClock.instance()) {
@Override
- public boolean supportsModifications(LocalPath path) {
+ public boolean supportsModifications(Path path) {
return false;
}
}),
defaultDelegate);
- LocalPath rwPath = LocalPath.create("/rw/foo.txt");
- LocalPath roPath = LocalPath.create("/ro/foo.txt");
+ Path rwPath = unionfs.getPath("/rw/foo.txt");
+ Path roPath = unionfs.getPath("/ro/foo.txt");
assertThat(unionfs.supportsModifications(rwPath)).isTrue();
assertThat(unionfs.supportsModifications(roPath)).isFalse();
}
@@ -152,18 +152,18 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
// delegate filesystems; i.e. they can be seen from the filesystem of the parent.
@Test
public void testDelegateRootDirectoryCreation() throws Exception {
- LocalPath foo = LocalPath.create("/foo");
- LocalPath bar = LocalPath.create("/bar");
- LocalPath out = LocalPath.create("/out");
+ Path foo = unionfs.getPath("/foo");
+ Path bar = unionfs.getPath("/bar");
+ Path out = unionfs.getPath("/out");
assertThat(unionfs.createDirectory(foo)).isTrue();
assertThat(unionfs.createDirectory(bar)).isTrue();
assertThat(unionfs.createDirectory(out)).isTrue();
- LocalPath outFile = LocalPath.create("/out/in");
- FileSystemUtils.writeContentAsLatin1(unionfs, outFile, "Out");
+ Path outFile = unionfs.getPath("/out/in");
+ FileSystemUtils.writeContentAsLatin1(outFile, "Out");
// FileSystemTest.setUp() silently creates the test root on the filesystem...
Path testDirUnderRoot = unionfs.getPath(workingDir.asFragment().subFragment(0, 1));
- assertThat(unionfs.getDirectoryEntries(LocalPath.create("/")))
+ assertThat(unionfs.getDirectoryEntries(unionfs.getRootDirectory()))
.containsExactly(
foo.getBaseName(),
bar.getBaseName(),
@@ -172,30 +172,31 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
assertThat(unionfs.getDirectoryEntries(out)).containsExactly(outFile.getBaseName());
assertThat(defaultDelegate).isSameAs(unionfs.getDelegate(foo));
- assertThat(unionfs.adjustPath(foo, defaultDelegate)).isEqualTo(foo);
+ assertThat(unionfs.adjustPath(foo, defaultDelegate).asFragment()).isEqualTo(foo.asFragment());
assertThat(defaultDelegate).isSameAs(unionfs.getDelegate(bar));
assertThat(outDelegate).isSameAs(unionfs.getDelegate(outFile));
assertThat(outDelegate).isSameAs(unionfs.getDelegate(out));
// As a fragment (i.e. without filesystem or root info), the path name should be preserved.
- assertThat(unionfs.adjustPath(outFile, outDelegate)).isEqualTo(outFile);
+ assertThat(unionfs.adjustPath(outFile, outDelegate).asFragment())
+ .isEqualTo(outFile.asFragment());
}
// Ensure that the right filesystem is still chosen when paths contain "..".
@Test
public void testDelegationOfUpLevelReferences() throws Exception {
- assertThat(unionfs.getDelegate(LocalPath.create("/in/../foo.txt"))).isSameAs(defaultDelegate);
- assertThat(unionfs.getDelegate(LocalPath.create("/out/../in"))).isSameAs(inDelegate);
- assertThat(unionfs.getDelegate(LocalPath.create("/out/../in/../out/foo.txt")))
+ assertThat(unionfs.getDelegate(unionfs.getPath("/in/../foo.txt"))).isSameAs(defaultDelegate);
+ assertThat(unionfs.getDelegate(unionfs.getPath("/out/../in"))).isSameAs(inDelegate);
+ assertThat(unionfs.getDelegate(unionfs.getPath("/out/../in/../out/foo.txt")))
.isSameAs(outDelegate);
- assertThat(unionfs.getDelegate(LocalPath.create("/in/./foo.txt"))).isSameAs(inDelegate);
+ assertThat(unionfs.getDelegate(unionfs.getPath("/in/./foo.txt"))).isSameAs(inDelegate);
}
// Basic *explicit* cross-filesystem symlink check.
// Note: This does not work implicitly yet, as the next test illustrates.
@Test
public void testCrossDeviceSymlinks() throws Exception {
- assertThat(unionfs.createDirectory(LocalPath.create("/out"))).isTrue();
+ assertThat(unionfs.createDirectory(unionfs.getPath("/out"))).isTrue();
// Create an "/in" directory directly on the output delegate to bypass the
// UnionFileSystem's mapping.
@@ -204,8 +205,8 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
outStream.write('i');
outStream.close();
- LocalPath outFoo = LocalPath.create("/out/foo");
- unionfs.createSymbolicLink(outFoo, "../in/bar.txt");
+ Path outFoo = unionfs.getPath("/out/foo");
+ unionfs.createSymbolicLink(outFoo, PathFragment.create("../in/bar.txt"));
assertThat(unionfs.stat(outFoo, false).isSymbolicLink()).isTrue();
try {
@@ -215,13 +216,24 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
// OK
}
- LocalPath resolved = unionfs.resolveSymbolicLinks(outFoo);
- InputStream barInput = unionfs.getInputStream(resolved);
+ Path resolved = unionfs.resolveSymbolicLinks(outFoo);
+ assertThat(resolved.getFileSystem()).isSameAs(unionfs);
+ InputStream barInput = resolved.getInputStream();
int barChar = barInput.read();
barInput.close();
assertThat(barChar).isEqualTo('i');
}
+ @Test
+ public void testNoDelegateLeakage() throws Exception {
+ assertThat(unionfs.getPath("/in/foo.txt").getFileSystem()).isSameAs(unionfs);
+ assertThat(unionfs.getPath("/in/foo/bar").getParentDirectory().getFileSystem())
+ .isSameAs(unionfs);
+ unionfs.createDirectory(unionfs.getPath("/out"));
+ unionfs.createDirectory(unionfs.getPath("/out/foo"));
+ unionfs.createDirectory(unionfs.getPath("/out/foo/bar"));
+ }
+
// Write using the VFS through a UnionFileSystem and check that the file can
// be read back in the same location using standard Java IO.
// There is a similar test in UnixFileSystem, but this is essential to ensure
@@ -230,11 +242,12 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
public void testDelegateOperationsReflectOnLocalFilesystem() throws Exception {
unionfs =
new UnionFileSystem(
- ImmutableMap.of(workingDir.getLocalPath().getParentDirectory(), new UnixFileSystem()),
+ ImmutableMap.<PathFragment, FileSystem>of(
+ workingDir.getParentDirectory().asFragment(), new UnixFileSystem()),
defaultDelegate);
// This is a child of the current tmpdir, and doesn't exist on its own.
// It would be created in setup(), but of course, that didn't use a UnixFileSystem.
- unionfs.createDirectory(workingDir.getLocalPath());
+ unionfs.createDirectory(workingDir);
Path testFile = unionfs.getPath(workingDir.getRelative("test_file").asFragment());
assertThat(testFile.asFragment().startsWith(workingDir.asFragment())).isTrue();
String testString = "This is a test file";
@@ -243,7 +256,7 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
assertThat(new String(FileSystemUtils.readContentAsLatin1(testFile))).isEqualTo(testString);
} finally {
testFile.delete();
- assertThat(unionfs.delete(workingDir.getLocalPath())).isTrue();
+ assertThat(unionfs.delete(workingDir)).isTrue();
}
}
@@ -252,7 +265,8 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
public void testCreateParentsAcrossMapping() throws Exception {
unionfs =
new UnionFileSystem(
- ImmutableMap.of(LocalPath.create("/out/dir"), outDelegate), defaultDelegate);
+ ImmutableMap.<PathFragment, FileSystem>of(PathFragment.create("/out/dir"), outDelegate),
+ defaultDelegate);
Path outDir = unionfs.getPath("/out/dir/biz/bang");
FileSystemUtils.createDirectoryAndParents(outDir);
assertThat(outDir.isDirectory()).isTrue();
@@ -264,7 +278,8 @@ public class UnionFileSystemTest extends SymlinkAwareFileSystemTest {
}
@Override
- public byte[] getxattr(LocalPath path, String name) {
+ public byte[] getxattr(Path path, String name) {
+ assertThat(path.getFileSystem()).isSameAs(this);
return (name.equals(XATTR_KEY)) ? XATTR_VAL.getBytes(UTF_8) : null;
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/UnixLocalPathTest.java b/src/test/java/com/google/devtools/build/lib/vfs/UnixLocalPathTest.java
index 16ae52cc4c..2cdb4014ae 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/UnixLocalPathTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/UnixLocalPathTest.java
@@ -162,17 +162,6 @@ public class UnixLocalPathTest extends LocalPathAbstractTest {
assertThat(create("/..")).isEqualTo(create("/.."));
}
- @Test
- public void testRootsUnix() {
- assertThat(create("/").getDrive().getPathString()).isEqualTo("/");
- assertThat(create("/usr").getDrive().getPathString()).isEqualTo("/");
- assertThrows(IllegalArgumentException.class, () -> create("").getDrive());
-
- assertThat(create("/").isRoot()).isTrue();
- assertThat(create("/usr").isRoot()).isFalse();
- assertThat(create("").isRoot()).isFalse();
- }
-
@Override
protected OsPathPolicy getFilePathOs() {
return new UnixOsPathPolicy();
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/WindowsLocalPathTest.java b/src/test/java/com/google/devtools/build/lib/vfs/WindowsLocalPathTest.java
index 88c7b6f248..ac5acef1f4 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/WindowsLocalPathTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/WindowsLocalPathTest.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.vfs;
import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows;
import com.google.common.testing.EqualsTester;
+import com.google.devtools.build.lib.testutil.MoreAsserts;
import com.google.devtools.build.lib.vfs.LocalPath.OsPathPolicy;
import com.google.devtools.build.lib.vfs.LocalPath.WindowsOsPathPolicy;
import com.google.devtools.build.lib.vfs.LocalPath.WindowsOsPathPolicy.ShortPathResolver;
@@ -101,14 +101,8 @@ public class WindowsLocalPathTest extends LocalPathAbstractTest {
@Test
public void testisAbsoluteWindows() {
assertThat(create("C:/").isAbsolute()).isTrue();
- }
-
- // We support unix paths to make test sharing easier
- @Test
- public void testUnixPathSupport() {
+ // test that msys paths turn into absolute paths
assertThat(create("/").isAbsolute()).isTrue();
- assertThat(create("/foo").isAbsolute()).isTrue();
- assertThat(create("/foo").getParentDirectory().getPathString()).isEqualTo("/");
}
@Test
@@ -116,7 +110,22 @@ public class WindowsLocalPathTest extends LocalPathAbstractTest {
assertThat(create("C:/foo").relativeTo(create("C:/"))).isEqualTo(create("foo"));
// Case insensitivity test
assertThat(create("C:/foo/bar").relativeTo(create("C:/FOO"))).isEqualTo(create("bar"));
- assertThrows(IllegalArgumentException.class, () -> create("D:/foo").relativeTo(create("C:/")));
+ MoreAsserts.assertThrows(
+ IllegalArgumentException.class, () -> create("D:/foo").relativeTo(create("C:/")));
+ }
+
+ @Test
+ public void testAbsoluteUnixPathIsRelativeToWindowsUnixRoot() {
+ assertThat(create("/").getPathString()).isEqualTo("C:/fake/msys");
+ assertThat(create("/foo/bar").getPathString()).isEqualTo("C:/fake/msys/foo/bar");
+ assertThat(create("/foo/bar").getPathString()).isEqualTo("C:/fake/msys/foo/bar");
+ }
+
+ @Test
+ public void testAbsoluteUnixPathReferringToDriveIsRecognized() {
+ assertThat(create("/c/foo").getPathString()).isEqualTo("C:/foo");
+ assertThat(create("/c/foo").getPathString()).isEqualTo("C:/foo");
+ assertThat(create("/c:").getPathString()).isNotEqualTo("C:/foo");
}
@Test
@@ -152,16 +161,4 @@ public class WindowsLocalPathTest extends LocalPathAbstractTest {
// Assert relative paths that look like short paths are untouched
assertThat(create("progra~1").getPathString()).isEqualTo("progra~1");
}
-
- @Test
- public void testRootsWindows() {
- assertThat(create("C:/").getDrive().getPathString()).isEqualTo("C:/");
- assertThat(create("C:/usr").getDrive().getPathString()).isEqualTo("C:/");
- assertThrows(IllegalArgumentException.class, () -> create("").getDrive());
-
- assertThat(create("C:/").isRoot()).isFalse();
- assertThat(create("C:/usr").isRoot()).isFalse();
- assertThat(create("/").isRoot()).isTrue();
- assertThat(create("").isRoot()).isFalse();
- }
}
diff --git a/src/test/java/com/google/devtools/build/lib/windows/WindowsFileSystemTest.java b/src/test/java/com/google/devtools/build/lib/windows/WindowsFileSystemTest.java
index d50b243f5f..8937c453a7 100644
--- a/src/test/java/com/google/devtools/build/lib/windows/WindowsFileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/windows/WindowsFileSystemTest.java
@@ -25,6 +25,7 @@ import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.testutil.TestSpec;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Symlinks;
import com.google.devtools.build.lib.windows.WindowsFileSystem.WindowsPath;
import com.google.devtools.build.lib.windows.jni.WindowsFileOperations;
@@ -99,9 +100,9 @@ public class WindowsFileSystemTest {
assertThat(juncBadPath.exists(Symlinks.NOFOLLOW)).isTrue();
// TODO(bazel-team): fix https://github.com/bazelbuild/bazel/issues/1690 and uncomment the
// assertion below.
- // assertThat(fs.isSymbolicLink(juncBadPath)).isTrue();
- assertThat(fs.isDirectory(juncBadPath.getLocalPath(), /* followSymlinks */ true)).isFalse();
- assertThat(fs.isDirectory(juncBadPath.getLocalPath(), /* followSymlinks */ false)).isFalse();
+ //assertThat(fs.isSymbolicLink(juncBadPath)).isTrue();
+ assertThat(fs.isDirectory(juncBadPath, /* followSymlinks */ true)).isFalse();
+ assertThat(fs.isDirectory(juncBadPath, /* followSymlinks */ false)).isFalse();
// Test deleting a dangling junction.
assertThat(juncBadPath.delete()).isTrue();
@@ -332,21 +333,19 @@ public class WindowsFileSystemTest {
assertThat(fs.getPath(scratchRoot).createDirectory()).isTrue();
// Create symlink with directory target, relative path.
Path link1 = fs.getPath(scratchRoot).getRelative("link1");
- fs.createSymbolicLink(link1.getLocalPath(), "..");
+ fs.createSymbolicLink(link1, PathFragment.create(".."));
// Create symlink with directory target, absolute path.
Path link2 = fs.getPath(scratchRoot).getRelative("link2");
- fs.createSymbolicLink(
- link2.getLocalPath(), fs.getPath(scratchRoot).getRelative("link1").getPathString());
+ fs.createSymbolicLink(link2, fs.getPath(scratchRoot).getRelative("link1").asFragment());
// Create scratch files that'll be symlink targets.
testUtil.scratchFile("foo.txt", "hello");
testUtil.scratchFile("bar.txt", "hello");
// Create symlink with file target, relative path.
Path link3 = fs.getPath(scratchRoot).getRelative("link3");
- fs.createSymbolicLink(link3.getLocalPath(), "foo.txt");
+ fs.createSymbolicLink(link3, PathFragment.create("foo.txt"));
// Create symlink with file target, absolute path.
Path link4 = fs.getPath(scratchRoot).getRelative("link4");
- fs.createSymbolicLink(
- link4.getLocalPath(), fs.getPath(scratchRoot).getRelative("bar.txt").getPathString());
+ fs.createSymbolicLink(link4, fs.getPath(scratchRoot).getRelative("bar.txt").asFragment());
// Assert that link1 and link2 are true junctions and have the right contents.
for (Path p : ImmutableList.of(link1, link2)) {
assertThat(WindowsFileOperations.isJunction(p.getPathString())).isTrue();