From 8060dfed236d03e177daedd251a9b3cfec5eb1f1 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Mon, 1 Mar 2021 15:13:09 +0900 Subject: [PATCH] Make ConnectivityManagerTest use the API shims. This is required for the code to be identical in AOSP and mainline-prod. Bug: 167645754 Test: atest CtsNetTestCases passes on AOSP device Test: atest CtsNetTestCasesLatestSdk passes on AOSP device Test: atest CtsNetTestCasesLatestSdk passes on R device Change-Id: I094906e535d710a46a3fa833b6aa48cb007d6b63 --- tests/cts/net/Android.bp | 9 ++++++- .../net/cts/ConnectivityManagerTest.java | 25 ++++++++++++++----- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/tests/cts/net/Android.bp b/tests/cts/net/Android.bp index bbfb2c11b2..62160df969 100644 --- a/tests/cts/net/Android.bp +++ b/tests/cts/net/Android.bp @@ -43,7 +43,6 @@ java_defaults { static_libs: [ "bouncycastle-unbundled", "FrameworksNetCommonTests", - "TestNetworkStackLib", "core-tests-support", "cts-net-utils", "ctstestrunner-axt", @@ -66,6 +65,10 @@ java_defaults { android_test { name: "CtsNetTestCases", defaults: ["CtsNetTestCasesDefaults"], + // TODO: CTS should not depend on the entirety of the networkstack code. + static_libs: [ + "NetworkStackApiCurrentLib", + ], test_suites: [ "cts", "general-tests", @@ -79,6 +82,10 @@ android_test { android_test { name: "CtsNetTestCasesLatestSdk", defaults: ["CtsNetTestCasesDefaults"], + // TODO: CTS should not depend on the entirety of the networkstack code. + static_libs: [ + "NetworkStackApiStableLib", + ], jni_uses_sdk_apis: true, min_sdk_version: "29", target_sdk_version: "30", diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java index fad688bde7..2e273ee4ec 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java @@ -110,6 +110,9 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.util.ArrayUtils; import com.android.modules.utils.build.SdkLevel; +import com.android.networkstack.apishim.ConnectivityManagerShimImpl; +import com.android.networkstack.apishim.ConstantsShim; +import com.android.networkstack.apishim.common.ConnectivityManagerShim; import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo; import com.android.testutils.RecorderCallback.CallbackEntry; @@ -195,6 +198,7 @@ public class ConnectivityManagerTest { private Context mContext; private Instrumentation mInstrumentation; private ConnectivityManager mCm; + private ConnectivityManagerShim mCmShim; private WifiManager mWifiManager; private PackageManager mPackageManager; private final HashMap mNetworks = @@ -207,6 +211,7 @@ public class ConnectivityManagerTest { mInstrumentation = InstrumentationRegistry.getInstrumentation(); mContext = mInstrumentation.getContext(); mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + mCmShim = ConnectivityManagerShimImpl.newInstance(mContext); mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); mPackageManager = mContext.getPackageManager(); mCtsNetUtils = new CtsNetUtils(mContext); @@ -522,9 +527,9 @@ public class ConnectivityManagerTest { mCm.registerDefaultNetworkCallback(defaultTrackingCallback); final TestNetworkCallback systemDefaultTrackingCallback = new TestNetworkCallback(); - if (SdkLevel.isAtLeastS()) { + if (shouldTestSApis()) { runWithShellPermissionIdentity(() -> - mCm.registerSystemDefaultNetworkCallback(systemDefaultTrackingCallback, + mCmShim.registerSystemDefaultNetworkCallback(systemDefaultTrackingCallback, new Handler(Looper.getMainLooper())), NETWORK_SETTINGS); } @@ -544,7 +549,7 @@ public class ConnectivityManagerTest { assertNotNull("Did not receive onAvailable on default network callback", defaultTrackingCallback.waitForAvailable()); - if (SdkLevel.isAtLeastS()) { + if (shouldTestSApis()) { assertNotNull("Did not receive onAvailable on system default network callback", systemDefaultTrackingCallback.waitForAvailable()); } @@ -553,7 +558,7 @@ public class ConnectivityManagerTest { } finally { mCm.unregisterNetworkCallback(callback); mCm.unregisterNetworkCallback(defaultTrackingCallback); - if (SdkLevel.isAtLeastS()) { + if (shouldTestSApis()) { runWithShellPermissionIdentity( () -> mCm.unregisterNetworkCallback(systemDefaultTrackingCallback), NETWORK_SETTINGS); @@ -1599,14 +1604,14 @@ public class ConnectivityManagerTest { // Verify background network cannot be requested without NETWORK_SETTINGS permission. final TestableNetworkCallback callback = new TestableNetworkCallback(); assertThrows(SecurityException.class, - () -> mCm.requestBackgroundNetwork(testRequest, null, callback)); + () -> mCmShim.requestBackgroundNetwork(testRequest, null, callback)); Network testNetwork = null; try { // Request background test network via Shell identity which has NETWORK_SETTINGS // permission granted. runWithShellPermissionIdentity( - () -> mCm.requestBackgroundNetwork(testRequest, null, callback), + () -> mCmShim.requestBackgroundNetwork(testRequest, null, callback), new String[] { android.Manifest.permission.NETWORK_SETTINGS }); // Register the test network agent which has no foreground request associated to it. @@ -1646,4 +1651,12 @@ public class ConnectivityManagerTest { mCm.unregisterNetworkCallback(callback); } } + + /** + * Whether to test S+ APIs. This requires a) that the test be running on an S+ device, and + * b) that the code be compiled against shims new enough to access these APIs. + */ + private boolean shouldTestSApis() { + return SdkLevel.isAtLeastS() && ConstantsShim.VERSION > Build.VERSION_CODES.R; + } }