diff options
author | 2017-06-16 15:25:42 +0200 | |
---|---|---|
committer | 2017-06-19 18:23:00 +0200 | |
commit | acd291a520d392977a2efff17949b75c2fa80eef (patch) | |
tree | a3da9f3eda8844425cdbb28d291eedee400c8069 /src/test/java/com/google/devtools/build | |
parent | 560bcb8653947d5d38fa9710c25b7eff6596b2fc (diff) |
Rewrite StandaloneSpawnStrategy to use LocalSpawnRunner
PiperOrigin-RevId: 159221067
Diffstat (limited to 'src/test/java/com/google/devtools/build')
3 files changed, 59 insertions, 15 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index 7a6fa64457..47bb2421d1 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -1130,11 +1130,13 @@ java_test( "//src/main/java/com/google/devtools/build/lib:build-base", "//src/main/java/com/google/devtools/build/lib:clock", "//src/main/java/com/google/devtools/build/lib:events", + "//src/main/java/com/google/devtools/build/lib:io", "//src/main/java/com/google/devtools/build/lib:os_util", "//src/main/java/com/google/devtools/build/lib:shell", "//src/main/java/com/google/devtools/build/lib:util", "//src/main/java/com/google/devtools/build/lib:vfs", "//src/main/java/com/google/devtools/build/lib/actions", + "//src/main/java/com/google/devtools/build/lib/exec/local", "//src/main/java/com/google/devtools/build/lib/rules/apple", "//src/main/java/com/google/devtools/build/lib/standalone", "//src/main/java/com/google/devtools/common/options", diff --git a/src/test/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunnerTest.java b/src/test/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunnerTest.java index d2370b819f..cb4bad6db6 100644 --- a/src/test/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunnerTest.java +++ b/src/test/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunnerTest.java @@ -41,6 +41,7 @@ import com.google.devtools.build.lib.shell.JavaSubprocessFactory; import com.google.devtools.build.lib.shell.Subprocess; import com.google.devtools.build.lib.shell.SubprocessBuilder; import com.google.devtools.build.lib.util.NetUtil; +import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.util.io.FileOutErr; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -218,7 +219,7 @@ public class LocalSpawnRunnerTest { options.localSigkillGraceSeconds = 456; LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), ActionInputPrefetcher.NONE, options, - resourceManager, USE_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + resourceManager, USE_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); timeoutMillis = 123 * 1000L; outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); @@ -253,7 +254,7 @@ public class LocalSpawnRunnerTest { options.localSigkillGraceSeconds = 456; LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), ActionInputPrefetcher.NONE, options, - resourceManager, NO_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + resourceManager, NO_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); timeoutMillis = 123 * 1000L; outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); @@ -283,7 +284,7 @@ public class LocalSpawnRunnerTest { LocalExecutionOptions options = Options.getDefaults(LocalExecutionOptions.class); LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), ActionInputPrefetcher.NONE, options, - resourceManager, USE_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + resourceManager, USE_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); SpawnResult result = runner.exec(SIMPLE_SPAWN, policy); @@ -313,7 +314,7 @@ public class LocalSpawnRunnerTest { LocalExecutionOptions options = Options.getDefaults(LocalExecutionOptions.class); LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), ActionInputPrefetcher.NONE, options, - resourceManager, USE_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + resourceManager, USE_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); assertThat(fs.getPath("/out").createDirectory()).isTrue(); outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); @@ -337,7 +338,7 @@ public class LocalSpawnRunnerTest { options.allowedLocalAction = Pattern.compile("none"); LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), ActionInputPrefetcher.NONE, options, - resourceManager, USE_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + resourceManager, USE_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); outErr = new FileOutErr(); SpawnResult reply = runner.exec(SIMPLE_SPAWN, policy); @@ -376,7 +377,7 @@ public class LocalSpawnRunnerTest { LocalExecutionOptions options = Options.getDefaults(LocalExecutionOptions.class); LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), ActionInputPrefetcher.NONE, options, - resourceManager, USE_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + resourceManager, USE_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); try { @@ -399,7 +400,7 @@ public class LocalSpawnRunnerTest { LocalExecutionOptions options = Options.getDefaults(LocalExecutionOptions.class); LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), mockPrefetcher, options, resourceManager, - USE_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + USE_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); timeoutMillis = 123 * 1000L; outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); @@ -418,7 +419,7 @@ public class LocalSpawnRunnerTest { LocalExecutionOptions options = Options.getDefaults(LocalExecutionOptions.class); LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), mockPrefetcher, options, resourceManager, - USE_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + USE_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); timeoutMillis = 123 * 1000L; outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); @@ -446,7 +447,7 @@ public class LocalSpawnRunnerTest { LocalExecutionOptions options = Options.getDefaults(LocalExecutionOptions.class); LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), mockPrefetcher, options, resourceManager, - USE_WRAPPER, "product-name", LocalEnvProvider.UNMODIFIED); + USE_WRAPPER, OS.LINUX, "product-name", LocalEnvProvider.UNMODIFIED); policy.inputMapping.put(PathFragment.create("relative/path"), null); policy.inputMapping.put( @@ -469,7 +470,7 @@ public class LocalSpawnRunnerTest { LocalExecutionOptions options = Options.getDefaults(LocalExecutionOptions.class); LocalSpawnRunner runner = new LocalSpawnRunner( logger, execCount, fs.getPath("/execroot"), ActionInputPrefetcher.NONE, options, - resourceManager, USE_WRAPPER, "product-name", localEnvProvider); + resourceManager, USE_WRAPPER, OS.LINUX, "product-name", localEnvProvider); timeoutMillis = 123 * 1000L; outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); @@ -478,4 +479,30 @@ public class LocalSpawnRunnerTest { verify(localEnvProvider) .rewriteLocalEnv(any(), eq(fs.getPath("/execroot")), eq("product-name")); } + + @Test + public void useCorrectExtensionOnWindows() throws Exception { + Subprocess.Factory factory = mock(Subprocess.Factory.class); + ArgumentCaptor<SubprocessBuilder> captor = ArgumentCaptor.forClass(SubprocessBuilder.class); + when(factory.create(captor.capture())).thenReturn(new FinishedSubprocess(0)); + SubprocessBuilder.setSubprocessFactory(factory); + + LocalExecutionOptions options = Options.getDefaults(LocalExecutionOptions.class); + options.localSigkillGraceSeconds = 654; + LocalSpawnRunner runner = new LocalSpawnRunner( + logger, execCount, fs.getPath("/execroot"), ActionInputPrefetcher.NONE, options, + resourceManager, USE_WRAPPER, OS.WINDOWS, "product-name", LocalEnvProvider.UNMODIFIED); + + timeoutMillis = 321 * 1000L; + outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); + SpawnResult result = runner.exec(SIMPLE_SPAWN, policy); + verify(factory).create(any(SubprocessBuilder.class)); + assertThat(result.status()).isEqualTo(SpawnResult.Status.SUCCESS); + + assertThat(captor.getValue().getArgv()) + .isEqualTo(ImmutableList.of( + // process-wrapper timeout grace_time stdout stderr + "/execroot/_bin/process-wrapper.exe", "321.0", "654.0", "/out/stdout", "/out/stderr", + "/bin/echo", "Hi!")); + } } diff --git a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java index 5f437637f3..4935545909 100644 --- a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java +++ b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java @@ -22,6 +22,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; import com.google.common.eventbus.EventBus; import com.google.devtools.build.lib.actions.ActionExecutionContext; +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander; import com.google.devtools.build.lib.actions.BaseSpawn; import com.google.devtools.build.lib.actions.ExecException; import com.google.devtools.build.lib.actions.Executor.ActionContext; @@ -34,22 +36,26 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.events.PrintingEventHandler; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.exec.ActionContextProvider; +import com.google.devtools.build.lib.exec.ActionInputPrefetcher; import com.google.devtools.build.lib.exec.BlazeExecutor; import com.google.devtools.build.lib.exec.ExecutionOptions; import com.google.devtools.build.lib.exec.SingleBuildFileCache; +import com.google.devtools.build.lib.exec.local.LocalExecutionOptions; import com.google.devtools.build.lib.integration.util.IntegrationMock; import com.google.devtools.build.lib.testutil.TestConstants; -import com.google.devtools.build.lib.testutil.TestFileOutErr; import com.google.devtools.build.lib.testutil.TestUtils; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.OS; +import com.google.devtools.build.lib.util.io.FileOutErr; 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.util.FileSystems; +import com.google.devtools.common.options.Options; import com.google.devtools.common.options.OptionsParser; import java.io.IOException; import java.util.Arrays; +import java.util.Collection; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -60,11 +66,19 @@ import org.junit.runners.JUnit4; */ @RunWith(JUnit4.class) public class StandaloneSpawnStrategyTest { + private static final ArtifactExpander SIMPLE_ARTIFACT_EXPANDER = + new ArtifactExpander() { + @Override + public void expand(Artifact artifact, Collection<? super Artifact> output) { + output.add(artifact); + } + }; private Reporter reporter = new Reporter(new EventBus(), PrintingEventHandler.ERRORS_AND_WARNINGS_TO_STDERR); private BlazeExecutor executor; private FileSystem fileSystem; + private FileOutErr outErr; private Path createTestRoot() throws IOException { fileSystem = FileSystems.getNativeFileSystem(); @@ -83,6 +97,7 @@ public class StandaloneSpawnStrategyTest { Path testRoot = createTestRoot(); Path workspaceDir = testRoot.getRelative("workspace-name"); workspaceDir.createDirectory(); + outErr = new FileOutErr(testRoot.getRelative("stdout"), testRoot.getRelative("stderr")); // setup output base & directories Path outputBase = testRoot.getRelative("outputBase"); @@ -94,6 +109,7 @@ public class StandaloneSpawnStrategyTest { IntegrationMock.get().getIntegrationBinTools(directories, TestConstants.WORKSPACE_NAME); OptionsParser optionsParser = OptionsParser.newOptionsParser(ExecutionOptions.class); optionsParser.parse("--verbose_failures"); + LocalExecutionOptions localExecutionOptions = Options.getDefaults(LocalExecutionOptions.class); EventBus bus = new EventBus(); @@ -112,7 +128,8 @@ public class StandaloneSpawnStrategyTest { ImmutableMap.<String, SpawnActionContext>of( "", new StandaloneSpawnStrategy( - execRoot, false, "mock-product-name", resourceManager)), + execRoot, ActionInputPrefetcher.NONE, localExecutionOptions, + /*verboseFailures=*/false, "mock-product-name", resourceManager)), ImmutableList.<ActionContextProvider>of()); executor.getExecRoot().createDirectory(); @@ -126,8 +143,6 @@ public class StandaloneSpawnStrategyTest { ResourceSet.ZERO); } - private TestFileOutErr outErr = new TestFileOutErr(); - private String out() { return outErr.outAsLatin1(); } @@ -155,7 +170,7 @@ public class StandaloneSpawnStrategyTest { null, outErr, ImmutableMap.<String, String>of(), - null); + SIMPLE_ARTIFACT_EXPANDER); } @Test |