From 19e61719261bd837504488d185f7b298593da490 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Mon, 21 Feb 2022 15:58:02 +0900 Subject: [PATCH] Mock resources used directly by LockdownVpnTracker. LockdownVpnTracker directly uses resources from com.android.internal.R. This is acceptable because it's platform code. But ConnectivityServiceTest uses the LockdownVpnTracker built from the module source tree, and when that code fetches resources on a previous Android release, it crashes because the resource IDs don't exist; non-public resource IDs aren't stable. Fix this by mocking the resources used by LockdownVpnTracker. Test: atest ConnectivityCoverageTests Change-Id: I239a18a38d4f1082f76f5ff1b831c15ee753bdfd --- .../android/server/ConnectivityServiceTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index 16b3d5ad81..852043d93d 100644 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -573,6 +573,12 @@ public class ConnectivityServiceTest { // is ",,". PID+UID permissons have priority over generic ones. private final HashMap mMockedPermissions = new HashMap<>(); + private void mockStringResource(int resId) { + doAnswer((inv) -> { + return "Mock string resource ID=" + inv.getArgument(0); + }).when(mInternalResources).getString(resId); + } + MockContext(Context base, ContentProvider settingsProvider) { super(base); @@ -585,6 +591,16 @@ public class ConnectivityServiceTest { }).when(mInternalResources) .getStringArray(com.android.internal.R.array.networkAttributes); + final int[] stringResourcesToMock = new int[] { + com.android.internal.R.string.vpn_lockdown_config, + com.android.internal.R.string.vpn_lockdown_connected, + com.android.internal.R.string.vpn_lockdown_connecting, + com.android.internal.R.string.vpn_lockdown_error, + }; + for (int resId : stringResourcesToMock) { + mockStringResource(resId); + } + mContentResolver = new MockContentResolver(); mContentResolver.addProvider(Settings.AUTHORITY, settingsProvider); }