aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2018-02-06 11:04:17 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-06 11:05:56 -0800
commit71dbed482868e5a94eb945063c6dd6209aaf776c (patch)
tree4a178d020b1e5977ddca3940dab5cb0b58c490b4 /src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java
parent33c419bb0952721f056f01a0374f9f2d238e98bd (diff)
Update ToolchainResolutionFunction to consider multiple available
execution platforms. Part of #4442. Change-Id: I6678d57f4aaadcb19032bf58820606242ba66a25 PiperOrigin-RevId: 184707708
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java191
1 files changed, 73 insertions, 118 deletions
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<ToolchainResolutionValue> 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<ToolchainResolutionValue> 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<ToolchainResolutionValue> result = invokeToolchainResolution(key);
assertThatEvaluationResult(result)
@@ -80,117 +111,41 @@ public class ToolchainResolutionFunctionTest extends ToolchainTestCase {
}
@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<DeclaredToolchainInfo> 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<DefaultSubject, Object> assertToolchainResolution(
- Label toolchainType,
- Iterable<ConstraintValueInfo> targetConstraints,
- Iterable<ConstraintValueInfo> execConstraints,
- ImmutableList<DeclaredToolchainInfo> 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.<PlatformInfo, Label>builder()
+ .put(linuxPlatform, makeLabel("//test:toolchain_impl_1"))
+ .build()),
+ ToolchainResolutionValue.create(
+ ImmutableMap.<PlatformInfo, Label>builder()
+ .put(linuxPlatform, makeLabel("//test:toolchain_impl_1"))
+ .build()))
+ // Different execution platform, same label.
+ .addEqualityGroup(
+ ToolchainResolutionValue.create(
+ ImmutableMap.<PlatformInfo, Label>builder()
+ .put(macPlatform, makeLabel("//test:toolchain_impl_1"))
+ .build()))
+ // Same execution platform, different label.
+ .addEqualityGroup(
+ ToolchainResolutionValue.create(
+ ImmutableMap.<PlatformInfo, Label>builder()
+ .put(linuxPlatform, makeLabel("//test:toolchain_impl_2"))
+ .build()))
+ // Different execution platform, different label.
+ .addEqualityGroup(
+ ToolchainResolutionValue.create(
+ ImmutableMap.<PlatformInfo, Label>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.<PlatformInfo, Label>builder()
+ .put(linuxPlatform, makeLabel("//test:toolchain_impl_1"))
+ .put(macPlatform, makeLabel("//test:toolchain_impl_1"))
+ .build()));
}
}