[SP18.4] Add unit test for polling network stats in OffloadController am: 14722baf0d
Change-Id: I03775f4efff78e5afc365493408611a863322027
This commit is contained in:
@@ -77,7 +77,8 @@ public class OffloadController {
|
|||||||
private static final boolean DBG = false;
|
private static final boolean DBG = false;
|
||||||
private static final String ANYIP = "0.0.0.0";
|
private static final String ANYIP = "0.0.0.0";
|
||||||
private static final ForwardedStats EMPTY_STATS = new ForwardedStats();
|
private static final ForwardedStats EMPTY_STATS = new ForwardedStats();
|
||||||
private static final int DEFAULT_PERFORM_POLL_INTERVAL_MS = 5000;
|
@VisibleForTesting
|
||||||
|
static final int DEFAULT_PERFORM_POLL_INTERVAL_MS = 5000;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
enum StatsType {
|
enum StatsType {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import static android.net.NetworkStats.UID_TETHERING;
|
|||||||
import static android.net.RouteInfo.RTN_UNICAST;
|
import static android.net.RouteInfo.RTN_UNICAST;
|
||||||
import static android.provider.Settings.Global.TETHER_OFFLOAD_DISABLED;
|
import static android.provider.Settings.Global.TETHER_OFFLOAD_DISABLED;
|
||||||
|
|
||||||
|
import static com.android.networkstack.tethering.OffloadController.DEFAULT_PERFORM_POLL_INTERVAL_MS;
|
||||||
import static com.android.networkstack.tethering.OffloadController.StatsType.STATS_PER_IFACE;
|
import static com.android.networkstack.tethering.OffloadController.StatsType.STATS_PER_IFACE;
|
||||||
import static com.android.networkstack.tethering.OffloadController.StatsType.STATS_PER_UID;
|
import static com.android.networkstack.tethering.OffloadController.StatsType.STATS_PER_UID;
|
||||||
import static com.android.networkstack.tethering.OffloadHardwareInterface.ForwardedStats;
|
import static com.android.networkstack.tethering.OffloadHardwareInterface.ForwardedStats;
|
||||||
@@ -45,6 +46,7 @@ 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;
|
||||||
@@ -61,6 +63,7 @@ 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.NetworkStatsProvider;
|
||||||
import android.net.util.SharedLog;
|
import android.net.util.SharedLog;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.test.TestLooper;
|
import android.os.test.TestLooper;
|
||||||
@@ -118,7 +121,7 @@ public class OffloadControllerTest {
|
|||||||
private OffloadController.Dependencies mDeps = new OffloadController.Dependencies() {
|
private OffloadController.Dependencies mDeps = new OffloadController.Dependencies() {
|
||||||
@Override
|
@Override
|
||||||
int getPerformPollInterval() {
|
int getPerformPollInterval() {
|
||||||
return 0;
|
return -1; // Disabled.
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -149,6 +152,15 @@ public class OffloadControllerTest {
|
|||||||
Settings.Global.putInt(mContentResolver, TETHER_OFFLOAD_DISABLED, 0);
|
Settings.Global.putInt(mContentResolver, TETHER_OFFLOAD_DISABLED, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setOffloadPollInterval(int interval) {
|
||||||
|
mDeps = new OffloadController.Dependencies() {
|
||||||
|
@Override
|
||||||
|
int getPerformPollInterval() {
|
||||||
|
return interval;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void waitForIdle() {
|
private void waitForIdle() {
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
}
|
}
|
||||||
@@ -769,4 +781,50 @@ public class OffloadControllerTest {
|
|||||||
verifyNoMoreInteractions(mHardware);
|
verifyNoMoreInteractions(mHardware);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnSetAlert() throws Exception {
|
||||||
|
setupFunctioningHardwareInterface();
|
||||||
|
enableOffload();
|
||||||
|
setOffloadPollInterval(DEFAULT_PERFORM_POLL_INTERVAL_MS);
|
||||||
|
final OffloadController offload = makeOffloadController();
|
||||||
|
offload.start();
|
||||||
|
|
||||||
|
// Initialize with fake eth upstream.
|
||||||
|
final String ethernetIface = "eth1";
|
||||||
|
InOrder inOrder = inOrder(mHardware);
|
||||||
|
final LinkProperties lp = new LinkProperties();
|
||||||
|
lp.setInterfaceName(ethernetIface);
|
||||||
|
offload.setUpstreamLinkProperties(lp);
|
||||||
|
// Previous upstream was null, so no stats are fetched.
|
||||||
|
inOrder.verify(mHardware, never()).getForwardedStats(any());
|
||||||
|
|
||||||
|
// Verify that set quota to 0 will immediately triggers an callback.
|
||||||
|
mTetherStatsProvider.onSetAlert(0);
|
||||||
|
waitForIdle();
|
||||||
|
mTetherStatsProviderCb.expectNotifyAlertReached();
|
||||||
|
|
||||||
|
// Verify that notifyAlertReached never fired if quota is not yet reached.
|
||||||
|
when(mHardware.getForwardedStats(eq(ethernetIface))).thenReturn(
|
||||||
|
new ForwardedStats(0, 0));
|
||||||
|
mTetherStatsProvider.onSetAlert(100);
|
||||||
|
mTestLooper.moveTimeForward(DEFAULT_PERFORM_POLL_INTERVAL_MS);
|
||||||
|
waitForIdle();
|
||||||
|
mTetherStatsProviderCb.assertNoCallback();
|
||||||
|
|
||||||
|
// Verify that notifyAlertReached fired when quota is reached.
|
||||||
|
when(mHardware.getForwardedStats(eq(ethernetIface))).thenReturn(
|
||||||
|
new ForwardedStats(50, 50));
|
||||||
|
mTestLooper.moveTimeForward(DEFAULT_PERFORM_POLL_INTERVAL_MS);
|
||||||
|
waitForIdle();
|
||||||
|
mTetherStatsProviderCb.expectNotifyAlertReached();
|
||||||
|
|
||||||
|
// Verify that set quota with UNLIMITED won't trigger any callback, and won't fetch
|
||||||
|
// any stats since the polling is stopped.
|
||||||
|
reset(mHardware);
|
||||||
|
mTetherStatsProvider.onSetAlert(NetworkStatsProvider.QUOTA_UNLIMITED);
|
||||||
|
mTestLooper.moveTimeForward(DEFAULT_PERFORM_POLL_INTERVAL_MS);
|
||||||
|
waitForIdle();
|
||||||
|
mTetherStatsProviderCb.assertNoCallback();
|
||||||
|
verify(mHardware, never()).getForwardedStats(any());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user