aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Philipp Wollermann <philwo@google.com>2015-11-25 13:52:17 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-11-25 16:08:17 +0000
commit1ee9441f1839f62d82012636b1bfde6e8561c979 (patch)
tree227ebb5872d556e13109ce2b790feee235649da4
parentdcd77a0d616f1289191f49536cb4ab84465d9fe8 (diff)
Open-source StandaloneTests.
-- MOS_MIGRATED_REVID=108699857
-rw-r--r--src/test/java/com/google/devtools/build/lib/BUILD26
-rw-r--r--src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java197
2 files changed, 223 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index b8f4cfacbe..e547541985 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -921,6 +921,32 @@ java_test(
)
java_test(
+ name = "standalone-tests",
+ srcs = glob(["standalone/*.java"]),
+ args = ["com.google.devtools.build.lib.AllTests"],
+ data = [":embedded_scripts"],
+ deps = [
+ ":actions_testutil",
+ ":analysis_testutil",
+ ":foundations_testutil",
+ ":testutil",
+ "//src/main/java/com/google/devtools/build/lib:analysis-exec-rules-skyframe",
+ "//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: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/standalone",
+ "//src/main/java/com/google/devtools/common/options",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
name = "exec-tests",
srcs = glob(["exec/*.java"]),
args = ["com.google.devtools.build.lib.AllTests"],
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
new file mode 100644
index 0000000000..7e483e3822
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
@@ -0,0 +1,197 @@
+// Copyright 2015 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.standalone;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableList;
+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.ActionContextProvider;
+import com.google.devtools.build.lib.actions.ActionExecutionContext;
+import com.google.devtools.build.lib.actions.BaseSpawn;
+import com.google.devtools.build.lib.actions.BlazeExecutor;
+import com.google.devtools.build.lib.actions.ExecException;
+import com.google.devtools.build.lib.actions.Executor.ActionContext;
+import com.google.devtools.build.lib.actions.Spawn;
+import com.google.devtools.build.lib.actions.SpawnActionContext;
+import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
+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.ExecutionOptions;
+import com.google.devtools.build.lib.exec.SingleBuildFileCache;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
+import com.google.devtools.build.lib.testutil.BlazeTestUtils;
+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.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.OptionsParser;
+
+import junit.framework.TestCase;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * Test StandaloneSpawnStrategy.
+ */
+public class StandaloneSpawnStrategyTest extends TestCase {
+
+ private Reporter reporter = new Reporter(PrintingEventHandler.ERRORS_AND_WARNINGS_TO_STDERR);
+ private BlazeExecutor executor;
+ private FileSystem fileSystem;
+
+ private Path createTestRoot() throws IOException {
+ fileSystem = FileSystems.initDefaultAsNative();
+ Path testRoot = fileSystem.getPath(TestUtils.tmpDir());
+ try {
+ FileSystemUtils.deleteTreesBelow(testRoot);
+ } catch (IOException e) {
+ System.err.println("Failed to remove directory " + testRoot + ": " + e.getMessage());
+ throw e;
+ }
+ return testRoot;
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ Path testRoot = createTestRoot();
+ Path workspaceDir = testRoot.getRelative(TestConstants.WORKSPACE_NAME);
+ workspaceDir.createDirectory();
+
+ // setup output base & directories
+ Path outputBase = testRoot.getRelative("outputBase");
+ outputBase.createDirectory();
+
+ BlazeDirectories directories = new BlazeDirectories(outputBase, outputBase, workspaceDir);
+ BlazeTestUtils.getIntegrationBinTools(directories);
+ OptionsParser optionsParser = OptionsParser.newOptionsParser(ExecutionOptions.class);
+ optionsParser.parse("--verbose_failures");
+
+ EventBus bus = new EventBus();
+
+ this.executor = new BlazeExecutor(
+ directories.getExecRoot(),
+ directories.getOutputPath(),
+ reporter, bus,
+ BlazeClock.instance(),
+ optionsParser,
+ /* verboseFailures */ false,
+ /* showSubcommands */ false,
+ ImmutableList.<ActionContext>of(),
+ ImmutableMap.<String, SpawnActionContext>of("",
+ new StandaloneSpawnStrategy(directories.getExecRoot(), false)),
+ ImmutableList.<ActionContextProvider>of());
+
+ executor.getExecRoot().createDirectory();
+ }
+
+ private Spawn createSpawn(String... arguments) {
+ return new BaseSpawn.Local(Arrays.asList(arguments), ImmutableMap.<String, String>of(),
+ new ActionsTestUtil.NullAction());
+ }
+
+ private TestFileOutErr outErr = new TestFileOutErr();
+
+ private String out() {
+ return outErr.outAsLatin1();
+ }
+ private String err() {
+ return outErr.errAsLatin1();
+ }
+
+ public void testBinTrueExecutesFine() throws Exception {
+ Spawn spawn = createSpawn("/bin/true");
+ executor.getSpawnActionContext(spawn.getMnemonic()).exec(spawn, createContext());
+
+ assertThat(out()).isEmpty();
+ assertThat(err()).isEmpty();
+ }
+
+ private void run(Spawn spawn) throws Exception {
+ executor.getSpawnActionContext(spawn.getMnemonic()).exec(spawn, createContext());
+ }
+ private ActionExecutionContext createContext() {
+ Path execRoot = executor.getExecRoot();
+ return new ActionExecutionContext(
+ executor,
+ new SingleBuildFileCache(execRoot.getPathString(), execRoot.getFileSystem()),
+ null,
+ outErr,
+ null);
+ }
+
+ public void testBinFalseYieldsException() throws Exception {
+ try {
+ run(createSpawn("/bin/false"));
+ fail();
+ } catch (ExecException e) {
+ assertTrue("got: " + e.getMessage(), e
+ .getMessage().startsWith("false failed: error executing command"));
+ }
+ }
+
+ public void testBinEchoPrintsArguments() throws Exception {
+ Spawn spawn = createSpawn("/bin/echo", "Hello,", "world.");
+ run(spawn);
+ assertEquals("Hello, world.\n", out());
+ assertThat(err()).isEmpty();
+ }
+
+ public void testCommandRunsInWorkingDir() throws Exception {
+ Spawn spawn = createSpawn("/bin/pwd");
+ run(spawn);
+ assertEquals(executor.getExecRoot() + "\n", out());
+ }
+
+ public void testCommandHonorsEnvironment() throws Exception {
+ Spawn spawn = new BaseSpawn.Local(Arrays.asList("/usr/bin/env"),
+ ImmutableMap.of("foo", "bar", "baz", "boo"),
+ new ActionsTestUtil.NullAction());
+ run(spawn);
+ assertEquals(Sets.newHashSet("foo=bar", "baz=boo"), Sets.newHashSet(out().split("\n")));
+ }
+
+ public void testStandardError() throws Exception {
+ Spawn spawn = createSpawn("/bin/sh", "-c", "echo Oops! >&2");
+ run(spawn);
+ assertEquals("Oops!\n", err());
+ assertThat(out()).isEmpty();
+ }
+
+ // Test an action with environment variables set indicating an action running on a darwin host
+ // system. Such actions should fail given the fact that these tests run on a non darwin
+ // architecture.
+ public void testActionOnDarwin() throws Exception {
+ Spawn spawn = new BaseSpawn.Local(Arrays.asList("/bin/sh", "-c", "echo $SDKROOT"),
+ ImmutableMap.<String, String>of(AppleConfiguration.APPLE_SDK_VERSION_ENV_NAME, "8.4",
+ AppleConfiguration.APPLE_SDK_PLATFORM_ENV_NAME, "iPhoneSimulator"),
+ new ActionsTestUtil.NullAction());
+
+ try {
+ run(spawn);
+ fail("action should fail due to being unable to resolve SDKROOT");
+ } catch (ExecException e) {
+ assertThat(e.getMessage()).contains("Cannot locate iOS SDK on non-darwin operating system");
+ }
+ }
+}