diff options
author | Philipp Wollermann <philwo@google.com> | 2017-02-01 13:45:55 +0000 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2017-02-01 14:31:25 +0000 |
commit | 4ca5dfa0a66e9baf6c3953830fc53e6da27b9f42 (patch) | |
tree | adc4f37dfa5141eb21c699d3edf5b1330f6d0353 /src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java | |
parent | 46d31b5f1e3201651bf621da2674ff2f070ce824 (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.java | 85 |
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()); + } +} |