diff options
Diffstat (limited to 'src/test/java')
20 files changed, 219 insertions, 32 deletions
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", @@ -625,6 +629,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, srcs = glob([ @@ -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<BuildConfiguration> getConfigurations( - FragmentClassSet fragments, Iterable<BuildOptions> buildOptions) { + FragmentClassSet fragments, + Iterable<BuildOptions> 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.<Label, ConfigMatchingProvider>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; @@ -103,6 +105,52 @@ public class BuildOptionsTest { } @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"); BuildOptions two = BuildOptions.of(TEST_OPTIONS, "--compilation_mode=dbg", "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.<BuildEventTransport>of(transport), reporter); + BuildOptions defaultBuildOptions = + BuildOptions.of( + ImmutableList.<Class<? extends FragmentOptions>>of(BuildConfiguration.Options.class)); BuildEvent startEvent = new GenericBuildEvent( testId("Initial"), @@ -645,9 +648,8 @@ public class BuildEventStreamerTest extends FoundationTestCase { "productName"), ImmutableMap .<Class<? extends BuildConfiguration.Fragment>, BuildConfiguration.Fragment>of(), - BuildOptions.of( - ImmutableList.<Class<? extends FragmentOptions>>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<BuildOptions> buildOptionsSupplier; - ComputeDependenciesFunction(LateBoundStateProvider lateBoundStateProvider) { + ComputeDependenciesFunction( + LateBoundStateProvider lateBoundStateProvider, + Supplier<BuildOptions> buildOptionsSupplier) { this.stateProvider = lateBoundStateProvider; + this.buildOptionsSupplier = buildOptionsSupplier; } /** Returns a {@link SkyKey} for a given <Target, BuildConfiguration> pair. */ @@ -141,7 +147,8 @@ public class ConfigurationsForTargetsTest extends AnalysisTestCase { stateProvider.lateBoundRuleClassProvider(), stateProvider.lateBoundHostConfig(), NestedSetBuilder.<Package>stableOrder(), - NestedSetBuilder.<Label>stableOrder()); + NestedSetBuilder.<Label>stableOrder(), + buildOptionsSupplier.get()); return env.valuesMissing() ? null : new Value(depMap); } catch (RuntimeException e) { throw e; @@ -183,9 +190,13 @@ public class ConfigurationsForTargetsTest extends AnalysisTestCase { */ private static final class AnalysisMockWithComputeDepsFunction extends AnalysisMock.Delegate { private final LateBoundStateProvider stateProvider; - AnalysisMockWithComputeDepsFunction(LateBoundStateProvider stateProvider) { + private final Supplier<BuildOptions> defaultBuildOptions; + + AnalysisMockWithComputeDepsFunction( + LateBoundStateProvider stateProvider, Supplier<BuildOptions> defaultBuildOptions) { super(AnalysisMock.get()); this.stateProvider = stateProvider; + this.defaultBuildOptions = defaultBuildOptions; } @Override @@ -195,14 +206,18 @@ public class ConfigurationsForTargetsTest extends AnalysisTestCase { .putAll(super.getSkyFunctions(directories)) .put( ComputeDependenciesFunction.SKYFUNCTION_NAME, - new ComputeDependenciesFunction(stateProvider)) + new ComputeDependenciesFunction(stateProvider, defaultBuildOptions)) .build(); } }; @Override protected AnalysisMock getAnalysisMock() { - return new AnalysisMockWithComputeDepsFunction(new LateBoundStateProvider()); + return new AnalysisMockWithComputeDepsFunction( + new LateBoundStateProvider(), + () -> { + return skyframeExecutor.getDefaultBuildOptions(); + }); } /** diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java index 4c56419cc6..27ae6a9c6a 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java @@ -22,8 +22,10 @@ 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.AnalysisMock; +import com.google.devtools.build.lib.analysis.util.DefaultBuildOptionsForTesting; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.cmdline.RepositoryName; @@ -73,11 +75,12 @@ public class PrepareDepsOfPatternsFunctionSmartNegationTest extends FoundationTe getScratch().dir("/user_root")), rootDirectory, AnalysisMock.get().getProductName()); + ConfiguredRuleClassProvider ruleClassProvider = AnalysisMock.get().createRuleClassProvider(); skyframeExecutor = SequencedSkyframeExecutor.create( AnalysisMock.get() .getPackageFactoryBuilderForTesting(directories) - .build(AnalysisMock.get().createRuleClassProvider(), fileSystem), + .build(ruleClassProvider, fileSystem), fileSystem, directories, new ActionKeyContext(), @@ -90,7 +93,8 @@ public class PrepareDepsOfPatternsFunctionSmartNegationTest extends FoundationTe PathFragment.create(ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING), 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.preparePackageLoading( new PathPackageLocator( |