[SP18.3] Adapt TestableNetworkStatsProviderCbBinder am: b7011d2265

Change-Id: I6dc3600a16dd1379e26e6fe2155f71e841c3c90c
This commit is contained in:
junyulai
2020-05-06 02:50:13 +00:00
committed by Automerger Merge Worker

View File

@@ -31,13 +31,12 @@ import static com.android.networkstack.tethering.OffloadController.StatsType.STA
import static com.android.networkstack.tethering.OffloadHardwareInterface.ForwardedStats; import static com.android.networkstack.tethering.OffloadHardwareInterface.ForwardedStats;
import static com.android.testutils.MiscAssertsKt.assertContainsAll; import static com.android.testutils.MiscAssertsKt.assertContainsAll;
import static com.android.testutils.MiscAssertsKt.assertThrows; import static com.android.testutils.MiscAssertsKt.assertThrows;
import static com.android.testutils.NetworkStatsUtilsKt.orderInsensitiveEquals; import static com.android.testutils.NetworkStatsUtilsKt.assertNetworkStatsEquals;
import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.anyObject;
@@ -46,7 +45,6 @@ import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -63,10 +61,9 @@ import android.net.LinkProperties;
import android.net.NetworkStats; import android.net.NetworkStats;
import android.net.NetworkStats.Entry; import android.net.NetworkStats.Entry;
import android.net.RouteInfo; import android.net.RouteInfo;
import android.net.netstats.provider.INetworkStatsProviderCallback;
import android.net.util.SharedLog; import android.net.util.SharedLog;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.test.TestLooper;
import android.provider.Settings; import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException; import android.provider.Settings.SettingNotFoundException;
import android.test.mock.MockContentResolver; import android.test.mock.MockContentResolver;
@@ -75,7 +72,7 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.test.FakeSettingsProvider; import com.android.internal.util.test.FakeSettingsProvider;
import com.android.testutils.HandlerUtilsKt; import com.android.testutils.TestableNetworkStatsProviderCbBinder;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -109,13 +106,15 @@ public class OffloadControllerTest {
@Mock private ApplicationInfo mApplicationInfo; @Mock private ApplicationInfo mApplicationInfo;
@Mock private Context mContext; @Mock private Context mContext;
@Mock private NetworkStatsManager mStatsManager; @Mock private NetworkStatsManager mStatsManager;
@Mock private INetworkStatsProviderCallback mTetherStatsProviderCb; // Late init since methods must be called by the thread that created this object.
private TestableNetworkStatsProviderCbBinder mTetherStatsProviderCb;
private OffloadController.OffloadTetheringStatsProvider mTetherStatsProvider; private OffloadController.OffloadTetheringStatsProvider mTetherStatsProvider;
private final ArgumentCaptor<ArrayList> mStringArrayCaptor = private final ArgumentCaptor<ArrayList> mStringArrayCaptor =
ArgumentCaptor.forClass(ArrayList.class); ArgumentCaptor.forClass(ArrayList.class);
private final ArgumentCaptor<OffloadHardwareInterface.ControlCallback> mControlCallbackCaptor = private final ArgumentCaptor<OffloadHardwareInterface.ControlCallback> mControlCallbackCaptor =
ArgumentCaptor.forClass(OffloadHardwareInterface.ControlCallback.class); ArgumentCaptor.forClass(OffloadHardwareInterface.ControlCallback.class);
private MockContentResolver mContentResolver; private MockContentResolver mContentResolver;
private final TestLooper mTestLooper = new TestLooper();
private OffloadController.Dependencies mDeps = new OffloadController.Dependencies() { private OffloadController.Dependencies mDeps = new OffloadController.Dependencies() {
@Override @Override
int getPerformPollInterval() { int getPerformPollInterval() {
@@ -151,11 +150,11 @@ public class OffloadControllerTest {
} }
private void waitForIdle() { private void waitForIdle() {
HandlerUtilsKt.waitForIdle(new Handler(Looper.getMainLooper()), WAIT_FOR_IDLE_TIMEOUT); mTestLooper.dispatchAll();
} }
private OffloadController makeOffloadController() throws Exception { private OffloadController makeOffloadController() throws Exception {
OffloadController offload = new OffloadController(new Handler(Looper.getMainLooper()), OffloadController offload = new OffloadController(new Handler(mTestLooper.getLooper()),
mHardware, mContentResolver, mStatsManager, new SharedLog("test"), mDeps); mHardware, mContentResolver, mStatsManager, new SharedLog("test"), mDeps);
final ArgumentCaptor<OffloadController.OffloadTetheringStatsProvider> final ArgumentCaptor<OffloadController.OffloadTetheringStatsProvider>
tetherStatsProviderCaptor = tetherStatsProviderCaptor =
@@ -164,6 +163,7 @@ public class OffloadControllerTest {
tetherStatsProviderCaptor.capture()); tetherStatsProviderCaptor.capture());
mTetherStatsProvider = tetherStatsProviderCaptor.getValue(); mTetherStatsProvider = tetherStatsProviderCaptor.getValue();
assertNotNull(mTetherStatsProvider); assertNotNull(mTetherStatsProvider);
mTetherStatsProviderCb = new TestableNetworkStatsProviderCbBinder();
mTetherStatsProvider.setProviderCallbackBinder(mTetherStatsProviderCb); mTetherStatsProvider.setProviderCallbackBinder(mTetherStatsProviderCb);
return offload; return offload;
} }
@@ -459,20 +459,12 @@ public class OffloadControllerTest {
.addEntry(buildTestEntry(STATS_PER_UID, mobileIface, 999, 99999)) .addEntry(buildTestEntry(STATS_PER_UID, mobileIface, 999, 99999))
.addEntry(buildTestEntry(STATS_PER_UID, ethernetIface, 12345, 54321)); .addEntry(buildTestEntry(STATS_PER_UID, ethernetIface, 12345, 54321));
assertTrue(orderInsensitiveEquals(expectedIfaceStats, ifaceStats)); assertNetworkStatsEquals(expectedIfaceStats, ifaceStats);
assertTrue(orderInsensitiveEquals(expectedUidStats, uidStats)); assertNetworkStatsEquals(expectedUidStats, uidStats);
final ArgumentCaptor<NetworkStats> ifaceStatsCaptor = ArgumentCaptor.forClass(
NetworkStats.class);
final ArgumentCaptor<NetworkStats> uidStatsCaptor = ArgumentCaptor.forClass(
NetworkStats.class);
// Force pushing stats update to verify the stats reported. // Force pushing stats update to verify the stats reported.
mTetherStatsProvider.pushTetherStats(); mTetherStatsProvider.pushTetherStats();
verify(mTetherStatsProviderCb, times(1)) mTetherStatsProviderCb.expectNotifyStatsUpdated(expectedIfaceStats, expectedUidStats);
.notifyStatsUpdated(anyInt(), ifaceStatsCaptor.capture(), uidStatsCaptor.capture());
assertTrue(orderInsensitiveEquals(expectedIfaceStats, ifaceStatsCaptor.getValue()));
assertTrue(orderInsensitiveEquals(expectedUidStats, uidStatsCaptor.getValue()));
when(mHardware.getForwardedStats(eq(ethernetIface))).thenReturn( when(mHardware.getForwardedStats(eq(ethernetIface))).thenReturn(
new ForwardedStats(100000, 100000)); new ForwardedStats(100000, 100000));
@@ -498,11 +490,10 @@ public class OffloadControllerTest {
.addEntry(buildTestEntry(STATS_PER_UID, mobileIface, 999, 99999)) .addEntry(buildTestEntry(STATS_PER_UID, mobileIface, 999, 99999))
.addEntry(buildTestEntry(STATS_PER_UID, ethernetIface, 112345, 154321)); .addEntry(buildTestEntry(STATS_PER_UID, ethernetIface, 112345, 154321));
assertTrue(orderInsensitiveEquals(expectedIfaceStatsAccu, ifaceStatsAccu)); assertNetworkStatsEquals(expectedIfaceStatsAccu, ifaceStatsAccu);
assertTrue(orderInsensitiveEquals(expectedUidStatsAccu, uidStatsAccu)); assertNetworkStatsEquals(expectedUidStatsAccu, uidStatsAccu);
// Verify that only diff of stats is reported. // Verify that only diff of stats is reported.
reset(mTetherStatsProviderCb);
mTetherStatsProvider.pushTetherStats(); mTetherStatsProvider.pushTetherStats();
final NetworkStats expectedIfaceStatsDiff = new NetworkStats(0L, 2) final NetworkStats expectedIfaceStatsDiff = new NetworkStats(0L, 2)
.addEntry(buildTestEntry(STATS_PER_IFACE, mobileIface, 0, 0)) .addEntry(buildTestEntry(STATS_PER_IFACE, mobileIface, 0, 0))
@@ -511,10 +502,8 @@ public class OffloadControllerTest {
final NetworkStats expectedUidStatsDiff = new NetworkStats(0L, 2) final NetworkStats expectedUidStatsDiff = new NetworkStats(0L, 2)
.addEntry(buildTestEntry(STATS_PER_UID, mobileIface, 0, 0)) .addEntry(buildTestEntry(STATS_PER_UID, mobileIface, 0, 0))
.addEntry(buildTestEntry(STATS_PER_UID, ethernetIface, 100000, 100000)); .addEntry(buildTestEntry(STATS_PER_UID, ethernetIface, 100000, 100000));
verify(mTetherStatsProviderCb, times(1)) mTetherStatsProviderCb.expectNotifyStatsUpdated(expectedIfaceStatsDiff,
.notifyStatsUpdated(anyInt(), ifaceStatsCaptor.capture(), uidStatsCaptor.capture()); expectedUidStatsDiff);
assertTrue(orderInsensitiveEquals(expectedIfaceStatsDiff, ifaceStatsCaptor.getValue()));
assertTrue(orderInsensitiveEquals(expectedUidStatsDiff, uidStatsCaptor.getValue()));
} }
@Test @Test
@@ -591,7 +580,7 @@ public class OffloadControllerTest {
OffloadHardwareInterface.ControlCallback callback = mControlCallbackCaptor.getValue(); OffloadHardwareInterface.ControlCallback callback = mControlCallbackCaptor.getValue();
callback.onStoppedLimitReached(); callback.onStoppedLimitReached();
verify(mTetherStatsProviderCb, times(1)).notifyStatsUpdated(anyInt(), any(), any()); mTetherStatsProviderCb.expectNotifyStatsUpdated();
} }
@Test @Test
@@ -695,8 +684,8 @@ public class OffloadControllerTest {
verify(mHardware, times(1)).getForwardedStats(eq(RMNET0)); verify(mHardware, times(1)).getForwardedStats(eq(RMNET0));
verify(mHardware, times(1)).getForwardedStats(eq(WLAN0)); verify(mHardware, times(1)).getForwardedStats(eq(WLAN0));
// TODO: verify the exact stats reported. // TODO: verify the exact stats reported.
verify(mTetherStatsProviderCb, times(1)).notifyStatsUpdated(anyInt(), any(), any()); mTetherStatsProviderCb.expectNotifyStatsUpdated();
verifyNoMoreInteractions(mTetherStatsProviderCb); mTetherStatsProviderCb.assertNoCallback();
verifyNoMoreInteractions(mHardware); verifyNoMoreInteractions(mHardware);
} }
@@ -760,8 +749,8 @@ public class OffloadControllerTest {
// Verify forwarded stats behaviour. // Verify forwarded stats behaviour.
verify(mHardware, times(1)).getForwardedStats(eq(RMNET0)); verify(mHardware, times(1)).getForwardedStats(eq(RMNET0));
verify(mHardware, times(1)).getForwardedStats(eq(WLAN0)); verify(mHardware, times(1)).getForwardedStats(eq(WLAN0));
verify(mTetherStatsProviderCb, times(1)).notifyStatsUpdated(anyInt(), any(), any()); mTetherStatsProviderCb.expectNotifyStatsUpdated();
verifyNoMoreInteractions(mTetherStatsProviderCb); mTetherStatsProviderCb.assertNoCallback();
// TODO: verify local prefixes and downstreams are also pushed to the HAL. // TODO: verify local prefixes and downstreams are also pushed to the HAL.
verify(mHardware, times(1)).setLocalPrefixes(mStringArrayCaptor.capture()); verify(mHardware, times(1)).setLocalPrefixes(mStringArrayCaptor.capture());