From 71dbed482868e5a94eb945063c6dd6209aaf776c Mon Sep 17 00:00:00 2001 From: John Cater Date: Tue, 6 Feb 2018 11:04:17 -0800 Subject: Update ToolchainResolutionFunction to consider multiple available execution platforms. Part of #4442. Change-Id: I6678d57f4aaadcb19032bf58820606242ba66a25 PiperOrigin-RevId: 184707708 --- .../skyframe/ToolchainResolutionFunctionTest.java | 191 ++++++++------------- 1 file changed, 73 insertions(+), 118 deletions(-) (limited to 'src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java') diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java index 9d44e05848..92f24edfec 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java @@ -18,12 +18,8 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.devtools.build.skyframe.EvaluationResultSubjectFactory.assertThatEvaluationResult; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.testing.EqualsTester; -import com.google.common.truth.DefaultSubject; -import com.google.common.truth.Subject; -import com.google.devtools.build.lib.analysis.platform.ConstraintSettingInfo; -import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo; -import com.google.devtools.build.lib.analysis.platform.DeclaredToolchainInfo; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.platform.ToolchainTestCase; @@ -51,16 +47,50 @@ public class ToolchainResolutionFunctionTest extends ToolchainTestCase { } @Test - public void testResolution() throws Exception { + public void testResolution_singleExecutionPlatform() throws Exception { SkyKey key = - ToolchainResolutionValue.key(targetConfig, testToolchainType, linuxPlatform, macPlatform); + ToolchainResolutionValue.key( + targetConfig, testToolchainType, linuxPlatform, ImmutableList.of(macPlatform)); EvaluationResult result = invokeToolchainResolution(key); assertThatEvaluationResult(result).hasNoError(); ToolchainResolutionValue toolchainResolutionValue = result.get(key); - assertThat(toolchainResolutionValue.toolchainLabel()) - .isEqualTo(makeLabel("//toolchain:toolchain_2_impl")); + assertThat(toolchainResolutionValue.availableToolchainLabels()) + .containsExactly(macPlatform, makeLabel("//toolchain:toolchain_2_impl")); + } + + @Test + public void testResolution_multipleExecutionPlatforms() throws Exception { + addToolchain( + "extra", + "extra_toolchain", + ImmutableList.of("//constraints:linux"), + ImmutableList.of("//constraints:linux"), + "baz"); + rewriteWorkspace( + "register_toolchains(", + "'//toolchain:toolchain_1',", + "'//toolchain:toolchain_2',", + "'//extra:extra_toolchain')"); + + SkyKey key = + ToolchainResolutionValue.key( + targetConfig, + testToolchainType, + linuxPlatform, + ImmutableList.of(linuxPlatform, macPlatform)); + EvaluationResult result = invokeToolchainResolution(key); + + assertThatEvaluationResult(result).hasNoError(); + + ToolchainResolutionValue toolchainResolutionValue = result.get(key); + assertThat(toolchainResolutionValue.availableToolchainLabels()) + .containsExactly( + linuxPlatform, + makeLabel("//extra:extra_toolchain_impl"), + macPlatform, + makeLabel("//toolchain:toolchain_2_impl")); } @Test @@ -69,7 +99,8 @@ public class ToolchainResolutionFunctionTest extends ToolchainTestCase { rewriteWorkspace(); SkyKey key = - ToolchainResolutionValue.key(targetConfig, testToolchainType, linuxPlatform, macPlatform); + ToolchainResolutionValue.key( + targetConfig, testToolchainType, linuxPlatform, ImmutableList.of(macPlatform)); EvaluationResult result = invokeToolchainResolution(key); assertThatEvaluationResult(result) @@ -79,118 +110,42 @@ public class ToolchainResolutionFunctionTest extends ToolchainTestCase { .contains("no matching toolchain found for //toolchain:test_toolchain"); } - @Test - public void testResolveConstraints() throws Exception { - ConstraintSettingInfo setting1 = - ConstraintSettingInfo.create(makeLabel("//constraint:setting1")); - ConstraintSettingInfo setting2 = - ConstraintSettingInfo.create(makeLabel("//constraint:setting2")); - ConstraintValueInfo constraint1a = - ConstraintValueInfo.create(setting1, makeLabel("//constraint:value1a")); - ConstraintValueInfo constraint1b = - ConstraintValueInfo.create(setting1, makeLabel("//constraint:value1b")); - ConstraintValueInfo constraint2a = - ConstraintValueInfo.create(setting2, makeLabel("//constraint:value2a")); - ConstraintValueInfo constraint2b = - ConstraintValueInfo.create(setting2, makeLabel("//constraint:value2b")); - - Label toolchainType1 = makeLabel("//toolchain:type1"); - Label toolchainType2 = makeLabel("//toolchain:type2"); - - DeclaredToolchainInfo toolchain1a = - DeclaredToolchainInfo.create( - toolchainType1, - ImmutableList.of(constraint1a, constraint2a), - ImmutableList.of(constraint1a, constraint2a), - makeLabel("//toolchain:toolchain1a")); - DeclaredToolchainInfo toolchain1b = - DeclaredToolchainInfo.create( - toolchainType1, - ImmutableList.of(constraint1a, constraint2b), - ImmutableList.of(constraint1a, constraint2b), - makeLabel("//toolchain:toolchain1b")); - DeclaredToolchainInfo toolchain2a = - DeclaredToolchainInfo.create( - toolchainType2, - ImmutableList.of(constraint1b, constraint2a), - ImmutableList.of(constraint1b, constraint2a), - makeLabel("//toolchain:toolchain2a")); - DeclaredToolchainInfo toolchain2b = - DeclaredToolchainInfo.create( - toolchainType2, - ImmutableList.of(constraint1b, constraint2b), - ImmutableList.of(constraint1b, constraint2b), - makeLabel("//toolchain:toolchain2b")); - - ImmutableList allToolchains = - ImmutableList.of(toolchain1a, toolchain1b, toolchain2a, toolchain2b); - - assertToolchainResolution( - toolchainType1, - ImmutableList.of(constraint1a, constraint2a), - ImmutableList.of(constraint1a, constraint2a), - allToolchains) - .isEqualTo(toolchain1a); - assertToolchainResolution( - toolchainType1, - ImmutableList.of(constraint1a, constraint2b), - ImmutableList.of(constraint1a, constraint2b), - allToolchains) - .isEqualTo(toolchain1b); - assertToolchainResolution( - toolchainType2, - ImmutableList.of(constraint1b, constraint2a), - ImmutableList.of(constraint1b, constraint2a), - allToolchains) - .isEqualTo(toolchain2a); - assertToolchainResolution( - toolchainType2, - ImmutableList.of(constraint1b, constraint2b), - ImmutableList.of(constraint1b, constraint2b), - allToolchains) - .isEqualTo(toolchain2b); - - // No toolchains of type. - assertToolchainResolution( - makeLabel("//toolchain:type3"), - ImmutableList.of(constraint1a, constraint2a), - ImmutableList.of(constraint1a, constraint2a), - allToolchains) - .isNull(); - } - - private Subject assertToolchainResolution( - Label toolchainType, - Iterable targetConstraints, - Iterable execConstraints, - ImmutableList toolchains) - throws Exception { - - PlatformInfo execPlatform = - PlatformInfo.builder() - .setLabel(makeLabel("//platform:exec")) - .addConstraints(execConstraints) - .build(); - PlatformInfo targetPlatform = - PlatformInfo.builder() - .setLabel(makeLabel("//platform:target")) - .addConstraints(targetConstraints) - .build(); - - DeclaredToolchainInfo resolvedToolchain = - ToolchainResolutionFunction.resolveConstraints( - toolchainType, execPlatform, targetPlatform, toolchains, null); - return assertThat(resolvedToolchain); - } - @Test public void testToolchainResolutionValue_equalsAndHashCode() { new EqualsTester() .addEqualityGroup( - ToolchainResolutionValue.create(makeLabel("//test:toolchain_impl_1")), - ToolchainResolutionValue.create(makeLabel("//test:toolchain_impl_1"))) + ToolchainResolutionValue.create( + ImmutableMap.builder() + .put(linuxPlatform, makeLabel("//test:toolchain_impl_1")) + .build()), + ToolchainResolutionValue.create( + ImmutableMap.builder() + .put(linuxPlatform, makeLabel("//test:toolchain_impl_1")) + .build())) + // Different execution platform, same label. + .addEqualityGroup( + ToolchainResolutionValue.create( + ImmutableMap.builder() + .put(macPlatform, makeLabel("//test:toolchain_impl_1")) + .build())) + // Same execution platform, different label. + .addEqualityGroup( + ToolchainResolutionValue.create( + ImmutableMap.builder() + .put(linuxPlatform, makeLabel("//test:toolchain_impl_2")) + .build())) + // Different execution platform, different label. + .addEqualityGroup( + ToolchainResolutionValue.create( + ImmutableMap.builder() + .put(macPlatform, makeLabel("//test:toolchain_impl_2")) + .build())) + // Multiple execution platforms. .addEqualityGroup( - ToolchainResolutionValue.create(makeLabel("//test:toolchain_impl_2")), - ToolchainResolutionValue.create(makeLabel("//test:toolchain_impl_2"))); + ToolchainResolutionValue.create( + ImmutableMap.builder() + .put(linuxPlatform, makeLabel("//test:toolchain_impl_1")) + .put(macPlatform, makeLabel("//test:toolchain_impl_1")) + .build())); } } -- cgit v1.2.3