From a9b4fa72486e57720e719fcb487bcf9724ca94b2 Mon Sep 17 00:00:00 2001 From: Junyu Lai Date: Mon, 3 Jan 2022 09:07:23 +0000 Subject: [PATCH] [MS32.2] Remove TetheringManager#ACTION_TETHER_STATE_CHANGED usage Replace intent receiver with callback listener. Test: atest com.android.server.net.NetworkStatsServiceTest Bug: 204830222 Change-Id: I07ef87b08b5d177719a82f79a2866d72b003fb5a --- .../server/net/NetworkStatsServiceTest.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java index 64168087a4..513f485d8e 100644 --- a/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java +++ b/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java @@ -96,6 +96,7 @@ import android.net.NetworkStats; import android.net.NetworkStatsHistory; import android.net.NetworkTemplate; import android.net.TelephonyNetworkSpecifier; +import android.net.TetheringManager; import android.net.UnderlyingNetworkInfo; import android.net.netstats.provider.INetworkStatsProviderCallback; import android.net.wifi.WifiInfo; @@ -184,6 +185,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { private @Mock TelephonyManager mTelephonyManager; private static @Mock WifiInfo sWifiInfo; private @Mock INetworkManagementService mNetManager; + private @Mock TetheringManager mTetheringManager; private @Mock NetworkStatsFactory mStatsFactory; private @Mock NetworkStatsSettings mSettings; private @Mock IBinder mBinder; @@ -197,6 +199,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { private INetworkManagementEventObserver mNetworkObserver; private ContentObserver mContentObserver; private Handler mHandler; + private TetheringManager.TetheringEventCallback mTetheringEventCallback; private class MockContext extends BroadcastInterceptingContext { private final Context mBaseContext; @@ -209,6 +212,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { @Override public Object getSystemService(String name) { if (Context.TELEPHONY_SERVICE.equals(name)) return mTelephonyManager; + if (Context.TETHERING_SERVICE.equals(name)) return mTetheringManager; return mBaseContext.getSystemService(name); } @@ -279,11 +283,18 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { mSession = mService.openSession(); assertNotNull("openSession() failed", mSession); - // catch INetworkManagementEventObserver during systemReady() + // Catch INetworkManagementEventObserver during systemReady(). ArgumentCaptor networkObserver = ArgumentCaptor.forClass(INetworkManagementEventObserver.class); verify(mNetManager).registerObserver(networkObserver.capture()); mNetworkObserver = networkObserver.getValue(); + + // Catch TetheringEventCallback during systemReady(). + ArgumentCaptor tetheringEventCbCaptor = + ArgumentCaptor.forClass(TetheringManager.TetheringEventCallback.class); + verify(mTetheringManager).registerTetheringEventCallback( + any(), tetheringEventCbCaptor.capture()); + mTetheringEventCallback = tetheringEventCbCaptor.getValue(); } @NonNull @@ -1649,6 +1660,21 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { DEFAULT_NETWORK_ALL, 0L, 0L, 0L, 0L, 2); } + @Test + public void testTetheringEventCallback_onUpstreamChanged() throws Exception { + // Register custom provider and retrieve callback. + final TestableNetworkStatsProviderBinder provider = + new TestableNetworkStatsProviderBinder(); + final INetworkStatsProviderCallback cb = + mService.registerNetworkStatsProvider("TEST-TETHERING-OFFLOAD", provider); + assertNotNull(cb); + provider.assertNoCallback(); + + // Post upstream changed event, verify the service will pull for stats. + mTetheringEventCallback.onUpstreamChanged(WIFI_NETWORK); + provider.expectOnRequestStatsUpdate(0 /* unused */); + } + private static File getBaseDir(File statsDir) { File baseDir = new File(statsDir, "netstats"); baseDir.mkdirs();