Merge "aconfig: Respect flag naming convention on test flags" into main

This commit is contained in:
Oriol Prieto Gascó
2023-12-11 18:45:37 +00:00
committed by Gerrit Code Review
8 changed files with 188 additions and 35 deletions

View File

@@ -170,6 +170,8 @@ public:
virtual bool enabled_ro() = 0; virtual bool enabled_ro() = 0;
virtual bool enabled_ro_exported() = 0;
virtual bool enabled_rw() = 0; virtual bool enabled_rw() = 0;
}; };
@@ -199,6 +201,10 @@ inline bool enabled_ro() {
return true; return true;
} }
inline bool enabled_ro_exported() {
return true;
}
inline bool enabled_rw() { inline bool enabled_rw() {
return provider_->enabled_rw(); return provider_->enabled_rw();
} }
@@ -220,6 +226,8 @@ bool com_android_aconfig_test_enabled_fixed_ro();
bool com_android_aconfig_test_enabled_ro(); bool com_android_aconfig_test_enabled_ro();
bool com_android_aconfig_test_enabled_ro_exported();
bool com_android_aconfig_test_enabled_rw(); bool com_android_aconfig_test_enabled_rw();
#ifdef __cplusplus #ifdef __cplusplus
@@ -265,6 +273,10 @@ public:
virtual void enabled_ro(bool val) = 0; virtual void enabled_ro(bool val) = 0;
virtual bool enabled_ro_exported() = 0;
virtual void enabled_ro_exported(bool val) = 0;
virtual bool enabled_rw() = 0; virtual bool enabled_rw() = 0;
virtual void enabled_rw(bool val) = 0; virtual void enabled_rw(bool val) = 0;
@@ -322,6 +334,14 @@ inline void enabled_ro(bool val) {
provider_->enabled_ro(val); provider_->enabled_ro(val);
} }
inline bool enabled_ro_exported() {
return provider_->enabled_ro_exported();
}
inline void enabled_ro_exported(bool val) {
provider_->enabled_ro_exported(val);
}
inline bool enabled_rw() { inline bool enabled_rw() {
return provider_->enabled_rw(); return provider_->enabled_rw();
} }
@@ -363,6 +383,10 @@ bool com_android_aconfig_test_enabled_ro();
void set_com_android_aconfig_test_enabled_ro(bool val); void set_com_android_aconfig_test_enabled_ro(bool val);
bool com_android_aconfig_test_enabled_ro_exported();
void set_com_android_aconfig_test_enabled_ro_exported(bool val);
bool com_android_aconfig_test_enabled_rw(); bool com_android_aconfig_test_enabled_rw();
void set_com_android_aconfig_test_enabled_rw(bool val); void set_com_android_aconfig_test_enabled_rw(bool val);
@@ -429,6 +453,10 @@ namespace com::android::aconfig::test {
return true; return true;
} }
virtual bool enabled_ro_exported() override {
return true;
}
virtual bool enabled_rw() override { virtual bool enabled_rw() override {
if (cache_[3] == -1) { if (cache_[3] == -1) {
cache_[3] = server_configurable_flags::GetServerConfigurableFlag( cache_[3] = server_configurable_flags::GetServerConfigurableFlag(
@@ -471,6 +499,10 @@ bool com_android_aconfig_test_enabled_ro() {
return true; return true;
} }
bool com_android_aconfig_test_enabled_ro_exported() {
return true;
}
bool com_android_aconfig_test_enabled_rw() { bool com_android_aconfig_test_enabled_rw() {
return com::android::aconfig::test::enabled_rw(); return com::android::aconfig::test::enabled_rw();
} }
@@ -581,6 +613,19 @@ namespace com::android::aconfig::test {
overrides_["enabled_ro"] = val; overrides_["enabled_ro"] = val;
} }
virtual bool enabled_ro_exported() override {
auto it = overrides_.find("enabled_ro_exported");
if (it != overrides_.end()) {
return it->second;
} else {
return true;
}
}
virtual void enabled_ro_exported(bool val) override {
overrides_["enabled_ro_exported"] = val;
}
virtual bool enabled_rw() override { virtual bool enabled_rw() override {
auto it = overrides_.find("enabled_rw"); auto it = overrides_.find("enabled_rw");
if (it != overrides_.end()) { if (it != overrides_.end()) {
@@ -661,6 +706,17 @@ void set_com_android_aconfig_test_enabled_ro(bool val) {
com::android::aconfig::test::enabled_ro(val); com::android::aconfig::test::enabled_ro(val);
} }
bool com_android_aconfig_test_enabled_ro_exported() {
return com::android::aconfig::test::enabled_ro_exported();
}
void set_com_android_aconfig_test_enabled_ro_exported(bool val) {
com::android::aconfig::test::enabled_ro_exported(val);
}
bool com_android_aconfig_test_enabled_rw() { bool com_android_aconfig_test_enabled_rw() {
return com::android::aconfig::test::enabled_rw(); return com::android::aconfig::test::enabled_rw();
} }

View File

@@ -193,6 +193,9 @@ mod tests {
@com.android.aconfig.annotations.AssumeTrueForR8 @com.android.aconfig.annotations.AssumeTrueForR8
@UnsupportedAppUsage @UnsupportedAppUsage
boolean enabledRo(); boolean enabledRo();
@com.android.aconfig.annotations.AssumeTrueForR8
@UnsupportedAppUsage
boolean enabledRoExported();
@UnsupportedAppUsage @UnsupportedAppUsage
boolean enabledRw(); boolean enabledRw();
} }
@@ -217,6 +220,8 @@ mod tests {
/** @hide */ /** @hide */
public static final String FLAG_ENABLED_RO = "com.android.aconfig.test.enabled_ro"; public static final String FLAG_ENABLED_RO = "com.android.aconfig.test.enabled_ro";
/** @hide */ /** @hide */
public static final String FLAG_ENABLED_RO_EXPORTED = "com.android.aconfig.test.enabled_ro_exported";
/** @hide */
public static final String FLAG_ENABLED_RW = "com.android.aconfig.test.enabled_rw"; public static final String FLAG_ENABLED_RW = "com.android.aconfig.test.enabled_rw";
@com.android.aconfig.annotations.AssumeFalseForR8 @com.android.aconfig.annotations.AssumeFalseForR8
@@ -246,6 +251,11 @@ mod tests {
public static boolean enabledRo() { public static boolean enabledRo() {
return FEATURE_FLAGS.enabledRo(); return FEATURE_FLAGS.enabledRo();
} }
@com.android.aconfig.annotations.AssumeTrueForR8
@UnsupportedAppUsage
public static boolean enabledRoExported() {
return FEATURE_FLAGS.enabledRoExported();
}
@UnsupportedAppUsage @UnsupportedAppUsage
public static boolean enabledRw() { public static boolean enabledRw() {
return FEATURE_FLAGS.enabledRw(); return FEATURE_FLAGS.enabledRw();
@@ -295,6 +305,11 @@ mod tests {
} }
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public boolean enabledRoExported() {
return getValue(Flags.FLAG_ENABLED_RO_EXPORTED);
}
@Override
@UnsupportedAppUsage
public boolean enabledRw() { public boolean enabledRw() {
return getValue(Flags.FLAG_ENABLED_RW); return getValue(Flags.FLAG_ENABLED_RW);
} }
@@ -324,6 +339,7 @@ mod tests {
Map.entry(Flags.FLAG_DISABLED_RW_IN_OTHER_NAMESPACE, false), Map.entry(Flags.FLAG_DISABLED_RW_IN_OTHER_NAMESPACE, false),
Map.entry(Flags.FLAG_ENABLED_FIXED_RO, false), Map.entry(Flags.FLAG_ENABLED_FIXED_RO, false),
Map.entry(Flags.FLAG_ENABLED_RO, false), Map.entry(Flags.FLAG_ENABLED_RO, false),
Map.entry(Flags.FLAG_ENABLED_RO_EXPORTED, false),
Map.entry(Flags.FLAG_ENABLED_RW, false) Map.entry(Flags.FLAG_ENABLED_RW, false)
) )
); );
@@ -442,6 +458,11 @@ mod tests {
} }
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public boolean enabledRoExported() {
return true;
}
@Override
@UnsupportedAppUsage
public boolean enabledRw() { public boolean enabledRw() {
if (!aconfig_test_is_cached) { if (!aconfig_test_is_cached) {
load_overrides_aconfig_test(); load_overrides_aconfig_test();
@@ -494,19 +515,19 @@ mod tests {
import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage;
/** @hide */ /** @hide */
public final class Flags { public final class Flags {
/** @hide */
public static final String FLAG_DISABLED_RW = "com.android.aconfig.test.disabled_rw";
/** @hide */ /** @hide */
public static final String FLAG_DISABLED_RW_EXPORTED = "com.android.aconfig.test.disabled_rw_exported"; public static final String FLAG_DISABLED_RW_EXPORTED = "com.android.aconfig.test.disabled_rw_exported";
/** @hide */
public static final String FLAG_ENABLED_RO_EXPORTED = "com.android.aconfig.test.enabled_ro_exported";
@UnsupportedAppUsage
public static boolean disabledRw() {
return FEATURE_FLAGS.disabledRw();
}
@UnsupportedAppUsage @UnsupportedAppUsage
public static boolean disabledRwExported() { public static boolean disabledRwExported() {
return FEATURE_FLAGS.disabledRwExported(); return FEATURE_FLAGS.disabledRwExported();
} }
@UnsupportedAppUsage
public static boolean enabledRoExported() {
return FEATURE_FLAGS.enabledRoExported();
}
private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl(); private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl();
} }
"#; "#;
@@ -517,10 +538,10 @@ mod tests {
import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage;
/** @hide */ /** @hide */
public interface FeatureFlags { public interface FeatureFlags {
@UnsupportedAppUsage
boolean disabledRw();
@UnsupportedAppUsage @UnsupportedAppUsage
boolean disabledRwExported(); boolean disabledRwExported();
@UnsupportedAppUsage
boolean enabledRoExported();
} }
"#; "#;
@@ -534,17 +555,17 @@ mod tests {
public final class FeatureFlagsImpl implements FeatureFlags { public final class FeatureFlagsImpl implements FeatureFlags {
private static boolean aconfig_test_is_cached = false; private static boolean aconfig_test_is_cached = false;
private static boolean other_namespace_is_cached = false; private static boolean other_namespace_is_cached = false;
private static boolean disabledRw = false;
private static boolean disabledRwExported = false; private static boolean disabledRwExported = false;
private static boolean enabledRoExported = false;
private void load_overrides_aconfig_test() { private void load_overrides_aconfig_test() {
try { try {
Properties properties = DeviceConfig.getProperties("aconfig_test"); Properties properties = DeviceConfig.getProperties("aconfig_test");
disabledRw =
properties.getBoolean("com.android.aconfig.test.disabled_rw", false);
disabledRwExported = disabledRwExported =
properties.getBoolean("com.android.aconfig.test.disabled_rw_exported", false); properties.getBoolean("com.android.aconfig.test.disabled_rw_exported", false);
enabledRoExported =
properties.getBoolean("com.android.aconfig.test.enabled_ro_exported", false);
} catch (NullPointerException e) { } catch (NullPointerException e) {
throw new RuntimeException( throw new RuntimeException(
"Cannot read value from namespace aconfig_test " "Cannot read value from namespace aconfig_test "
@@ -574,15 +595,6 @@ mod tests {
other_namespace_is_cached = true; other_namespace_is_cached = true;
} }
@Override
@UnsupportedAppUsage
public boolean disabledRw() {
if (!aconfig_test_is_cached) {
load_overrides_aconfig_test();
}
return disabledRw;
}
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public boolean disabledRwExported() { public boolean disabledRwExported() {
@@ -591,6 +603,15 @@ mod tests {
} }
return disabledRwExported; return disabledRwExported;
} }
@Override
@UnsupportedAppUsage
public boolean enabledRoExported() {
if (!aconfig_test_is_cached) {
load_overrides_aconfig_test();
}
return enabledRoExported;
}
}"#; }"#;
let expect_fake_feature_flags_impl_content = r#" let expect_fake_feature_flags_impl_content = r#"
@@ -606,13 +627,13 @@ mod tests {
} }
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public boolean disabledRw() { public boolean disabledRwExported() {
return getValue(Flags.FLAG_DISABLED_RW); return getValue(Flags.FLAG_DISABLED_RW_EXPORTED);
} }
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public boolean disabledRwExported() { public boolean enabledRoExported() {
return getValue(Flags.FLAG_DISABLED_RW_EXPORTED); return getValue(Flags.FLAG_ENABLED_RO_EXPORTED);
} }
public void setFlag(String flagName, boolean value) { public void setFlag(String flagName, boolean value) {
if (!this.mFlagMap.containsKey(flagName)) { if (!this.mFlagMap.containsKey(flagName)) {
@@ -640,6 +661,7 @@ mod tests {
Map.entry(Flags.FLAG_DISABLED_RW_IN_OTHER_NAMESPACE, false), Map.entry(Flags.FLAG_DISABLED_RW_IN_OTHER_NAMESPACE, false),
Map.entry(Flags.FLAG_ENABLED_FIXED_RO, false), Map.entry(Flags.FLAG_ENABLED_FIXED_RO, false),
Map.entry(Flags.FLAG_ENABLED_RO, false), Map.entry(Flags.FLAG_ENABLED_RO, false),
Map.entry(Flags.FLAG_ENABLED_RO_EXPORTED, false),
Map.entry(Flags.FLAG_ENABLED_RW, false) Map.entry(Flags.FLAG_ENABLED_RW, false)
) )
); );
@@ -739,6 +761,12 @@ mod tests {
} }
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public boolean enabledRoExported() {
throw new UnsupportedOperationException(
"Method is not implemented.");
}
@Override
@UnsupportedAppUsage
public boolean enabledRw() { public boolean enabledRw() {
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"Method is not implemented."); "Method is not implemented.");

View File

@@ -158,6 +158,11 @@ impl FlagProvider {
true true
} }
/// query flag enabled_ro_exported
pub fn enabled_ro_exported(&self) -> bool {
true
}
/// query flag enabled_rw /// query flag enabled_rw
pub fn enabled_rw(&self) -> bool { pub fn enabled_rw(&self) -> bool {
*CACHED_enabled_rw *CACHED_enabled_rw
@@ -203,6 +208,12 @@ pub fn enabled_ro() -> bool {
true true
} }
/// query flag enabled_ro_exported
#[inline(always)]
pub fn enabled_ro_exported() -> bool {
true
}
/// query flag enabled_rw /// query flag enabled_rw
#[inline(always)] #[inline(always)]
pub fn enabled_rw() -> bool { pub fn enabled_rw() -> bool {
@@ -303,6 +314,18 @@ impl FlagProvider {
self.overrides.insert("enabled_ro", val); self.overrides.insert("enabled_ro", val);
} }
/// query flag enabled_ro_exported
pub fn enabled_ro_exported(&self) -> bool {
self.overrides.get("enabled_ro_exported").copied().unwrap_or(
true
)
}
/// set flag enabled_ro_exported
pub fn set_enabled_ro_exported(&mut self, val: bool) {
self.overrides.insert("enabled_ro_exported", val);
}
/// query flag enabled_rw /// query flag enabled_rw
pub fn enabled_rw(&self) -> bool { pub fn enabled_rw(&self) -> bool {
self.overrides.get("enabled_rw").copied().unwrap_or( self.overrides.get("enabled_rw").copied().unwrap_or(
@@ -401,6 +424,18 @@ pub fn set_enabled_ro(val: bool) {
PROVIDER.lock().unwrap().set_enabled_ro(val); PROVIDER.lock().unwrap().set_enabled_ro(val);
} }
/// query flag enabled_ro_exported
#[inline(always)]
pub fn enabled_ro_exported() -> bool {
PROVIDER.lock().unwrap().enabled_ro_exported()
}
/// set flag enabled_ro_exported
#[inline(always)]
pub fn set_enabled_ro_exported(val: bool) {
PROVIDER.lock().unwrap().set_enabled_ro_exported(val);
}
/// query flag enabled_rw /// query flag enabled_rw
#[inline(always)] #[inline(always)]
pub fn enabled_rw() -> bool { pub fn enabled_rw() -> bool {

View File

@@ -370,7 +370,7 @@ mod tests {
assert_eq!(ProtoFlagState::ENABLED, enabled_ro.trace[2].state()); assert_eq!(ProtoFlagState::ENABLED, enabled_ro.trace[2].state());
assert_eq!(ProtoFlagPermission::READ_ONLY, enabled_ro.trace[2].permission()); assert_eq!(ProtoFlagPermission::READ_ONLY, enabled_ro.trace[2].permission());
assert_eq!(7, parsed_flags.parsed_flag.len()); assert_eq!(8, parsed_flags.parsed_flag.len());
for pf in parsed_flags.parsed_flag.iter() { for pf in parsed_flags.parsed_flag.iter() {
if pf.name() == "enabled_fixed_ro" { if pf.name() == "enabled_fixed_ro" {
continue; continue;

View File

@@ -62,7 +62,7 @@ parsed_flag {
permission: READ_WRITE permission: READ_WRITE
} }
is_fixed_read_only: false is_fixed_read_only: false
is_exported: true is_exported: false
container: "system" container: "system"
metadata { metadata {
purpose: PURPOSE_UNSPECIFIED purpose: PURPOSE_UNSPECIFIED
@@ -72,7 +72,7 @@ parsed_flag {
package: "com.android.aconfig.test" package: "com.android.aconfig.test"
name: "disabled_rw_exported" name: "disabled_rw_exported"
namespace: "aconfig_test" namespace: "aconfig_test"
description: "This flag is exported" description: "This flag is DISABLED + READ_WRITE and exported"
bug: "111" bug: "111"
state: DISABLED state: DISABLED
permission: READ_WRITE permission: READ_WRITE
@@ -173,6 +173,31 @@ parsed_flag {
purpose: PURPOSE_BUGFIX purpose: PURPOSE_BUGFIX
} }
} }
parsed_flag {
package: "com.android.aconfig.test"
name: "enabled_ro_exported"
namespace: "aconfig_test"
description: "This flag is ENABLED + READ_ONLY and exported"
bug: "111"
state: ENABLED
permission: READ_ONLY
trace {
source: "tests/test.aconfig"
state: DISABLED
permission: READ_WRITE
}
trace {
source: "tests/first.values"
state: ENABLED
permission: READ_ONLY
}
is_fixed_read_only: false
is_exported: true
container: "system"
metadata {
purpose: PURPOSE_UNSPECIFIED
}
}
parsed_flag { parsed_flag {
package: "com.android.aconfig.test" package: "com.android.aconfig.test"
name: "enabled_rw" name: "enabled_rw"

View File

@@ -71,14 +71,10 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public boolean {flag.method_name}() \{ public boolean {flag.method_name}() \{
{{ -if flag.is_read_write }}
if (!{flag.device_config_namespace}_is_cached) \{ if (!{flag.device_config_namespace}_is_cached) \{
load_overrides_{flag.device_config_namespace}(); load_overrides_{flag.device_config_namespace}();
} }
return {flag.method_name}; return {flag.method_name};
{{ else }}
return {flag.default_value};
{{ endif- }}
} }
{{ endif }} {{ endif }}

View File

@@ -28,6 +28,12 @@ flag_value {
state: ENABLED state: ENABLED
permission: READ_ONLY permission: READ_ONLY
} }
flag_value {
package: "com.android.aconfig.test"
name: "enabled_ro_exported"
state: ENABLED
permission: READ_ONLY
}
flag_value { flag_value {
package: "com.android.aconfig.test" package: "com.android.aconfig.test"
name: "disabled_rw_exported" name: "disabled_rw_exported"

View File

@@ -43,7 +43,6 @@ flag {
namespace: "aconfig_test" namespace: "aconfig_test"
description: "This flag is DISABLED + READ_WRITE" description: "This flag is DISABLED + READ_WRITE"
bug: "456" bug: "456"
is_exported: true
} }
# This flag's final value calculated from: # This flag's final value calculated from:
@@ -65,9 +64,17 @@ flag {
} }
flag { flag {
name: "disabled_rw_exported" name: "enabled_ro_exported"
namespace: "aconfig_test" namespace: "aconfig_test"
description: "This flag is exported" description: "This flag is ENABLED + READ_ONLY and exported"
bug: "111" bug: "111"
is_exported: true is_exported: true
} }
flag {
name: "disabled_rw_exported"
namespace: "aconfig_test"
description: "This flag is DISABLED + READ_WRITE and exported"
bug: "111"
is_exported: true
}