aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
diff options
context:
space:
mode:
authorGravatar Philipp Wollermann <philwo@google.com>2017-02-01 13:45:55 +0000
committerGravatar Yun Peng <pcloudy@google.com>2017-02-01 14:31:25 +0000
commit4ca5dfa0a66e9baf6c3953830fc53e6da27b9f42 (patch)
treeadc4f37dfa5141eb21c699d3edf5b1330f6d0353 /src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
parent46d31b5f1e3201651bf621da2674ff2f070ce824 (diff)
Add a flag to print the effective (Spawn)ActionContexts for debugging.
By specifying the flag "--debug_print_action_contexts", Bazel will print the contents of the internal SpawnActionContext and ContextMap maps, which allows developers to see which kind of actions are run using which strategy. Example output of Bazel at HEAD: $ ./output/bazel build --debug_print_action_contexts INFO: SpawnActionContextMap: "" = LinuxSandboxedStrategy INFO: SpawnActionContextMap: "Closure" = WorkerSpawnStrategy INFO: SpawnActionContextMap: "Javac" = WorkerSpawnStrategy INFO: ContextMap: Context = BazelWorkspaceStatusActionContext INFO: ContextMap: CppCompileActionContext = SpawnGccStrategy INFO: ContextMap: CppLinkActionContext = SpawnLinkStrategy INFO: ContextMap: FileWriteActionContext = FileWriteStrategy INFO: ContextMap: FilesetActionContext = FilesetActionContextImpl INFO: ContextMap: IncludeScanningContext = DummyIncludeScanningContext INFO: ContextMap: SpawnActionContext = LinuxSandboxedStrategy INFO: ContextMap: SymlinkTreeActionContext = SymlinkTreeStrategy INFO: ContextMap: TestActionContext = ExclusiveTestStrategy (Can you spot the bug found by this feature here? The default TestActionContext is ExclusiveTestStrategy, which is probably not what we want.) -- PiperOrigin-RevId: 146233390 MOS_MIGRATED_REVID=146233390
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
new file mode 100644
index 0000000000..105829a8c2
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
@@ -0,0 +1,85 @@
+// Copyright 2016 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.exec;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.actions.SpawnActionContext;
+import com.google.devtools.build.lib.analysis.BlazeDirectories;
+import com.google.devtools.build.lib.analysis.config.BinTools;
+import com.google.devtools.build.lib.events.Event;
+import com.google.devtools.build.lib.events.Reporter;
+import com.google.devtools.build.lib.events.StoredEventHandler;
+import com.google.devtools.build.lib.exec.util.TestExecutorBuilder;
+import com.google.devtools.build.lib.testutil.Suite;
+import com.google.devtools.build.lib.testutil.TestSpec;
+import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
+import com.google.devtools.common.options.OptionsParser;
+import javax.annotation.Nullable;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.Mockito;
+
+/** Tests for {@link BlazeExecutor}. */
+@RunWith(JUnit4.class)
+@TestSpec(size = Suite.SMALL_TESTS)
+public class BlazeExecutorTest {
+ private BlazeDirectories directories;
+ private BinTools binTools;
+
+ @Before
+ public final void setUpDirectoriesAndTools() throws Exception {
+ InMemoryFileSystem fs = new InMemoryFileSystem();
+ directories =
+ new BlazeDirectories(
+ fs.getPath("/install"),
+ fs.getPath("/base"),
+ fs.getPath("/workspace"),
+ "mock-product-name");
+ binTools = BinTools.empty(directories);
+ }
+
+ @Test
+ public void testDebugPrintActionContexts() throws Exception {
+ TestExecutorBuilder builder = new TestExecutorBuilder(directories, binTools);
+ OptionsParser parser = OptionsParser.newOptionsParser(TestExecutorBuilder.DEFAULT_OPTIONS);
+ parser.parse("--debug_print_action_contexts");
+
+ Reporter reporter = new Reporter();
+ StoredEventHandler storedEventHandler = new StoredEventHandler();
+ reporter.addHandler(storedEventHandler);
+
+ SpawnActionContext mockStrategy = Mockito.mock(SpawnActionContext.class);
+
+ builder.setReporter(reporter).setOptionsParser(parser).setExecution("mock", mockStrategy);
+ builder.build();
+
+ Event event =
+ Iterables.find(
+ storedEventHandler.getEvents(),
+ new Predicate<Event>() {
+ @Override
+ public boolean apply(@Nullable Event event) {
+ return event.getMessage().contains("SpawnActionContextMap: \"mock\" = ");
+ }
+ });
+ assertThat(event).isNotNull();
+ assertThat(event.getMessage())
+ .contains("\"mock\" = " + mockStrategy.getClass().getSimpleName());
+ }
+}