diff options
author | 2017-07-13 19:18:50 +0200 | |
---|---|---|
committer | 2017-07-14 10:52:01 +0200 | |
commit | 98375a24ab40bfe0ff124401ca2d95740f67e072 (patch) | |
tree | 4c6ceb24dbe0dd396286d04cd3ead7a705bcea89 /src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java | |
parent | 8002b6205e004721f771df20d1d8c1402c03964e (diff) |
Add a SkyFunction to perform toolchain resolution.
Part of #2219.
Change-Id: I339009c13639144ca756eb07c520df7d430a64e3
PiperOrigin-RevId: 161826487
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.java | 85 |
1 files changed, 85 insertions, 0 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 new file mode 100644 index 0000000000..88bc501d12 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunctionTest.java @@ -0,0 +1,85 @@ +// Copyright 2017 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.skyframe; + +import static com.google.common.truth.Truth.assertThat; +import static com.google.devtools.build.skyframe.EvaluationResultSubjectFactory.assertThatEvaluationResult; + +import com.google.common.testing.EqualsTester; +import com.google.devtools.build.lib.rules.platform.ToolchainTestCase; +import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils; +import com.google.devtools.build.skyframe.EvaluationResult; +import com.google.devtools.build.skyframe.SkyKey; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link ToolchainResolutionValue} and {@link ToolchainResolutionFunction}. */ +@RunWith(JUnit4.class) +public class ToolchainResolutionFunctionTest extends ToolchainTestCase { + + private EvaluationResult<ToolchainResolutionValue> invokeToolchainResolution(SkyKey key) + throws InterruptedException { + try { + getSkyframeExecutor().getSkyframeBuildView().enableAnalysis(true); + return SkyframeExecutorTestUtils.evaluate( + getSkyframeExecutor(), key, /*keepGoing=*/ false, reporter); + } finally { + getSkyframeExecutor().getSkyframeBuildView().enableAnalysis(false); + } + } + + // TODO(katre): Current toolchain resolution does not actually check the constraints, it just + // returns the first toolchain available. + @Test + public void testResolution() throws Exception { + SkyKey key = + ToolchainResolutionValue.key(targetConfig, testToolchainType, targetPlatform, hostPlatform); + EvaluationResult<ToolchainResolutionValue> result = invokeToolchainResolution(key); + + assertThatEvaluationResult(result).hasNoError(); + + ToolchainResolutionValue toolchainResolutionValue = result.get(key); + assertThat(toolchainResolutionValue.toolchainLabel()) + .isEqualTo(makeLabel("//toolchain:test_toolchain_1")); + } + + @Test + public void testResolution_noneFound() throws Exception { + // Clear the toolchains. + rewriteWorkspace(); + + SkyKey key = + ToolchainResolutionValue.key(targetConfig, testToolchainType, targetPlatform, hostPlatform); + EvaluationResult<ToolchainResolutionValue> result = invokeToolchainResolution(key); + + assertThatEvaluationResult(result) + .hasErrorEntryForKeyThat(key) + .hasExceptionThat() + .hasMessageThat() + .contains("no matching toolchain found for //toolchain:test_toolchain"); + } + + @Test + public void testToolchainResolutionValue_equalsAndHashCode() { + new EqualsTester() + .addEqualityGroup( + ToolchainResolutionValue.create(makeLabel("//test:toolchain_impl_1")), + ToolchainResolutionValue.create(makeLabel("//test:toolchain_impl_1"))) + .addEqualityGroup( + ToolchainResolutionValue.create(makeLabel("//test:toolchain_impl_2")), + ToolchainResolutionValue.create(makeLabel("//test:toolchain_impl_2"))); + } +} |