diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp index 6c4bb909c9..1e9ac62eb7 100644 --- a/tests/unit/Android.bp +++ b/tests/unit/Android.bp @@ -61,16 +61,17 @@ android_test { static_libs: [ "androidx.test.rules", "bouncycastle-repackaged-unbundled", - "FrameworksNetCommonTests", "frameworks-base-testutils", "frameworks-net-integration-testutils", "framework-protos", - "mockito-target-minus-junit4", + "mockito-target-extended-minus-junit4", "net-tests-utils", "platform-test-annotations", "service-connectivity-pre-jarjar", "services.core", "services.net", + // At the bottom to prefer test libraries above instead of those in the common tests + "FrameworksNetCommonTests", ], libs: [ "android.net.ipsec.ike.stubs.module_lib", @@ -80,6 +81,9 @@ android_test { "ServiceConnectivityResources", ], jni_libs: [ + // For mockito extended + "libdexmakerjvmtiagent", + "libstaticjvmtiagent", "libservice-connectivity", ], } diff --git a/tests/unit/AndroidManifest.xml b/tests/unit/AndroidManifest.xml index 4c60ccf606..0e3528d2fa 100644 --- a/tests/unit/AndroidManifest.xml +++ b/tests/unit/AndroidManifest.xml @@ -50,7 +50,8 @@ - + + diff --git a/tests/unit/java/android/net/ConnectivityManagerTest.java b/tests/unit/java/android/net/ConnectivityManagerTest.java index c804e10038..bd2513e34b 100644 --- a/tests/unit/java/android/net/ConnectivityManagerTest.java +++ b/tests/unit/java/android/net/ConnectivityManagerTest.java @@ -46,6 +46,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; @@ -216,6 +217,7 @@ public class ConnectivityManagerTest { ConnectivityManager manager = new ConnectivityManager(mCtx, mService); NetworkRequest request = makeRequest(1); NetworkCallback callback = mock(ConnectivityManager.NetworkCallback.class); + doCallRealMethod().when(callback).onAvailable(any(), any(), any(), anyInt()); Handler handler = new Handler(Looper.getMainLooper()); ArgumentCaptor captor = ArgumentCaptor.forClass(Messenger.class); @@ -244,6 +246,7 @@ public class ConnectivityManagerTest { NetworkRequest req1 = makeRequest(1); NetworkRequest req2 = makeRequest(2); NetworkCallback callback = mock(ConnectivityManager.NetworkCallback.class); + doCallRealMethod().when(callback).onAvailable(any(), any(), any(), anyInt()); Handler handler = new Handler(Looper.getMainLooper()); ArgumentCaptor captor = ArgumentCaptor.forClass(Messenger.class); diff --git a/tests/unit/java/android/net/nsd/NsdManagerTest.java b/tests/unit/java/android/net/nsd/NsdManagerTest.java index b0a9b8a553..370179c2b1 100644 --- a/tests/unit/java/android/net/nsd/NsdManagerTest.java +++ b/tests/unit/java/android/net/nsd/NsdManagerTest.java @@ -20,12 +20,12 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import static org.mockito.Mockito.any; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import android.content.Context; import android.os.Handler; @@ -66,7 +66,7 @@ public class NsdManagerTest { MockitoAnnotations.initMocks(this); mServiceHandler = spy(MockServiceHandler.create(mContext)); - when(mService.getMessenger()).thenReturn(new Messenger(mServiceHandler)); + doReturn(new Messenger(mServiceHandler)).when(mService).getMessenger(); mManager = makeManager(); } diff --git a/tests/unit/java/android/net/util/MultinetworkPolicyTrackerTest.kt b/tests/unit/java/android/net/util/MultinetworkPolicyTrackerTest.kt index 25aa626657..9291532667 100644 --- a/tests/unit/java/android/net/util/MultinetworkPolicyTrackerTest.kt +++ b/tests/unit/java/android/net/util/MultinetworkPolicyTrackerTest.kt @@ -74,6 +74,7 @@ class MultinetworkPolicyTrackerTest { doReturn(Context.TELEPHONY_SERVICE).`when`(it) .getSystemServiceName(TelephonyManager::class.java) doReturn(telephonyManager).`when`(it).getSystemService(Context.TELEPHONY_SERVICE) + doReturn(telephonyManager).`when`(it).getSystemService(TelephonyManager::class.java) doReturn(subscriptionManager).`when`(it) .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) doReturn(resolver).`when`(it).contentResolver diff --git a/tests/unit/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java b/tests/unit/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java index 38f6d7f317..d6bd08e7ae 100644 --- a/tests/unit/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java +++ b/tests/unit/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java @@ -116,6 +116,7 @@ public class MultipathPolicyTrackerTest { private void mockService(String serviceName, Class serviceClass, T service) { when(mContext.getSystemServiceName(serviceClass)).thenReturn(serviceName); when(mContext.getSystemService(serviceName)).thenReturn(service); + when(mContext.getSystemService(serviceClass)).thenReturn(service); } @Before diff --git a/tests/unit/java/com/android/server/connectivity/PermissionMonitorTest.java b/tests/unit/java/com/android/server/connectivity/PermissionMonitorTest.java index e98f5db564..0bfc129685 100644 --- a/tests/unit/java/com/android/server/connectivity/PermissionMonitorTest.java +++ b/tests/unit/java/com/android/server/connectivity/PermissionMonitorTest.java @@ -139,6 +139,7 @@ public class PermissionMonitorTest { .thenReturn(Context.SYSTEM_CONFIG_SERVICE); when(mContext.getSystemService(Context.SYSTEM_CONFIG_SERVICE)) .thenReturn(mSystemConfigManager); + when(mContext.getSystemService(SystemConfigManager.class)).thenReturn(mSystemConfigManager); when(mSystemConfigManager.getSystemPermissionUids(anyString())).thenReturn(new int[0]); final Context asUserCtx = mock(Context.class, AdditionalAnswers.delegatesTo(mContext)); doReturn(UserHandle.ALL).when(asUserCtx).getUser(); diff --git a/tests/unit/java/com/android/server/connectivity/VpnTest.java b/tests/unit/java/com/android/server/connectivity/VpnTest.java index b725b826b1..a086451b26 100644 --- a/tests/unit/java/com/android/server/connectivity/VpnTest.java +++ b/tests/unit/java/com/android/server/connectivity/VpnTest.java @@ -219,19 +219,11 @@ public class VpnTest { when(mContext.getPackageName()).thenReturn(TEST_VPN_PKG); when(mContext.getOpPackageName()).thenReturn(TEST_VPN_PKG); - when(mContext.getSystemServiceName(UserManager.class)) - .thenReturn(Context.USER_SERVICE); - when(mContext.getSystemService(eq(Context.USER_SERVICE))).thenReturn(mUserManager); - when(mContext.getSystemService(eq(Context.APP_OPS_SERVICE))).thenReturn(mAppOps); - when(mContext.getSystemServiceName(NotificationManager.class)) - .thenReturn(Context.NOTIFICATION_SERVICE); - when(mContext.getSystemService(eq(Context.NOTIFICATION_SERVICE))) - .thenReturn(mNotificationManager); - when(mContext.getSystemService(eq(Context.CONNECTIVITY_SERVICE))) - .thenReturn(mConnectivityManager); - when(mContext.getSystemServiceName(eq(ConnectivityManager.class))) - .thenReturn(Context.CONNECTIVITY_SERVICE); - when(mContext.getSystemService(eq(Context.IPSEC_SERVICE))).thenReturn(mIpSecManager); + mockService(UserManager.class, Context.USER_SERVICE, mUserManager); + mockService(AppOpsManager.class, Context.APP_OPS_SERVICE, mAppOps); + mockService(NotificationManager.class, Context.NOTIFICATION_SERVICE, mNotificationManager); + mockService(ConnectivityManager.class, Context.CONNECTIVITY_SERVICE, mConnectivityManager); + mockService(IpSecManager.class, Context.IPSEC_SERVICE, mIpSecManager); when(mContext.getString(R.string.config_customVpnAlwaysOnDisconnectedDialogComponent)) .thenReturn(Resources.getSystem().getString( R.string.config_customVpnAlwaysOnDisconnectedDialogComponent)); @@ -259,6 +251,12 @@ public class VpnTest { .thenReturn(tunnelResp); } + private void mockService(Class clazz, String name, T service) { + doReturn(service).when(mContext).getSystemService(clazz); + doReturn(service).when(mContext).getSystemService(name); + doReturn(name).when(mContext).getSystemServiceName(clazz); + } + private Set> rangeSet(Range ... ranges) { final Set> range = new ArraySet<>(); for (Range r : ranges) range.add(r); diff --git a/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java index 0ba5f7d824..da2fdf4aca 100644 --- a/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java +++ b/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java @@ -16,12 +16,16 @@ package com.android.server.net; +import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY; +import static android.Manifest.permission.UPDATE_DEVICE_STATS; import static android.content.Intent.ACTION_UID_REMOVED; import static android.content.Intent.EXTRA_UID; +import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.net.ConnectivityManager.TYPE_MOBILE; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.NetworkIdentity.OEM_PAID; import static android.net.NetworkIdentity.OEM_PRIVATE; +import static android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK; import static android.net.NetworkStats.DEFAULT_NETWORK_ALL; import static android.net.NetworkStats.DEFAULT_NETWORK_NO; import static android.net.NetworkStats.DEFAULT_NETWORK_YES; @@ -106,6 +110,7 @@ import android.os.SimpleClock; import android.provider.Settings; import android.telephony.TelephonyManager; +import androidx.annotation.Nullable; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; @@ -199,6 +204,26 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { if (Context.TELEPHONY_SERVICE.equals(name)) return mTelephonyManager; return mBaseContext.getSystemService(name); } + + @Override + public void enforceCallingOrSelfPermission(String permission, @Nullable String message) { + if (checkCallingOrSelfPermission(permission) != PERMISSION_GRANTED) { + super.enforceCallingOrSelfPermission(permission, message); + } + } + + @Override + public int checkCallingOrSelfPermission(String permission) { + switch (permission) { + case PERMISSION_MAINLINE_NETWORK_STACK: + case READ_NETWORK_USAGE_HISTORY: + case UPDATE_DEVICE_STATS: + return PERMISSION_GRANTED; + default: + return super.checkCallingOrSelfPermission(permission); + } + + } } private final Clock mClock = new SimpleClock(ZoneOffset.UTC) {