Move `StringActionInput` to `ActionsTestUtil`. Move the test-only implementation of `VirtualActionInput` to other helpers in `ActionsTestUtil` so it can be easily reused by tests outside of `remote` package. Make the class anonymous. PiperOrigin-RevId: 340551613
diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java index c7bd424..39b4389 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java +++ b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java
@@ -17,6 +17,7 @@ import static com.google.common.collect.ImmutableSet.toImmutableSet; import static com.google.common.collect.Streams.stream; import static com.google.common.truth.Truth.assertThat; +import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; @@ -58,6 +59,7 @@ import com.google.devtools.build.lib.actions.cache.MetadataHandler; import com.google.devtools.build.lib.actions.cache.Protos.ActionCacheStatistics.MissDetail; import com.google.devtools.build.lib.actions.cache.Protos.ActionCacheStatistics.MissReason; +import com.google.devtools.build.lib.actions.cache.VirtualActionInput; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; @@ -96,7 +98,9 @@ import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.build.skyframe.ValueOrUntypedException; +import com.google.protobuf.ByteString; import java.io.IOException; +import java.io.OutputStream; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; @@ -262,6 +266,45 @@ } /** + * Creates a {@link VirtualActionInput} with given string as contents and provided relative path. + */ + public static VirtualActionInput createVirtualActionInput(String relativePath, String contents) { + return createVirtualActionInput(PathFragment.create(relativePath), contents); + } + + /** Creates a {@link VirtualActionInput} with given string as contents and provided path. */ + public static VirtualActionInput createVirtualActionInput(PathFragment path, String contents) { + return new VirtualActionInput() { + @Override + public ByteString getBytes() throws IOException { + ByteString.Output out = ByteString.newOutput(); + writeTo(out); + return out.toByteString(); + } + + @Override + public String getExecPathString() { + return path.getPathString(); + } + + @Override + public PathFragment getExecPath() { + return path; + } + + @Override + public boolean isSymlink() { + return false; + } + + @Override + public void writeTo(OutputStream out) throws IOException { + out.write(contents.getBytes(UTF_8)); + } + }; + } + + /** * {@link SkyFunction.Environment} that internally makes a full Skyframe evaluate call for the * requested keys, blocking until the values are ready. */
diff --git a/src/test/java/com/google/devtools/build/lib/remote/GrpcCacheClientTest.java b/src/test/java/com/google/devtools/build/lib/remote/GrpcCacheClientTest.java index 6ab2b63..7f12e92 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/GrpcCacheClientTest.java +++ b/src/test/java/com/google/devtools/build/lib/remote/GrpcCacheClientTest.java
@@ -54,6 +54,7 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.devtools.build.lib.actions.ActionInputHelper; import com.google.devtools.build.lib.actions.cache.VirtualActionInput; +import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.authandtls.AuthAndTLSOptions; import com.google.devtools.build.lib.authandtls.CallCredentialsProvider; import com.google.devtools.build.lib.authandtls.GoogleAuthUtils; @@ -64,7 +65,6 @@ import com.google.devtools.build.lib.remote.merkletree.MerkleTree; import com.google.devtools.build.lib.remote.options.RemoteOptions; import com.google.devtools.build.lib.remote.util.DigestUtil; -import com.google.devtools.build.lib.remote.util.StringActionInput; import com.google.devtools.build.lib.remote.util.TestUtils; import com.google.devtools.build.lib.remote.util.TracingMetadataUtils; import com.google.devtools.build.lib.testutil.Scratch; @@ -254,7 +254,8 @@ RemoteExecutionCache client = new RemoteExecutionCache(newClient(options), options, DIGEST_UTIL); PathFragment execPath = PathFragment.create("my/exec/path"); - VirtualActionInput virtualActionInput = new StringActionInput("hello", execPath); + VirtualActionInput virtualActionInput = + ActionsTestUtil.createVirtualActionInput(execPath, "hello"); MerkleTree merkleTree = MerkleTree.build( ImmutableSortedMap.of(execPath, virtualActionInput),
diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java index 838e087..5f991de 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java +++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java
@@ -35,12 +35,10 @@ import com.google.devtools.build.lib.remote.util.DigestUtil; import com.google.devtools.build.lib.remote.util.InMemoryCacheClient; import com.google.devtools.build.lib.remote.util.StaticMetadataProvider; -import com.google.devtools.build.lib.remote.util.StringActionInput; import com.google.devtools.build.lib.vfs.DigestHashFunction; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; import com.google.devtools.common.options.Options; import com.google.protobuf.ByteString; @@ -109,7 +107,7 @@ RemoteCache remoteCache = newCache(options, digestUtil, new HashMap<>()); RemoteActionInputFetcher actionInputFetcher = new RemoteActionInputFetcher(remoteCache, execRoot, RequestMetadata.getDefaultInstance()); - VirtualActionInput a = new StringActionInput("hello world", PathFragment.create("file1")); + VirtualActionInput a = ActionsTestUtil.createVirtualActionInput("file1", "hello world"); // act actionInputFetcher.prefetchFiles(ImmutableList.of(a), metadataProvider);
diff --git a/src/test/java/com/google/devtools/build/lib/remote/merkletree/ActionInputDirectoryTreeTest.java b/src/test/java/com/google/devtools/build/lib/remote/merkletree/ActionInputDirectoryTreeTest.java index 79408f4..e28c616 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/merkletree/ActionInputDirectoryTreeTest.java +++ b/src/test/java/com/google/devtools/build/lib/remote/merkletree/ActionInputDirectoryTreeTest.java
@@ -23,7 +23,6 @@ import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.remote.merkletree.DirectoryTree.FileNode; import com.google.devtools.build.lib.remote.util.StaticMetadataProvider; -import com.google.devtools.build.lib.remote.util.StringActionInput; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; @@ -133,8 +132,9 @@ private static VirtualActionInput addVirtualFile( String path, String content, SortedMap<PathFragment, ActionInput> sortedInputs) { - VirtualActionInput input = new StringActionInput(content, PathFragment.create(path)); - sortedInputs.put(PathFragment.create(path), input); + PathFragment pathFragment = PathFragment.create(path); + VirtualActionInput input = ActionsTestUtil.createVirtualActionInput(pathFragment, content); + sortedInputs.put(pathFragment, input); return input; }
diff --git a/src/test/java/com/google/devtools/build/lib/remote/util/StringActionInput.java b/src/test/java/com/google/devtools/build/lib/remote/util/StringActionInput.java deleted file mode 100644 index e8a6ede..0000000 --- a/src/test/java/com/google/devtools/build/lib/remote/util/StringActionInput.java +++ /dev/null
@@ -1,59 +0,0 @@ -// Copyright 2019 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.remote.util; - -import com.google.devtools.build.lib.actions.cache.VirtualActionInput; -import com.google.devtools.build.lib.vfs.PathFragment; -import com.google.protobuf.ByteString; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; - -/** A virtual action input backed by a string */ -public final class StringActionInput implements VirtualActionInput { - private final String contents; - private final PathFragment execPath; - - public StringActionInput(String contents, PathFragment execPath) { - this.contents = contents; - this.execPath = execPath; - } - - @Override - public boolean isSymlink() { - return false; - } - - @Override - public void writeTo(OutputStream out) throws IOException { - out.write(contents.getBytes(StandardCharsets.UTF_8)); - } - - @Override - public ByteString getBytes() throws IOException { - ByteString.Output out = ByteString.newOutput(); - writeTo(out); - return out.toByteString(); - } - - @Override - public String getExecPathString() { - return execPath.getPathString(); - } - - @Override - public PathFragment getExecPath() { - return execPath; - } -}