From 5d7fa7ba5d93a1fe35353b05882698b0d74d90f7 Mon Sep 17 00:00:00 2001 From: mjhalupka Date: Thu, 22 Mar 2018 13:37:38 -0700 Subject: Add a DefaultBuildOptions specifying default build flags that may differ from the provided defaults in Options classes. These are used to create BuildOptionsDiffForReconstruction, which lets us store only the diffs in our BuildConfigurationValue.Keys. PiperOrigin-RevId: 190117455 --- src/test/java/com/google/devtools/build/lib/BUILD | 28 ++++++++++--- .../build/lib/analysis/DependencyResolverTest.java | 12 ++++-- .../analysis/config/BuildConfigurationTest.java | 3 +- .../lib/analysis/config/BuildOptionsTest.java | 48 ++++++++++++++++++++++ .../build/lib/analysis/util/AnalysisTestCase.java | 6 ++- .../build/lib/analysis/util/BuildViewTestCase.java | 8 +++- .../lib/analysis/util/ConfigurationTestCase.java | 4 +- .../util/DefaultBuildOptionsForTesting.java | 34 +++++++++++++++ .../lib/packages/util/PackageLoadingTestCase.java | 4 +- .../lib/pkgcache/BuildFileModificationTest.java | 4 +- .../build/lib/pkgcache/IncrementalLoadingTest.java | 8 +++- .../build/lib/pkgcache/LoadingPhaseRunnerTest.java | 10 ++++- .../build/lib/pkgcache/PackageCacheTest.java | 10 ++++- .../BlazeCommandDispatcherRcoptionsTest.java | 10 +++++ .../build/lib/runtime/BuildEventStreamerTest.java | 8 ++-- .../build/lib/runtime/CommandInterruptionTest.java | 10 +++++ .../commands/CleanCommandRecommendsAsyncTest.java | 10 +++++ .../com/google/devtools/build/lib/skyframe/BUILD | 1 + .../lib/skyframe/ConfigurationsForTargetsTest.java | 25 ++++++++--- ...areDepsOfPatternsFunctionSmartNegationTest.java | 8 +++- 20 files changed, 219 insertions(+), 32 deletions(-) create mode 100644 src/test/java/com/google/devtools/build/lib/analysis/util/DefaultBuildOptionsForTesting.java (limited to 'src/test/java/com/google') diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index 205bf8f020..1e80aee5df 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -558,12 +558,15 @@ java_test( java_library( name = "analysis_testutil", testonly = 1, - srcs = glob([ - "analysis/LicensingTests.java", - "analysis/mock/BazelAnalysisMock.java", - "analysis/util/*.java", - "exec/util/*.java", - ]), + srcs = glob( + [ + "analysis/LicensingTests.java", + "analysis/mock/BazelAnalysisMock.java", + "analysis/util/*.java", + "exec/util/*.java", + ], + exclude = ["analysis/util/DefaultBuildOptionsForTesting.java"], + ), resources = [ "analysis/mock/MOCK_CROSSTOOL", ], @@ -573,6 +576,7 @@ java_library( ], deps = [ ":actions_testutil", + ":default_test_build_rules", ":foundations_testutil", ":guava_junit_truth", ":packages_testutil", @@ -624,6 +628,16 @@ java_library( ], ) +java_library( + name = "default_test_build_rules", + testonly = 1, + srcs = ["analysis/util/DefaultBuildOptionsForTesting.java"], + deps = [ + "//src/main/java/com/google/devtools/build/lib:build-base", + "//src/main/java/com/google/devtools/common/options", + ], +) + java_library( name = "integration_testutil", testonly = 1, @@ -821,6 +835,7 @@ java_library( "packages/util/MOCK_OSX_CROSSTOOL", ], deps = [ + ":default_test_build_rules", ":foundations_testutil", ":guava_junit_truth", ":testutil", @@ -901,6 +916,7 @@ java_test( test_class = "com.google.devtools.build.lib.AllTests", deps = [ ":analysis_testutil", + ":default_test_build_rules", ":guava_junit_truth", ":packages_testutil", ":test_runner", diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java index 4069c9aea1..c4566b6a0e 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.FragmentClassSet; import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.analysis.util.TestAspects; +import com.google.devtools.build.lib.bazel.rules.DefaultBuildOptionsForDiffing; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.Aspect; @@ -60,7 +61,8 @@ public class DependencyResolverTest extends AnalysisTestCase { @Before public final void createResolver() throws Exception { - dependencyResolver = new DependencyResolver() { + dependencyResolver = + new DependencyResolver() { @Override protected void invalidVisibilityReferenceHook(TargetAndConfiguration node, Label label) { throw new IllegalStateException(); @@ -90,7 +92,9 @@ public class DependencyResolverTest extends AnalysisTestCase { @Nullable @Override protected List getConfigurations( - FragmentClassSet fragments, Iterable buildOptions) { + FragmentClassSet fragments, + Iterable buildOptions, + BuildOptions defaultBuildOptions) { throw new UnsupportedOperationException( "this functionality is covered by analysis-phase integration tests"); } @@ -109,7 +113,9 @@ public class DependencyResolverTest extends AnalysisTestCase { getHostConfiguration(), aspect != null ? Aspect.forNative(aspect) : null, ImmutableMap.of(), - /*toolchainLabels=*/ ImmutableSet.of()); + /*toolchainLabels=*/ ImmutableSet.of(), + DefaultBuildOptionsForDiffing.getDefaultBuildOptionsForFragments( + ruleClassProvider.getConfigurationOptions())); } @SafeVarargs diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java index 3df4923ea0..cf7f1e6c56 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java @@ -288,7 +288,8 @@ public class BuildConfigurationTest extends ConfigurationTestCase { ImmutableSortedSet.orderedBy(BuildConfiguration.lexicalFragmentSorter) .add(CppConfiguration.class) .build()), - analysisMock.createRuleClassProvider()); + analysisMock.createRuleClassProvider(), + skyframeExecutor.getDefaultBuildOptions()); BuildConfiguration hostConfig = createHost(); assertThat(config.equalsOrIsSupersetOf(trimmedConfig)).isTrue(); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildOptionsTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildOptionsTest.java index 9c796eff51..421db8e93c 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildOptionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildOptionsTest.java @@ -14,9 +14,11 @@ package com.google.devtools.build.lib.analysis.config; import static com.google.common.truth.Truth.assertThat; +import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.config.BuildOptions.OptionsDiff; +import com.google.devtools.build.lib.analysis.config.BuildOptions.OptionsDiffForReconstruction; import com.google.devtools.build.lib.rules.cpp.CppOptions; import com.google.devtools.common.options.OptionsParser; import org.junit.Test; @@ -102,6 +104,52 @@ public class BuildOptionsTest { assertThat(diff.getExtraSecondFragmentClasses()).containsExactlyElementsIn(TEST_OPTIONS); } + @Test + public void optionsDiff_nullOptionsThrow() throws Exception { + BuildOptions one = BuildOptions.of(TEST_OPTIONS, "--compilation_mode=opt", "cpu=k8"); + BuildOptions two = null; + IllegalArgumentException e = + assertThrows(IllegalArgumentException.class, () -> BuildOptions.diff(one, two)); + assertThat(e).hasMessageThat().contains("Cannot diff null BuildOptions"); + } + + @Test + public void optionsDiff_nullSecondValue() throws Exception { + BuildOptions one = BuildOptions.of(ImmutableList.of(CppOptions.class), "--compiler=gcc"); + BuildOptions two = BuildOptions.of(ImmutableList.of(CppOptions.class)); + OptionsDiffForReconstruction diffForReconstruction = + BuildOptions.diffForReconstruction(one, two); + OptionsDiff diff = BuildOptions.diff(one, two); + assertThat(diff.areSame()).isFalse(); + assertThat(diff.getSecond().values()).contains(null); + BuildOptions reconstructed = one.applyDiff(diffForReconstruction); + assertThat(reconstructed.get(CppOptions.class).cppCompiler).isNull(); + } + + @Test + public void optionsDiff_differentBaseThrowException() throws Exception { + BuildOptions one = BuildOptions.of(TEST_OPTIONS, "--compilation_mode=opt", "cpu=k8"); + BuildOptions two = BuildOptions.of(TEST_OPTIONS, "--compilation_mode=dbg", "cpu=k8"); + BuildOptions three = BuildOptions.of(ImmutableList.of(CppOptions.class), "--compiler=gcc"); + OptionsDiffForReconstruction diffForReconstruction = + BuildOptions.diffForReconstruction(one, two); + IllegalArgumentException e = + assertThrows(IllegalArgumentException.class, () -> three.applyDiff(diffForReconstruction)); + assertThat(e) + .hasMessageThat() + .contains("Can not reconstruct BuildOptions with a different base"); + } + + @Test + public void optionsDiff_getEmptyAndApplyEmpty() throws Exception { + BuildOptions one = BuildOptions.of(TEST_OPTIONS, "--compilation_mode=opt", "cpu=k8"); + BuildOptions two = BuildOptions.of(TEST_OPTIONS, "--compilation_mode=opt", "cpu=k8"); + OptionsDiffForReconstruction diffForReconstruction = + BuildOptions.diffForReconstruction(one, two); + BuildOptions reconstructed = one.applyDiff(diffForReconstruction); + assertThat(one).isEqualTo(reconstructed); + } + @Test public void applyDiff() throws Exception { BuildOptions one = BuildOptions.of(TEST_OPTIONS, "--compilation_mode=opt", "cpu=k8"); 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 faf596966b..6c7f29319a 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 @@ -183,7 +183,8 @@ public abstract class AnalysisTestCase extends FoundationTestCase { BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, - BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE, + DefaultBuildOptionsForTesting.getDefaultBuildOptionsForTest(ruleClassProvider)); } /** @@ -196,6 +197,7 @@ public abstract class AnalysisTestCase extends FoundationTestCase { analysisMock .getPackageFactoryBuilderForTesting(directories) .build(ruleClassProvider, scratch.getFileSystem()); + useConfiguration(); skyframeExecutor = createSkyframeExecutor(pkgFactory, ruleClassProvider.getBuildInfoFactories()); @@ -220,7 +222,7 @@ public abstract class AnalysisTestCase extends FoundationTestCase { loadingPhaseRunner = skyframeExecutor.getLoadingPhaseRunner( pkgFactory.getRuleClassNames(), defaultFlags().contains(Flag.SKYFRAME_LOADING_PHASE)); buildView = new BuildView(directories, ruleClassProvider, skyframeExecutor, null); - useConfiguration(); + } protected AnalysisMock getAnalysisMock() { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index 052f618d89..6dbd8e0794 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java @@ -256,7 +256,8 @@ public abstract class BuildViewTestCase extends FoundationTestCase { BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, - BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE, + DefaultBuildOptionsForTesting.getDefaultBuildOptionsForTest(ruleClassProvider)); TestConstants.processSkyframeExecutorForTesting(skyframeExecutor); skyframeExecutor.injectExtraPrecomputedValues(extraPrecomputedValues); packageCacheOptions.defaultVisibility = ConstantRuleVisibility.PUBLIC; @@ -476,7 +477,10 @@ public abstract class BuildViewTestCase extends FoundationTestCase { masterConfig = createConfigurations(actualArgs); targetConfig = getTargetConfiguration(); targetConfigKey = - BuildConfigurationValue.key(targetConfig.fragmentClasses(), targetConfig.getOptions()); + BuildConfigurationValue.key( + targetConfig.fragmentClasses(), + BuildOptions.diffForReconstruction( + skyframeExecutor.getDefaultBuildOptions(), targetConfig.getOptions())); configurationArgs = Arrays.asList(actualArgs); createBuildView(); } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java index ab725a9223..af23651dfd 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java @@ -115,7 +115,6 @@ public abstract class ConfigurationTestCase extends FoundationTestCase { .build(ruleClassProvider, scratch.getFileSystem()); AnalysisTestUtil.DummyWorkspaceStatusActionFactory workspaceStatusActionFactory = new AnalysisTestUtil.DummyWorkspaceStatusActionFactory(directories); - skyframeExecutor = SequencedSkyframeExecutor.create( pkgFactory, @@ -131,7 +130,8 @@ public abstract class ConfigurationTestCase extends FoundationTestCase { BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, - BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE, + DefaultBuildOptionsForTesting.getDefaultBuildOptionsForTest(ruleClassProvider)); TestConstants.processSkyframeExecutorForTesting(skyframeExecutor); skyframeExecutor.injectExtraPrecomputedValues(ImmutableList.of(PrecomputedValue.injected( RepositoryDelegatorFunction.REPOSITORY_OVERRIDES, diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/DefaultBuildOptionsForTesting.java b/src/test/java/com/google/devtools/build/lib/analysis/util/DefaultBuildOptionsForTesting.java new file mode 100644 index 0000000000..1f3b75c231 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/DefaultBuildOptionsForTesting.java @@ -0,0 +1,34 @@ +// Copyright 2018 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.analysis.util; + +import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; +import com.google.devtools.build.lib.analysis.config.BuildOptions; +import com.google.devtools.common.options.OptionsParsingException; + +/** + * Static helper to provide {@link BuildOptions} that are used as default build options in tests. + */ +public class DefaultBuildOptionsForTesting { + + public static BuildOptions getDefaultBuildOptionsForTest( + ConfiguredRuleClassProvider ruleClassProvider) { + try { + return BuildOptions.of(ruleClassProvider.getConfigurationOptions()); + } catch (OptionsParsingException e) { + throw new IllegalArgumentException("Failed to create default BuildOptions for test", e); + } + } +} diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java index 90578ed361..e43be1dc51 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.ServerDirectories; +import com.google.devtools.build.lib.analysis.util.DefaultBuildOptionsForTesting; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; @@ -125,7 +126,8 @@ public abstract class PackageLoadingTestCase extends FoundationTestCase { BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, - BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE, + DefaultBuildOptionsForTesting.getDefaultBuildOptionsForTest(ruleClassProvider)); TestConstants.processSkyframeExecutorForTesting(skyframeExecutor); return skyframeExecutor; } diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java index 1f3354e8ce..be5068bd2d 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.util.AnalysisMock; +import com.google.devtools.build.lib.analysis.util.DefaultBuildOptionsForTesting; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.Package; @@ -95,7 +96,8 @@ public class BuildFileModificationTest extends FoundationTestCase { BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, - BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE, + DefaultBuildOptionsForTesting.getDefaultBuildOptionsForTest(ruleClassProvider)); TestConstants.processSkyframeExecutorForTesting(skyframeExecutor); OptionsParser parser = OptionsParser.newOptionsParser( PackageCacheOptions.class, SkylarkSemanticsOptions.class); diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java index 569230190c..1a00c8110a 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java @@ -23,7 +23,9 @@ import com.google.common.collect.ImmutableMap; import com.google.common.eventbus.EventBus; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.analysis.BlazeDirectories; +import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; +import com.google.devtools.build.lib.analysis.util.DefaultBuildOptionsForTesting; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Reporter; @@ -470,11 +472,12 @@ public class IncrementalLoadingTest { fs.getPath("/install"), fs.getPath("/output"), fs.getPath("/userRoot")), workspace, loadingMock.getProductName()); + ConfiguredRuleClassProvider ruleClassProvider = loadingMock.createRuleClassProvider(); skyframeExecutor = SequencedSkyframeExecutor.create( loadingMock .getPackageFactoryBuilderForTesting(directories) - .build(loadingMock.createRuleClassProvider(), fs), + .build(ruleClassProvider, fs), fs, directories, actionKeyContext, @@ -487,7 +490,8 @@ public class IncrementalLoadingTest { BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, - BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE, + DefaultBuildOptionsForTesting.getDefaultBuildOptionsForTest(ruleClassProvider)); TestConstants.processSkyframeExecutorForTesting(skyframeExecutor); PackageCacheOptions packageCacheOptions = Options.getDefaults(PackageCacheOptions.class); packageCacheOptions.defaultVisibility = ConstantRuleVisibility.PUBLIC; diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java index de8523eecf..e7c6535447 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java @@ -31,6 +31,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.BuildView; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; +import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.util.AnalysisMock; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.TargetParsingException; @@ -727,6 +728,12 @@ public class LoadingPhaseRunnerTest { analysisMock.getPackageFactoryBuilderForTesting(directories).build(ruleClassProvider, fs); PackageCacheOptions options = Options.getDefaults(PackageCacheOptions.class); storedErrors = new StoredEventHandler(); + BuildOptions defaultBuildOptions; + try { + defaultBuildOptions = BuildOptions.of(ImmutableList.of()); + } catch (OptionsParsingException e) { + throw new RuntimeException(e); + } skyframeExecutor = SequencedSkyframeExecutor.create( pkgFactory, @@ -742,7 +749,8 @@ public class LoadingPhaseRunnerTest { BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, - BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE, + defaultBuildOptions); TestConstants.processSkyframeExecutorForTesting(skyframeExecutor); PathPackageLocator pkgLocator = PathPackageLocator.create( diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java index 4863530e00..85ac153f46 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; +import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.util.AnalysisMock; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.Label; @@ -91,6 +92,12 @@ public class PackageCacheTest extends FoundationTestCase { if (!doPackageLoadingChecks) { packageFactoryBuilder.disableChecks(); } + BuildOptions defaultBuildOptions; + try { + defaultBuildOptions = BuildOptions.of(ImmutableList.of()); + } catch (OptionsParsingException e) { + throw new RuntimeException(e); + } skyframeExecutor = SequencedSkyframeExecutor.create( packageFactoryBuilder.build(ruleClassProvider, fileSystem), @@ -106,7 +113,8 @@ public class PackageCacheTest extends FoundationTestCase { BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, - BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE, + defaultBuildOptions); TestConstants.processSkyframeExecutorForTesting(skyframeExecutor); setUpSkyframe(parsePackageCacheOptions(), parseSkylarkSemanticsOptions()); } diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java index 32a0879040..3582a2d87f 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java @@ -25,7 +25,9 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.FragmentOptions; +import com.google.devtools.build.lib.bazel.rules.DefaultBuildOptionsForDiffing; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.testutil.Scratch; import com.google.devtools.build.lib.testutil.TestConstants; @@ -155,6 +157,14 @@ public class BlazeCommandDispatcherRcoptionsTest { builder.setToolsRepository(TestConstants.TOOLS_REPOSITORY); } }) + .addBlazeModule( + new BlazeModule() { + @Override + public BuildOptions getDefaultBuildOptions(BlazeRuntime runtime) { + return DefaultBuildOptionsForDiffing.getDefaultBuildOptionsForFragments( + runtime.getRuleClassProvider().getConfigurationOptions()); + } + }) .build(); BlazeDirectories directories = diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java index 9ff8d76bda..69b912dde6 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java @@ -633,6 +633,9 @@ public class BuildEventStreamerTest extends FoundationTestCase { BuildEventStreamer streamer = new BuildEventStreamer(ImmutableSet.of(transport), reporter); + BuildOptions defaultBuildOptions = + BuildOptions.of( + ImmutableList.>of(BuildConfiguration.Options.class)); BuildEvent startEvent = new GenericBuildEvent( testId("Initial"), @@ -645,9 +648,8 @@ public class BuildEventStreamerTest extends FoundationTestCase { "productName"), ImmutableMap ., BuildConfiguration.Fragment>of(), - BuildOptions.of( - ImmutableList.>of( - BuildConfiguration.Options.class)), + defaultBuildOptions, + BuildOptions.diffForReconstruction(defaultBuildOptions, defaultBuildOptions), "workspace"); BuildEvent firstWithConfiguration = new GenericConfigurationEvent(testId("first"), configuration.toBuildEvent()); diff --git a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java index de38e15cec..71948daa5f 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java @@ -22,6 +22,8 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.BuildOptions; +import com.google.devtools.build.lib.bazel.rules.DefaultBuildOptionsForDiffing; import com.google.devtools.build.lib.testutil.Scratch; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.testutil.TestUtils; @@ -367,6 +369,14 @@ public final class CommandInterruptionTest { builder.addConfigurationOptions(BuildConfiguration.Options.class); } }) + .addBlazeModule( + new BlazeModule() { + @Override + public BuildOptions getDefaultBuildOptions(BlazeRuntime runtime) { + return DefaultBuildOptionsForDiffing.getDefaultBuildOptionsForFragments( + runtime.getRuleClassProvider().getConfigurationOptions()); + } + }) .build(); snooze = new WaitForCompletionCommand(isTestShuttingDown); dispatcher = new BlazeCommandDispatcher(runtime, snooze); diff --git a/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java b/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java index 4a45e7d10f..d2235c8d7f 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java @@ -20,6 +20,8 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.BuildOptions; +import com.google.devtools.build.lib.bazel.rules.DefaultBuildOptionsForDiffing; import com.google.devtools.build.lib.runtime.BlazeCommandDispatcher; import com.google.devtools.build.lib.runtime.BlazeModule; import com.google.devtools.build.lib.runtime.BlazeRuntime; @@ -98,6 +100,14 @@ public class CleanCommandRecommendsAsyncTest { builder.setToolsRepository(TestConstants.TOOLS_REPOSITORY); } }) + .addBlazeModule( + new BlazeModule() { + @Override + public BuildOptions getDefaultBuildOptions(BlazeRuntime runtime) { + return DefaultBuildOptionsForDiffing.getDefaultBuildOptionsForFragments( + runtime.getRuleClassProvider().getConfigurationOptions()); + } + }) .build(); BlazeDirectories directories = new BlazeDirectories(serverDirectories, scratch.dir("workspace"), productName); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD index 3896f0a261..56c1647776 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD +++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD @@ -89,6 +89,7 @@ java_test( "//src/main/protobuf:action_cache_java_proto", "//src/test/java/com/google/devtools/build/lib:actions_testutil", "//src/test/java/com/google/devtools/build/lib:analysis_testutil", + "//src/test/java/com/google/devtools/build/lib:default_test_build_rules", "//src/test/java/com/google/devtools/build/lib:foundations_testutil", "//src/test/java/com/google/devtools/build/lib:packages_testutil", "//src/test/java/com/google/devtools/build/lib:testutil", diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java index f1f4b367a1..dfb5adb1e8 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.skyframe; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; +import com.google.common.base.Supplier; import com.google.common.base.VerifyException; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Collections2; @@ -33,6 +34,7 @@ import com.google.devtools.build.lib.analysis.Dependency; import com.google.devtools.build.lib.analysis.DependencyResolver; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.ConfigurationResolver; import com.google.devtools.build.lib.analysis.util.AnalysisMock; @@ -93,9 +95,13 @@ public class ConfigurationsForTargetsTest extends AnalysisTestCase { SkyFunctionName.create("CONFIGURED_TARGET_FUNCTION_COMPUTE_DEPENDENCIES"); private final LateBoundStateProvider stateProvider; + private final Supplier buildOptionsSupplier; - ComputeDependenciesFunction(LateBoundStateProvider lateBoundStateProvider) { + ComputeDependenciesFunction( + LateBoundStateProvider lateBoundStateProvider, + Supplier buildOptionsSupplier) { this.stateProvider = lateBoundStateProvider; + this.buildOptionsSupplier = buildOptionsSupplier; } /** Returns a {@link SkyKey} for a given pair. */ @@ -141,7 +147,8 @@ public class ConfigurationsForTargetsTest extends AnalysisTestCase { stateProvider.lateBoundRuleClassProvider(), stateProvider.lateBoundHostConfig(), NestedSetBuilder.stableOrder(), - NestedSetBuilder.