diff options
author | 2025-03-07 10:02:05 -0800 | |
---|---|---|
committer | 2025-03-07 10:33:42 -0800 | |
commit | 884ec2de1406a1b9979e653d47229da221e7f14f (patch) | |
tree | 2b7805bb2f24fc18d39b910bfc4baf9b82191e2b | |
parent | ccb970ba18891d44d710a3ed6c7a0185cfd69668 (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
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"); + } } |