diff options
Diffstat (limited to 'src/test/java/com/google/devtools')
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(); + } } |