aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java90
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java41
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java87
3 files changed, 218 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index a52a1a60fb..9be5e5ca7f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -2934,4 +2934,94 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
assertThat(javacAction.buildCommandLine()).doesNotContain("--testonly");
}
+
+ @Test
+ public void testFeatureFlagPolicyMustContainRuleToUseFeatureFlags() throws Exception {
+ reporter.removeHandler(failFastHandler); // expecting an error
+ scratch.file(
+ "policy/BUILD",
+ "package_group(",
+ " name = 'feature_flag_users',",
+ " packages = ['//flag'])");
+ scratch.file(
+ "flag/BUILD",
+ "config_feature_flag(",
+ " name = 'flag',",
+ " allowed_values = ['right', 'wrong'],",
+ " default_value = 'right',",
+ " visibility = ['//java/com/google/android/foo:__pkg__'],",
+ ")");
+ scratch.file(
+ "java/com/google/android/foo/BUILD",
+ "android_binary(",
+ " name = 'foo',",
+ " manifest = 'AndroidManifest.xml',",
+ " srcs = [':FooFlags.java'],",
+ " feature_flags = {",
+ " '//flag:flag': 'right',",
+ " }",
+ ")");
+ useConfiguration(
+ "--experimental_dynamic_configs=notrim",
+ "--feature_control_policy=config_feature_flag=//policy:feature_flag_users");
+ assertThat(getConfiguredTarget("//java/com/google/android/foo:foo")).isNull();
+ assertContainsEvent(
+ "in android_binary rule //java/com/google/android/foo:foo: the feature_flags attribute is "
+ + "not available in package 'java/com/google/android/foo' according to policy "
+ + "'//policy:feature_flag_users'");
+ }
+
+ @Test
+ public void testFeatureFlagPolicyDoesNotBlockRuleIfInPolicy() throws Exception {
+ scratch.file(
+ "policy/BUILD",
+ "package_group(",
+ " name = 'feature_flag_users',",
+ " packages = ['//flag', '//java/com/google/android/foo'])");
+ scratch.file(
+ "flag/BUILD",
+ "config_feature_flag(",
+ " name = 'flag',",
+ " allowed_values = ['right', 'wrong'],",
+ " default_value = 'right',",
+ " visibility = ['//java/com/google/android/foo:__pkg__'],",
+ ")");
+ scratch.file(
+ "java/com/google/android/foo/BUILD",
+ "android_binary(",
+ " name = 'foo',",
+ " manifest = 'AndroidManifest.xml',",
+ " srcs = [':FooFlags.java'],",
+ " feature_flags = {",
+ " '//flag:flag': 'right',",
+ " }",
+ ")");
+ useConfiguration(
+ "--experimental_dynamic_configs=notrim",
+ "--feature_control_policy=config_feature_flag=//policy:feature_flag_users");
+ assertThat(getConfiguredTarget("//java/com/google/android/foo:foo")).isNotNull();
+ assertNoEvents();
+ }
+
+ @Test
+ public void testFeatureFlagPolicyDoesNotBlockRuleIfFlagValuesNotUsed() throws Exception {
+ scratch.file(
+ "policy/BUILD",
+ "package_group(",
+ " name = 'feature_flag_users',",
+ " packages = ['//flag'])");
+ scratch.file("flag/BUILD");
+ scratch.file(
+ "java/com/google/android/foo/BUILD",
+ "android_binary(",
+ " name = 'foo',",
+ " manifest = 'AndroidManifest.xml',",
+ " srcs = [':FooFlags.java'],",
+ ")");
+ useConfiguration(
+ "--experimental_dynamic_configs=notrim",
+ "--feature_control_policy=config_feature_flag=//policy:feature_flag_users");
+ assertThat(getConfiguredTarget("//java/com/google/android/foo:foo")).isNotNull();
+ assertNoEvents();
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
index 0d87489daf..b8fd500689 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
@@ -288,6 +288,47 @@ public final class ConfigFeatureFlagTest extends SkylarkTestCase {
}
@Test
+ public void policy_mustContainRulesPackage() throws Exception {
+ reporter.removeHandler(failFastHandler); // expecting an error
+ scratch.file(
+ "policy/BUILD",
+ "package_group(name = 'feature_flag_users', packages = ['//some/other'])");
+ scratch.file(
+ "test/BUILD",
+ "config_feature_flag(",
+ " name = 'flag',",
+ " allowed_values = ['default', 'configured', 'other'],",
+ " default_value = 'default',",
+ ")");
+ useConfiguration(
+ "--experimental_dynamic_configs=on",
+ "--feature_control_policy=config_feature_flag=//policy:feature_flag_users");
+ assertThat(getConfiguredTarget("//test:flag")).isNull();
+ assertContainsEvent(
+ "in config_feature_flag rule //test:flag: the config_feature_flag rule is not available in "
+ + "package 'test' according to policy '//policy:feature_flag_users'");
+ }
+
+ @Test
+ public void policy_doesNotBlockRuleIfInPackageGroup() throws Exception {
+ scratch.file(
+ "policy/BUILD",
+ "package_group(name = 'feature_flag_users', packages = ['//test'])");
+ scratch.file(
+ "test/BUILD",
+ "config_feature_flag(",
+ " name = 'flag',",
+ " allowed_values = ['default', 'configured', 'other'],",
+ " default_value = 'default',",
+ ")");
+ useConfiguration(
+ "--experimental_dynamic_configs=on",
+ "--feature_control_policy=config_feature_flag=//policy:feature_flag_users");
+ assertThat(getConfiguredTarget("//test:flag")).isNotNull();
+ assertNoEvents();
+ }
+
+ @Test
public void equalsTester() {
new EqualsTester()
.addEqualityGroup(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java
index 066c1be941..0ab3a66b70 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java
@@ -1080,4 +1080,91 @@ public class ConfigSettingTest extends BuildViewTestCase {
" default_value = 'valid',",
")");
}
+
+ @Test
+ public void policyMustContainRuleToUseFlagValues() throws Exception {
+ reporter.removeHandler(failFastHandler); // expecting an error
+ scratch.file(
+ "policy/BUILD",
+ "package_group(",
+ " name = 'feature_flag_users',",
+ " packages = ['//flag'])");
+ scratch.file(
+ "flag/BUILD",
+ "config_feature_flag(",
+ " name = 'flag',",
+ " allowed_values = ['right', 'wrong'],",
+ " default_value = 'right',",
+ " visibility = ['//test:__pkg__'],",
+ ")");
+ scratch.file(
+ "test/BUILD",
+ "config_setting(",
+ " name = 'flag_values_user',",
+ " flag_values = {",
+ " '//flag:flag': 'right',",
+ " },",
+ ")");
+ useConfiguration(
+ "--experimental_dynamic_configs=on",
+ "--feature_control_policy=config_feature_flag=//policy:feature_flag_users");
+ assertThat(getConfiguredTarget("//test:flag_values_user")).isNull();
+ assertContainsEvent(
+ "in config_setting rule //test:flag_values_user: the flag_values attribute is not "
+ + "available in package 'test' according to policy "
+ + "'//policy:feature_flag_users'");
+ }
+
+ @Test
+ public void policyDoesNotBlockRuleIfInPolicy() throws Exception {
+ scratch.file(
+ "policy/BUILD",
+ "package_group(",
+ " name = 'feature_flag_users',",
+ " packages = ['//flag', '//test'])");
+ scratch.file(
+ "flag/BUILD",
+ "config_feature_flag(",
+ " name = 'flag',",
+ " allowed_values = ['right', 'wrong'],",
+ " default_value = 'right',",
+ " visibility = ['//test:__pkg__'],",
+ ")");
+ scratch.file(
+ "test/BUILD",
+ "config_setting(",
+ " name = 'flag_values_user',",
+ " flag_values = {",
+ " '//flag:flag': 'right',",
+ " },",
+ ")");
+ useConfiguration(
+ "--experimental_dynamic_configs=on",
+ "--feature_control_policy=config_feature_flag=//policy:feature_flag_users");
+ assertThat(getConfiguredTarget("//test:flag_values_user")).isNotNull();
+ assertNoEvents();
+ }
+
+ @Test
+ public void policyDoesNotBlockRuleIfFlagValuesNotUsed() throws Exception {
+ scratch.file(
+ "policy/BUILD",
+ "package_group(",
+ " name = 'feature_flag_users',",
+ " packages = ['//flag'])");
+ scratch.file("flag/BUILD");
+ scratch.file(
+ "test/BUILD",
+ "config_setting(",
+ " name = 'flag_values_user',",
+ " values = {",
+ " 'cpu': 'k8',",
+ " },",
+ ")");
+ useConfiguration(
+ "--experimental_dynamic_configs=on",
+ "--feature_control_policy=config_feature_flag=//policy:feature_flag_users");
+ assertThat(getConfiguredTarget("//test:flag_values_user")).isNotNull();
+ assertNoEvents();
+ }
}