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_exported() = 0;
virtual bool enabled_rw() = 0;
};
@@ -199,6 +201,10 @@ inline bool enabled_ro() {
return true;
}
inline bool enabled_ro_exported() {
return true;
}
inline bool 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_exported();
bool com_android_aconfig_test_enabled_rw();
#ifdef __cplusplus
@@ -265,6 +273,10 @@ public:
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 void enabled_rw(bool val) = 0;
@@ -322,6 +334,14 @@ inline void enabled_ro(bool 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() {
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);
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();
void set_com_android_aconfig_test_enabled_rw(bool val);
@@ -429,6 +453,10 @@ namespace com::android::aconfig::test {
return true;
}
virtual bool enabled_ro_exported() override {
return true;
}
virtual bool enabled_rw() override {
if (cache_[3] == -1) {
cache_[3] = server_configurable_flags::GetServerConfigurableFlag(
@@ -471,6 +499,10 @@ bool com_android_aconfig_test_enabled_ro() {
return true;
}
bool com_android_aconfig_test_enabled_ro_exported() {
return true;
}
bool 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;
}
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 {
auto it = overrides_.find("enabled_rw");
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);
}
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() {
return com::android::aconfig::test::enabled_rw();
}

View File

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

View File

@@ -158,6 +158,11 @@ impl FlagProvider {
true
}
/// query flag enabled_ro_exported
pub fn enabled_ro_exported(&self) -> bool {
true
}
/// query flag enabled_rw
pub fn enabled_rw(&self) -> bool {
*CACHED_enabled_rw
@@ -203,6 +208,12 @@ pub fn enabled_ro() -> bool {
true
}
/// query flag enabled_ro_exported
#[inline(always)]
pub fn enabled_ro_exported() -> bool {
true
}
/// query flag enabled_rw
#[inline(always)]
pub fn enabled_rw() -> bool {
@@ -303,6 +314,18 @@ impl FlagProvider {
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
pub fn enabled_rw(&self) -> bool {
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);
}
/// 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
#[inline(always)]
pub fn enabled_rw() -> bool {

View File

@@ -370,7 +370,7 @@ mod tests {
assert_eq!(ProtoFlagState::ENABLED, enabled_ro.trace[2].state());
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() {
if pf.name() == "enabled_fixed_ro" {
continue;

View File

@@ -62,7 +62,7 @@ parsed_flag {
permission: READ_WRITE
}
is_fixed_read_only: false
is_exported: true
is_exported: false
container: "system"
metadata {
purpose: PURPOSE_UNSPECIFIED
@@ -72,7 +72,7 @@ parsed_flag {
package: "com.android.aconfig.test"
name: "disabled_rw_exported"
namespace: "aconfig_test"
description: "This flag is exported"
description: "This flag is DISABLED + READ_WRITE and exported"
bug: "111"
state: DISABLED
permission: READ_WRITE
@@ -173,6 +173,31 @@ parsed_flag {
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 {
package: "com.android.aconfig.test"
name: "enabled_rw"

View File

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

View File

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

View File

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