aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar Greg Estren <gregce@google.com>2016-08-10 20:50:09 +0000
committerGravatar Yue Gan <yueg@google.com>2016-08-11 09:15:37 +0000
commit247ac16337769e4492f4ac0a0a4fd786c92eed24 (patch)
treeaa4193974dfd7a2441249d67e3e67a44d1ec8183 /src/test
parentf3ec5975023362a05a8d01a7e7e22a4d9bcad60a (diff)
Dynamic config test improvements:
- Adds a helper routine to get all configured targets with a given label - Enhances latebound split test to check that deps actually take expected configurations -- MOS_MIGRATED_REVID=129906477
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/com/google/devtools/build/lib/BUILD1
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java15
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java47
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java19
4 files changed, 69 insertions, 13 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index b4c26b5ba3..7dbbf5f614 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -478,6 +478,7 @@ java_test(
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/skyframe",
+ "//src/test/java/com/google/devtools/build/lib/skyframe:testutil",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:guava-testlib",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
index d48756ad1b..0aab4dddae 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
@@ -48,6 +48,7 @@ import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.pkgcache.LoadingFailedException;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
+import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils;
import com.google.devtools.build.lib.testutil.Suite;
import com.google.devtools.build.lib.testutil.TestSpec;
import com.google.devtools.build.lib.testutil.TestUtils;
@@ -1265,12 +1266,18 @@ public class BuildViewTest extends BuildViewTestBase {
scratch.file("foo/BUILD",
"rule_with_latebound_split(",
" name = 'foo')",
- "sh_binary(",
- " name = 'latebound_dep',",
- " srcs = ['latebound_dep.sh'])");
+ "rule_with_test_fragment(",
+ " name = 'latebound_dep')");
update("//foo:foo");
assertNotNull(getConfiguredTarget("//foo:foo"));
- // TODO(bazel-team): also check that the dep is created in each expected configuration.
+ Iterable<ConfiguredTarget> deps = SkyframeExecutorTestUtils.getExistingConfiguredTargets(
+ skyframeExecutor, Label.parseAbsolute("//foo:latebound_dep"));
+ assertThat(deps).hasSize(2);
+ assertThat(
+ ImmutableList.of(
+ LateBoundSplitUtil.getOptions(Iterables.get(deps, 0).getConfiguration()).fooFlag,
+ LateBoundSplitUtil.getOptions(Iterables.get(deps, 1).getConfiguration()).fooFlag))
+ .containsExactly("one", "two");
}
/** Runs the same test with the reduced loading phase. */
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java b/src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java
index a6a2480786..ce01c8fab9 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java
@@ -44,7 +44,7 @@ public class LateBoundSplitUtil {
/**
* A custom {@link FragmentOptions} with the option to be split.
*/
- public static class Options extends FragmentOptions { // public for options loader
+ public static class TestOptions extends FragmentOptions { // public for options loader
@Option(
name = "foo",
defaultValue = "",
@@ -66,9 +66,9 @@ public class LateBoundSplitUtil {
@Override
public List<BuildOptions> split(BuildOptions buildOptions) {
BuildOptions split1 = buildOptions.clone();
- split1.get(Options.class).fooFlag = "one";
+ split1.get(TestOptions.class).fooFlag = "one";
BuildOptions split2 = buildOptions.clone();
- split2.get(Options.class).fooFlag = "two";
+ split2.get(TestOptions.class).fooFlag = "two";
return ImmutableList.<BuildOptions>of(split1, split2);
}
@@ -81,7 +81,7 @@ public class LateBoundSplitUtil {
/**
* The {@link BuildConfiguration.Fragment} that contains the options.
*/
- private static class Fragment extends BuildConfiguration.Fragment {
+ private static class TestFragment extends BuildConfiguration.Fragment {
}
/**
@@ -92,17 +92,17 @@ public class LateBoundSplitUtil {
public BuildConfiguration.Fragment create(ConfigurationEnvironment env,
BuildOptions buildOptions)
throws InvalidConfigurationException {
- return new Fragment();
+ return new TestFragment();
}
@Override
public Class<? extends BuildConfiguration.Fragment> creates() {
- return Fragment.class;
+ return TestFragment.class;
}
@Override
public ImmutableSet<Class<? extends FragmentOptions>> requiredOptions() {
- return ImmutableSet.<Class<? extends FragmentOptions>>of(Options.class);
+ return ImmutableSet.<Class<? extends FragmentOptions>>of(TestOptions.class);
}
}
@@ -129,7 +129,7 @@ public class LateBoundSplitUtil {
.allowedRuleClasses(Attribute.ANY_RULE)
.cfg(SIMPLE_SPLIT)
.value(SIMPLE_LATEBOUND_RESOLVER))
- .requiresConfigurationFragments(Fragment.class)
+ .requiresConfigurationFragments(TestFragment.class)
.build();
}
@@ -144,14 +144,43 @@ public class LateBoundSplitUtil {
}
/**
+ * A custom rule that requires {@link TestFragment}.
+ */
+ static class RuleWithTestFragment implements RuleDefinition {
+ @Override
+ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) {
+ return builder
+ .requiresConfigurationFragments(TestFragment.class)
+ .build();
+ }
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("rule_with_test_fragment")
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .factoryClass(UnknownRuleConfiguredTarget.class)
+ .build();
+ }
+ }
+
+ /**
* Returns a rule class provider with standard test setup plus the above rules/configs.
*/
static ConfiguredRuleClassProvider getRuleClassProvider() {
ConfiguredRuleClassProvider.Builder builder = new ConfiguredRuleClassProvider.Builder();
TestRuleClassProvider.addStandardRules(builder);
builder.addRuleDefinition(new RuleWithLateBoundSplitAttribute());
+ builder.addRuleDefinition(new RuleWithTestFragment());
builder.addConfigurationFragment(new FragmentLoader());
- builder.addConfigurationOptions(Options.class);
+ builder.addConfigurationOptions(TestOptions.class);
return builder.build();
}
+
+ /**
+ * Returns the {@link TestOptions} from the given configuration.
+ */
+ static TestOptions getOptions(BuildConfiguration config) {
+ return config.getOptions().get(TestOptions.class);
+ }
} \ No newline at end of file
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java b/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java
index 7c7c4f9a6c..34218e67c8 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java
@@ -13,7 +13,9 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe.util;
+import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -105,6 +107,23 @@ public class SkyframeExecutorTestUtils {
}
/**
+ * Returns all configured targets currently in the graph with the given label.
+ *
+ * <p>Unlike {@link #getExistingConfiguredTarget(SkyframeExecutor, Label, BuildConfiguration)},
+ * this doesn't make the caller request a specific configuration.
+ */
+ public static Iterable<ConfiguredTarget> getExistingConfiguredTargets(
+ SkyframeExecutor skyframeExecutor, final Label label) {
+ return Iterables.filter(getAllExistingConfiguredTargets(skyframeExecutor),
+ new Predicate<ConfiguredTarget>() {
+ @Override
+ public boolean apply(ConfiguredTarget input) {
+ return input.getTarget().getLabel().equals(label);
+ }
+ });
+ }
+
+ /**
* Returns all configured targets currently in the graph.
*/
public static Iterable<ConfiguredTarget> getAllExistingConfiguredTargets(