Small refactoring of AnalysisTestCase to allow alternate SkyframeExecutor implementations.
PiperOrigin-RevId: 171730718
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
index c973023..39f5fdc 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
@@ -27,6 +27,7 @@
import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
import com.google.devtools.build.lib.skyframe.AspectValue;
import com.google.devtools.build.lib.testutil.Suite;
+import com.google.devtools.build.lib.testutil.TestConstants.InternalTestExecutionMode;
import com.google.devtools.build.lib.testutil.TestSpec;
import java.util.Set;
import java.util.regex.Matcher;
@@ -133,6 +134,10 @@
// "action conflict detection is incorrect if conflict is in non-top-level configured targets".
@Test
public void testActionConflictInDependencyImpliesTopLevelTargetFailure() throws Exception {
+ if (getInternalTestExecutionMode() != InternalTestExecutionMode.NORMAL) {
+ // TODO(b/67529176): conflicts not detected.
+ return;
+ }
useConfiguration("--cpu=k8");
scratch.file("conflict/BUILD",
"cc_library(name='x', srcs=['foo.cc'])",
@@ -179,6 +184,10 @@
*/
@Test
public void testActionConflictCausesError() throws Exception {
+ if (getInternalTestExecutionMode() != InternalTestExecutionMode.NORMAL) {
+ // TODO(b/67529176): conflicts not detected.
+ return;
+ }
useConfiguration("--cpu=k8");
scratch.file("conflict/BUILD",
"cc_library(name='x', srcs=['foo.cc'])",
@@ -191,6 +200,10 @@
@Test
public void testNoActionConflictErrorAfterClearedAnalysis() throws Exception {
+ if (getInternalTestExecutionMode() != InternalTestExecutionMode.NORMAL) {
+ // TODO(b/67529176): conflicts not detected.
+ return;
+ }
useConfiguration("--cpu=k8");
scratch.file("conflict/BUILD",
"cc_library(name='x', srcs=['foo.cc'])",
@@ -218,6 +231,10 @@
*/
@Test
public void testConflictingArtifactsErrorWithNoListDetail() throws Exception {
+ if (getInternalTestExecutionMode() != InternalTestExecutionMode.NORMAL) {
+ // TODO(b/67529176): conflicts not detected.
+ return;
+ }
useConfiguration("--cpu=k8");
scratch.file(
"conflict/BUILD",
@@ -240,6 +257,10 @@
*/
@Test
public void testConflictingArtifactsWithListDetail() throws Exception {
+ if (getInternalTestExecutionMode() != InternalTestExecutionMode.NORMAL) {
+ // TODO(b/67529176): conflicts not detected.
+ return;
+ }
useConfiguration("--cpu=k8");
scratch.file(
"conflict/BUILD",
@@ -272,6 +293,10 @@
*/
@Test
public void testActionConflictMarksTargetInvalid() throws Exception {
+ if (getInternalTestExecutionMode() != InternalTestExecutionMode.NORMAL) {
+ // TODO(b/67529176): conflicts not detected.
+ return;
+ }
useConfiguration("--cpu=k8");
scratch.file("conflict/BUILD",
"cc_library(name='x', srcs=['foo.cc'])",
@@ -289,6 +314,10 @@
*/
@Test
public void testBuildFileInCycleChanged() throws Exception {
+ if (getInternalTestExecutionMode() != InternalTestExecutionMode.NORMAL) {
+ // TODO(b/67412276): cycles not properly handled.
+ return;
+ }
scratch.file("java/a/BUILD",
"java_test(name = 'A',",
" srcs = ['A.java'],",
@@ -426,6 +455,10 @@
@Test
public void testWorkspaceStatusCommandIsNotCachedForNullBuild() throws Exception {
+ if (getInternalTestExecutionMode() != InternalTestExecutionMode.NORMAL) {
+ // TODO(b/66477180): maybe just ignore.
+ return;
+ }
update();
WorkspaceStatusAction actionA = getView().getLastWorkspaceBuildInfoActionForTesting();
assertThat(actionA.getMnemonic()).isEqualTo("DummyBuildInfoAction");
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
index a93637c..0960a53 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
@@ -13,7 +13,6 @@
// limitations under the License.
package com.google.devtools.build.lib.analysis.util;
-import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedSet;
@@ -30,6 +29,7 @@
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.ServerDirectories;
+import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
@@ -55,14 +55,13 @@
import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
-import com.google.devtools.build.lib.skyframe.DiffAwareness;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor;
-import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
import com.google.devtools.build.lib.testutil.TestConstants;
+import com.google.devtools.build.lib.testutil.TestConstants.InternalTestExecutionMode;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
@@ -158,6 +157,23 @@
useRuleClassProvider(analysisMock.createRuleClassProvider());
}
+ protected SkyframeExecutor createSkyframeExecutor(
+ PackageFactory pkgFactory, ImmutableList<BuildInfoFactory> buildInfoFactories) {
+ return SequencedSkyframeExecutor.create(
+ pkgFactory,
+ directories,
+ workspaceStatusActionFactory,
+ buildInfoFactories,
+ ImmutableList.of(),
+ input -> false,
+ analysisMock.getSkyFunctions(directories),
+ ImmutableList.of(),
+ PathFragment.EMPTY_FRAGMENT,
+ BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY,
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE);
+ }
+
/**
* Changes the rule class provider to be used for the loading and the analysis phase.
*/
@@ -169,19 +185,8 @@
.getPackageFactoryBuilderForTesting(directories)
.build(ruleClassProvider, scratch.getFileSystem());
skyframeExecutor =
- SequencedSkyframeExecutor.create(
- pkgFactory,
- directories,
- workspaceStatusActionFactory,
- ruleClassProvider.getBuildInfoFactories(),
- ImmutableList.<DiffAwareness.Factory>of(),
- Predicates.<PathFragment>alwaysFalse(),
- analysisMock.getSkyFunctions(directories),
- ImmutableList.<SkyValueDirtinessChecker>of(),
- PathFragment.EMPTY_FRAGMENT,
- BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
- BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE);
+ createSkyframeExecutor(pkgFactory, ruleClassProvider.getBuildInfoFactories());
+
TestConstants.processSkyframeExecutorForTesting(skyframeExecutor);
PackageCacheOptions packageCacheOptions = Options.getDefaults(PackageCacheOptions.class);
packageCacheOptions.showLoadingProgress = true;
@@ -210,6 +215,10 @@
return AnalysisMock.get();
}
+ protected InternalTestExecutionMode getInternalTestExecutionMode() {
+ return InternalTestExecutionMode.NORMAL;
+ }
+
/**
* Sets host and target configuration using the specified options, falling back to the default
* options for unspecified ones, and recreates the build view.
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
index dc7271c..d2e2dcc 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
@@ -102,4 +102,9 @@
public static final BuilderFactoryForTesting PACKAGE_FACTORY_BUILDER_FACTORY_FOR_TESTING =
PackageFactoryBuilderFactoryForBazelUnitTests.INSTANCE;
+
+ /** A choice of test execution mode, only varies internally. */
+ public enum InternalTestExecutionMode {
+ NORMAL
+ }
}