Fix bit-rotted NetworkStatsServiceTest.
Breakages:
-ag/574873 - Renders testReportXtOverDev obsolete as this is no longer
a supported mode. Test has been removed.
-ag/600223 - Tests were sending a CONNECTIVITY_ACTION bcast to trigger
a call to updateIfaces(), but the listener was removed.
Tests now call forceUpdateIfaces() directly.
-ag/648284 - Calls to get VPN info were not mocked.
Change-Id: I309f2b5d006549104cb1d3cb83e99363dd6dac16
This commit is contained in:
@@ -18,7 +18,6 @@ package com.android.server;
|
||||
|
||||
import static android.content.Intent.ACTION_UID_REMOVED;
|
||||
import static android.content.Intent.EXTRA_UID;
|
||||
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
|
||||
import static android.net.ConnectivityManager.TYPE_MOBILE;
|
||||
import static android.net.ConnectivityManager.TYPE_WIFI;
|
||||
import static android.net.ConnectivityManager.TYPE_WIMAX;
|
||||
@@ -49,6 +48,7 @@ import static org.easymock.EasyMock.expectLastCall;
|
||||
import static org.easymock.EasyMock.isA;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.app.IAlarmListener;
|
||||
import android.app.IAlarmManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Intent;
|
||||
@@ -70,6 +70,7 @@ import android.test.suitebuilder.annotation.LargeTest;
|
||||
import android.test.suitebuilder.annotation.Suppress;
|
||||
import android.util.TrustedTime;
|
||||
|
||||
import com.android.internal.net.VpnInfo;
|
||||
import com.android.server.net.NetworkStatsService;
|
||||
import com.android.server.net.NetworkStatsService.NetworkStatsSettings;
|
||||
import com.android.server.net.NetworkStatsService.NetworkStatsSettings.Config;
|
||||
@@ -83,6 +84,9 @@ import java.io.File;
|
||||
|
||||
/**
|
||||
* Tests for {@link NetworkStatsService}.
|
||||
*
|
||||
* TODO: This test is really brittle, largely due to overly-strict use of Easymock.
|
||||
* Rewrite w/ Mockito.
|
||||
*/
|
||||
@LargeTest
|
||||
public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
@@ -143,7 +147,6 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
|
||||
expectCurrentTime();
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectSystemReady();
|
||||
|
||||
@@ -190,9 +193,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
|
||||
// verify service has empty history for wifi
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
@@ -244,9 +248,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
|
||||
// verify service has empty history for wifi
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
@@ -295,7 +300,6 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
// boot through serviceReady() again
|
||||
expectCurrentTime();
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectSystemReady();
|
||||
|
||||
@@ -335,9 +339,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
verifyAndReset();
|
||||
|
||||
// modify some number on wifi, and trigger poll event
|
||||
@@ -387,9 +392,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
verifyAndReset();
|
||||
|
||||
// create some traffic on first network
|
||||
@@ -429,9 +435,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L)
|
||||
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
verifyAndReset();
|
||||
|
||||
@@ -475,9 +482,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
verifyAndReset();
|
||||
|
||||
// create some traffic
|
||||
@@ -544,9 +552,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
verifyAndReset();
|
||||
|
||||
// create some traffic
|
||||
@@ -578,9 +587,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L));
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
verifyAndReset();
|
||||
|
||||
@@ -615,9 +625,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
verifyAndReset();
|
||||
|
||||
// create some traffic for two apps
|
||||
@@ -681,9 +692,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
verifyAndReset();
|
||||
|
||||
// create some initial traffic
|
||||
@@ -746,9 +758,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
mService.forceUpdateIfaces();
|
||||
verifyAndReset();
|
||||
|
||||
// create some tethering traffic
|
||||
@@ -778,65 +791,6 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
|
||||
}
|
||||
|
||||
public void testReportXtOverDev() throws Exception {
|
||||
// bring mobile network online
|
||||
expectCurrentTime();
|
||||
expectDefaultSettings();
|
||||
expectNetworkState(buildMobile3gState(IMSI_1));
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
verifyAndReset();
|
||||
|
||||
// create some traffic, but only for DEV, and across 1.5 buckets
|
||||
incrementCurrentTime(90 * MINUTE_IN_MILLIS);
|
||||
expectCurrentTime();
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummaryDev(new NetworkStats(getElapsedRealtime(), 1)
|
||||
.addIfaceValues(TEST_IFACE, 6000L, 60L, 3000L, 30L));
|
||||
expectNetworkStatsSummaryXt(buildEmptyStats());
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history:
|
||||
// 4000(dev) + 2000(dev)
|
||||
assertNetworkTotal(sTemplateImsi1, 6000L, 60L, 3000L, 30L, 0);
|
||||
verifyAndReset();
|
||||
|
||||
// create traffic on both DEV and XT, across two buckets
|
||||
incrementCurrentTime(2 * HOUR_IN_MILLIS);
|
||||
expectCurrentTime();
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummaryDev(new NetworkStats(getElapsedRealtime(), 1)
|
||||
.addIfaceValues(TEST_IFACE, 6004L, 64L, 3004L, 34L));
|
||||
expectNetworkStatsSummaryXt(new NetworkStats(getElapsedRealtime(), 1)
|
||||
.addIfaceValues(TEST_IFACE, 10240L, 0L, 0L, 0L));
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectNetworkStatsPoll();
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify that we switching reporting at the first atomic XT bucket,
|
||||
// which should give us:
|
||||
// 4000(dev) + 2000(dev) + 1(dev) + 5120(xt) + 2560(xt)
|
||||
assertNetworkTotal(sTemplateImsi1, 13681L, 61L, 3001L, 31L, 0);
|
||||
|
||||
// also test pure-DEV and pure-XT ranges
|
||||
assertNetworkTotal(sTemplateImsi1, startTimeMillis(),
|
||||
startTimeMillis() + 2 * HOUR_IN_MILLIS, 6001L, 61L, 3001L, 31L, 0);
|
||||
assertNetworkTotal(sTemplateImsi1, startTimeMillis() + 2 * HOUR_IN_MILLIS,
|
||||
startTimeMillis() + 4 * HOUR_IN_MILLIS, 7680L, 0L, 0L, 0L, 0);
|
||||
|
||||
verifyAndReset();
|
||||
}
|
||||
|
||||
private void assertNetworkTotal(NetworkTemplate template, long rxBytes, long rxPackets,
|
||||
long txBytes, long txPackets, int operations) throws Exception {
|
||||
assertNetworkTotal(template, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, rxPackets, txBytes,
|
||||
@@ -876,19 +830,21 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
}
|
||||
|
||||
private void expectSystemReady() throws Exception {
|
||||
mAlarmManager.remove(isA(PendingIntent.class), null);
|
||||
mAlarmManager.remove(isA(PendingIntent.class), EasyMock.<IAlarmListener>isNull());
|
||||
expectLastCall().anyTimes();
|
||||
|
||||
mAlarmManager.set(getContext().getPackageName(),
|
||||
mAlarmManager.set(eq(getContext().getPackageName()),
|
||||
eq(AlarmManager.ELAPSED_REALTIME), anyLong(), anyLong(), anyLong(),
|
||||
anyInt(), isA(PendingIntent.class), null, null, isA(WorkSource.class),
|
||||
isA(AlarmManager.AlarmClockInfo.class));
|
||||
expectLastCall().atLeastOnce();
|
||||
anyInt(), isA(PendingIntent.class), EasyMock.<IAlarmListener>isNull(),
|
||||
EasyMock.<String>isNull(), EasyMock.<WorkSource>isNull(),
|
||||
EasyMock.<AlarmManager.AlarmClockInfo>isNull());
|
||||
expectLastCall().anyTimes();
|
||||
|
||||
mNetManager.setGlobalAlert(anyLong());
|
||||
expectLastCall().atLeastOnce();
|
||||
|
||||
expect(mNetManager.isBandwidthControlEnabled()).andReturn(true).atLeastOnce();
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
}
|
||||
|
||||
private void expectNetworkState(NetworkState... state) throws Exception {
|
||||
@@ -899,6 +855,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
}
|
||||
|
||||
private void expectNetworkStatsSummary(NetworkStats summary) throws Exception {
|
||||
expect(mConnManager.getAllVpnInfo()).andReturn(new VpnInfo[0]).atLeastOnce();
|
||||
|
||||
expectNetworkStatsSummaryDev(summary);
|
||||
expectNetworkStatsSummaryXt(summary);
|
||||
}
|
||||
@@ -961,6 +919,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectLastCall().anyTimes();
|
||||
}
|
||||
|
||||
private void expectBandwidthControlCheck() throws Exception {
|
||||
expect(mNetManager.isBandwidthControlEnabled()).andReturn(true).atLeastOnce();
|
||||
}
|
||||
|
||||
private void assertStatsFilesExist(boolean exist) {
|
||||
final File basePath = new File(mStatsDir, "netstats");
|
||||
if (exist) {
|
||||
|
||||
Reference in New Issue
Block a user