summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Makoto Onuki <omakoto@google.com> 2025-03-07 10:02:05 -0800
committer Makoto Onuki <omakoto@google.com> 2025-03-07 10:33:42 -0800
commit884ec2de1406a1b9979e653d47229da221e7f14f (patch)
tree2b7805bb2f24fc18d39b910bfc4baf9b82191e2b
parentccb970ba18891d44d710a3ed6c7a0185cfd69668 (diff)
Add tests for resource flags
- Flags work, except all RW flags are treated as "enabled". - Also enable tests that no longer need to be disabled - Also added a java system prop that has the runtime directory path Bug: 396458006 Test: $ANDROID_BUILD_TOP/frameworks/base/ravenwood/scripts/run-ravenwood-tests.sh -s Flag: EXEMPT host test change only Change-Id: I0402da0ba59c27c17b6dd4d2f646cdee7800a290
-rw-r--r--ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java10
-rw-r--r--ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java2
-rw-r--r--ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/aconfig/RavenwoodAconfigFlagTest.kt4
-rw-r--r--ravenwood/tests/resapk_test/Android.bp3
-rw-r--r--ravenwood/tests/resapk_test/apk/Android.bp8
-rw-r--r--ravenwood/tests/resapk_test/apk/res/layout/testlayout.xml8
-rw-r--r--ravenwood/tests/resapk_test/apk/res/values/strings.xml5
-rw-r--r--ravenwood/tests/resapk_test/test/com/android/ravenwoodtest/resapk_test/RavenwoodResApkTest.java91
8 files changed, 121 insertions, 10 deletions
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
index d935626c34df..d8741975c71a 100644
--- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
+++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
@@ -23,7 +23,9 @@ import static android.platform.test.ravenwood.RavenwoodSystemServer.ANDROID_PACK
import static com.android.ravenwood.common.RavenwoodCommonUtils.RAVENWOOD_EMPTY_RESOURCES_APK;
import static com.android.ravenwood.common.RavenwoodCommonUtils.RAVENWOOD_INST_RESOURCE_APK;
import static com.android.ravenwood.common.RavenwoodCommonUtils.RAVENWOOD_RESOURCE_APK;
+import static com.android.ravenwood.common.RavenwoodCommonUtils.RAVENWOOD_RUNTIME_PATH_JAVA_SYSPROP;
import static com.android.ravenwood.common.RavenwoodCommonUtils.RAVENWOOD_VERSION_JAVA_SYSPROP;
+import static com.android.ravenwood.common.RavenwoodCommonUtils.getRavenwoodRuntimePath;
import static com.android.ravenwood.common.RavenwoodCommonUtils.parseNullableInt;
import static com.android.ravenwood.common.RavenwoodCommonUtils.withDefault;
@@ -271,6 +273,13 @@ public class RavenwoodRuntimeEnvironmentController {
dumpJavaProperties();
dumpOtherInfo();
+ System.setProperty(RAVENWOOD_VERSION_JAVA_SYSPROP, "1");
+ var runtimePath = getRavenwoodRuntimePath();
+ System.setProperty(RAVENWOOD_RUNTIME_PATH_JAVA_SYSPROP, runtimePath);
+
+ Log.i(TAG, "PWD=" + System.getProperty("user.dir"));
+ Log.i(TAG, "RuntimePath=" + runtimePath);
+
// Make sure libravenwood_runtime is loaded.
System.load(RavenwoodCommonUtils.getJniLibraryPath(RAVENWOOD_NATIVE_RUNTIME_NAME));
@@ -314,7 +323,6 @@ public class RavenwoodRuntimeEnvironmentController {
Typeface.loadPreinstalledSystemFontMap();
Typeface.loadNativeSystemFonts();
- System.setProperty(RAVENWOOD_VERSION_JAVA_SYSPROP, "1");
// This will let AndroidJUnit4 use the original runner.
System.setProperty("android.junit.runner",
"androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner");
diff --git a/ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java b/ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java
index 893b354d4645..e1b537e11842 100644
--- a/ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java
+++ b/ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java
@@ -68,6 +68,8 @@ public class RavenwoodCommonUtils {
RAVENWOOD_RUNTIME_PATH + "ravenwood-data/ravenwood-empty-res.apk";
public static final String RAVENWOOD_VERSION_JAVA_SYSPROP = "android.ravenwood.version";
+ public static final String RAVENWOOD_RUNTIME_PATH_JAVA_SYSPROP =
+ "android.ravenwood.runtime_path";
/**
* @return if we're running on Ravenwood.
diff --git a/ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/aconfig/RavenwoodAconfigFlagTest.kt b/ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/aconfig/RavenwoodAconfigFlagTest.kt
index fd6d6fb66465..b3af8753ee83 100644
--- a/ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/aconfig/RavenwoodAconfigFlagTest.kt
+++ b/ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/aconfig/RavenwoodAconfigFlagTest.kt
@@ -25,7 +25,6 @@ import com.android.internal.os.Flags
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Assert.fail
-import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -40,7 +39,6 @@ class RavenwoodAconfigSimpleReadTests {
}
@Test
- @Ignore // TODO: Enable this test after rolling out the "2" flags.
fun testTrueFlags() {
assertTrue(Flags.ravenwoodFlagRo2())
assertTrue(Flags.ravenwoodFlagRw2())
@@ -67,14 +65,12 @@ class RavenwoodAconfigCheckFlagsRuleTests {
@Test
@RequiresFlagsDisabled(Flags.FLAG_RAVENWOOD_FLAG_RO_2)
- @Ignore // TODO: Enable this test after rolling out the "2" flags.
fun testRequireFlagsDisabledRo() {
fail("This test shouldn't be executed")
}
@Test
@RequiresFlagsDisabled(Flags.FLAG_RAVENWOOD_FLAG_RW_2)
- @Ignore // TODO: Enable this test after rolling out the "2" flags.
fun testRequireFlagsDisabledRw() {
fail("This test shouldn't be executed")
}
diff --git a/ravenwood/tests/resapk_test/Android.bp b/ravenwood/tests/resapk_test/Android.bp
index c14576550f78..960b3ed0013a 100644
--- a/ravenwood/tests/resapk_test/Android.bp
+++ b/ravenwood/tests/resapk_test/Android.bp
@@ -10,7 +10,7 @@ package {
android_ravenwood_test {
name: "RavenwoodResApkTest",
- resource_apk: "RavenwoodResApkTest-apk",
+ resource_apk: "RavenwoodResApkTest-res",
libs: [
// Normally, tests shouldn't directly access it, but we need to access RavenwoodCommonUtils
@@ -24,6 +24,7 @@ android_ravenwood_test {
],
srcs: [
"test/**/*.java",
+ ":RavenwoodResApkTest-res{.aapt.srcjar}",
],
sdk_version: "test_current",
auto_gen_config: true,
diff --git a/ravenwood/tests/resapk_test/apk/Android.bp b/ravenwood/tests/resapk_test/apk/Android.bp
index 10ed5e2f8410..fd8976df4316 100644
--- a/ravenwood/tests/resapk_test/apk/Android.bp
+++ b/ravenwood/tests/resapk_test/apk/Android.bp
@@ -8,7 +8,13 @@ package {
}
android_app {
- name: "RavenwoodResApkTest-apk",
+ name: "RavenwoodResApkTest-res",
sdk_version: "current",
+
+ use_resource_processor: false,
+
+ flags_packages: [
+ "com.android.internal.os.flags-aconfig",
+ ],
}
diff --git a/ravenwood/tests/resapk_test/apk/res/layout/testlayout.xml b/ravenwood/tests/resapk_test/apk/res/layout/testlayout.xml
new file mode 100644
index 000000000000..17cdb868fc6b
--- /dev/null
+++ b/ravenwood/tests/resapk_test/apk/res/layout/testlayout.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <View android:id="@+id/view1" text="no-flags" />
+ <View android:id="@+id/view2" text="ro-enabled" android:featureFlag="com.android.internal.os.ravenwood_flag_ro_2"/>
+ <View android:id="@+id/view3" text="ro-disabled" android:featureFlag="com.android.internal.os.ravenwood_flag_ro_1"/>
+ <View android:id="@+id/view2" text="rw-enabled" android:featureFlag="com.android.internal.os.ravenwood_flag_rw_2"/>
+ <View android:id="@+id/view3" text="rw-disabled" android:featureFlag="com.android.internal.os.ravenwood_flag_rw_1"/>
+</LinearLayout>
diff --git a/ravenwood/tests/resapk_test/apk/res/values/strings.xml b/ravenwood/tests/resapk_test/apk/res/values/strings.xml
index 23d4c0f21007..5abf7475caa7 100644
--- a/ravenwood/tests/resapk_test/apk/res/values/strings.xml
+++ b/ravenwood/tests/resapk_test/apk/res/values/strings.xml
@@ -13,7 +13,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Test string 1 -->
<string name="test_string_1" translatable="false" >Test String 1</string>
+ <!-- values can only use readonly flags -->
+ <string name="test_string_enabled" translatable="false" android:featureFlag="com.android.internal.os.ravenwood_flag_ro_2">Enabled</string>
+ <string name="test_string_disabled" translatable="false" android:featureFlag="com.android.internal.os.ravenwood_flag_ro_1">Disabled</string>
</resources>
diff --git a/ravenwood/tests/resapk_test/test/com/android/ravenwoodtest/resapk_test/RavenwoodResApkTest.java b/ravenwood/tests/resapk_test/test/com/android/ravenwoodtest/resapk_test/RavenwoodResApkTest.java
index e547114bbe40..89f8d40da7d4 100644
--- a/ravenwood/tests/resapk_test/test/com/android/ravenwoodtest/resapk_test/RavenwoodResApkTest.java
+++ b/ravenwood/tests/resapk_test/test/com/android/ravenwoodtest/resapk_test/RavenwoodResApkTest.java
@@ -16,23 +16,41 @@
package com.android.ravenwoodtest.resapk_test;
+import static com.google.common.truth.Truth.assertThat;
+
import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+
+import android.content.Context;
+import android.content.res.XmlResourceParser;
+import android.platform.test.annotations.DisabledOnRavenwood;
+import android.util.Log;
+
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
import com.android.ravenwood.common.RavenwoodCommonUtils;
+import com.android.ravenwood.restest_apk.R;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.xmlpull.v1.XmlPullParser;
import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
@RunWith(AndroidJUnit4.class)
public class RavenwoodResApkTest {
+ private static final String TAG = "RavenwoodResApkTest";
+
+ private static final Context sContext =
+ InstrumentationRegistry.getInstrumentation().getContext();
+
/**
* Ensure the file "ravenwood-res.apk" exists.
- * TODO Check the content of it, once Ravenwood supports resources. The file should
- * be a copy of RavenwoodResApkTest-apk.apk
*/
@Test
public void testResApkExists() {
@@ -48,4 +66,73 @@ public class RavenwoodResApkTest {
assertTrue(new File(
RavenwoodCommonUtils.getRavenwoodRuntimePath() + "/" + file).exists());
}
+
+ @Test
+ public void testReadStringNoFlag() {
+ assertThat(sContext.getString(R.string.test_string_1)).isEqualTo("Test String 1");
+ }
+
+ @Test
+ public void testReadStringRoFlagEnabled() {
+ assertThat(sContext.getString(R.string.test_string_enabled)).isEqualTo("Enabled");
+ }
+
+ @Test
+ public void testReadStringRoFlagDisabled() {
+ assertThrows(android.content.res.Resources.NotFoundException.class, () -> {
+ sContext.getString(R.string.test_string_disabled);
+ });
+ }
+
+ /**
+ * Look into the layout and collect the "text" attribute.
+ *
+ * It _should_ respect android:featureFlag, but until b/396458006 gets fixed, this returns
+ * even disabled elements.
+ */
+ private List<String> getTextsFromEnabledChildren() throws Exception {
+ try (XmlResourceParser parser = sContext.getResources().getLayout(R.layout.testlayout)) {
+ assertNotNull(parser);
+
+ var ret = new ArrayList<String>();
+
+ while (parser.next() != XmlPullParser.END_DOCUMENT) {
+ var text = parser.getAttributeValue(null, "text");
+ if (text == null) {
+ continue;
+ }
+
+ Log.d(TAG, "Found tag: " + parser.getName() + " text='" + text + "'");
+ ret.add(text);
+ }
+ return ret;
+ }
+ }
+
+ @Test
+ public void testElementNoFlag() throws Exception {
+ assertThat(getTextsFromEnabledChildren()).contains("no-flags");
+ }
+
+ @Test
+ public void testElementWithRoFlagEnabled() throws Exception {
+ assertThat(getTextsFromEnabledChildren()).contains("ro-enabled");
+ }
+
+ @Test
+ public void testElementWithRoFlagDisabled() throws Exception {
+ assertThat(getTextsFromEnabledChildren()).doesNotContain("ro-disabled");
+ }
+
+ @Test
+ public void testElementWithRwFlagEnabled() throws Exception {
+ assertThat(getTextsFromEnabledChildren()).contains("rw-enabled");
+ }
+
+ @Test
+ @DisabledOnRavenwood(bug = 396458006,
+ reason = "RW flags in XML are all handled as enabled for now")
+ public void testElementWithRwFlagDisabled() throws Exception {
+ assertThat(getTextsFromEnabledChildren()).doesNotContain("rw-disabled");
+ }
}