Merge changes Id8776d14,Ifa291c62,I5ea9d200
* changes: Track and persist in stats whether traffic is on the default network. Add the default network to NetworkStats and NetworkStatsCollection. Pass all default networks to NetworkStatsService
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.internal.net;
|
||||
|
||||
import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
|
||||
import static android.net.NetworkStats.METERED_NO;
|
||||
import static android.net.NetworkStats.ROAMING_NO;
|
||||
import static android.net.NetworkStats.SET_ALL;
|
||||
@@ -240,7 +241,8 @@ public class NetworkStatsFactoryTest {
|
||||
|
||||
private static void assertStatsEntry(NetworkStats stats, String iface, int uid, int set,
|
||||
int tag, long rxBytes, long txBytes) {
|
||||
final int i = stats.findIndex(iface, uid, set, tag, METERED_NO, ROAMING_NO);
|
||||
final int i = stats.findIndex(iface, uid, set, tag, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_NO);
|
||||
if (i < 0) {
|
||||
fail(String.format("no NetworkStats for (iface: %s, uid: %d, set: %d, tag: %d)",
|
||||
iface, uid, set, tag));
|
||||
@@ -252,7 +254,8 @@ public class NetworkStatsFactoryTest {
|
||||
|
||||
private static void assertStatsEntry(NetworkStats stats, String iface, int uid, int set,
|
||||
int tag, long rxBytes, long rxPackets, long txBytes, long txPackets) {
|
||||
final int i = stats.findIndex(iface, uid, set, tag, METERED_NO, ROAMING_NO);
|
||||
final int i = stats.findIndex(iface, uid, set, tag, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_NO);
|
||||
if (i < 0) {
|
||||
fail(String.format("no NetworkStats for (iface: %s, uid: %d, set: %d, tag: %d)",
|
||||
iface, uid, set, tag));
|
||||
|
||||
@@ -3501,34 +3501,50 @@ public class ConnectivityServiceTest {
|
||||
@Test
|
||||
public void testStatsIfacesChanged() throws Exception {
|
||||
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
|
||||
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
|
||||
|
||||
Network[] onlyCell = new Network[]{mCellNetworkAgent.getNetwork()};
|
||||
Network[] onlyWifi = new Network[]{mWiFiNetworkAgent.getNetwork()};
|
||||
|
||||
// Simple connection should have updated ifaces
|
||||
mCellNetworkAgent.connect(false);
|
||||
waitForIdle();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
|
||||
reset(mStatsService);
|
||||
|
||||
// Default network switch should update ifaces.
|
||||
mWiFiNetworkAgent.connect(false);
|
||||
waitForIdle();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyWifi);
|
||||
reset(mStatsService);
|
||||
|
||||
// Disconnect should update ifaces.
|
||||
mWiFiNetworkAgent.disconnect();
|
||||
waitForIdle();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
|
||||
reset(mStatsService);
|
||||
|
||||
// Metered change should update ifaces
|
||||
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
|
||||
waitForIdle();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
|
||||
reset(mStatsService);
|
||||
|
||||
mCellNetworkAgent.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
|
||||
waitForIdle();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
|
||||
reset(mStatsService);
|
||||
|
||||
// Captive portal change shouldn't update ifaces
|
||||
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
|
||||
waitForIdle();
|
||||
verify(mStatsService, never()).forceUpdateIfaces();
|
||||
verify(mStatsService, never()).forceUpdateIfaces(onlyCell);
|
||||
reset(mStatsService);
|
||||
|
||||
// Roaming change should update ifaces
|
||||
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING);
|
||||
waitForIdle();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces();
|
||||
verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
|
||||
reset(mStatsService);
|
||||
}
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@ public class NetworkStatsCollectionTest extends AndroidTestCase {
|
||||
final NetworkStats.Entry entry = new NetworkStats.Entry();
|
||||
final NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
TEST_IMSI, null, false, true));
|
||||
TEST_IMSI, null, false, true, true));
|
||||
|
||||
int myUid = Process.myUid();
|
||||
int otherUidInSameUser = Process.myUid() + 1;
|
||||
@@ -447,7 +447,7 @@ public class NetworkStatsCollectionTest extends AndroidTestCase {
|
||||
final NetworkStatsCollection large = new NetworkStatsCollection(HOUR_IN_MILLIS);
|
||||
final NetworkIdentitySet ident = new NetworkIdentitySet();
|
||||
ident.add(new NetworkIdentity(ConnectivityManager.TYPE_MOBILE, -1, TEST_IMSI, null,
|
||||
false, true));
|
||||
false, true, true));
|
||||
large.recordData(ident, UID_ALL, SET_ALL, TAG_NONE, TIME_A, TIME_B,
|
||||
new NetworkStats.Entry(12_730_893_164L, 1, 0, 0, 0));
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ package com.android.server.net;
|
||||
|
||||
import static android.net.ConnectivityManager.TYPE_MOBILE;
|
||||
import static android.net.ConnectivityManager.TYPE_WIFI;
|
||||
import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
|
||||
import static android.net.NetworkStats.DEFAULT_NETWORK_YES;
|
||||
import static android.net.NetworkStats.METERED_NO;
|
||||
import static android.net.NetworkStats.ROAMING_NO;
|
||||
import static android.net.NetworkStats.SET_DEFAULT;
|
||||
@@ -224,6 +226,15 @@ public class NetworkStatsObserversTest {
|
||||
Mockito.verifyZeroInteractions(mockBinder);
|
||||
}
|
||||
|
||||
private NetworkIdentitySet makeTestIdentSet() {
|
||||
NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(
|
||||
TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
IMSI_1, null /* networkId */, false /* roaming */, true /* metered */,
|
||||
true /* defaultNetwork */));
|
||||
return identSet;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateStats_initialSample_doesNotNotify() throws Exception {
|
||||
DataUsageRequest inputRequest = new DataUsageRequest(
|
||||
@@ -235,10 +246,7 @@ public class NetworkStatsObserversTest {
|
||||
assertTrue(Objects.equals(sTemplateImsi1, request.template));
|
||||
assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
|
||||
|
||||
NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(
|
||||
TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
IMSI_1, null /* networkId */, false /* roaming */, true /* metered */));
|
||||
NetworkIdentitySet identSet = makeTestIdentSet();
|
||||
mActiveIfaces.put(TEST_IFACE, identSet);
|
||||
|
||||
// Baseline
|
||||
@@ -263,10 +271,7 @@ public class NetworkStatsObserversTest {
|
||||
assertTrue(Objects.equals(sTemplateImsi1, request.template));
|
||||
assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
|
||||
|
||||
NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(
|
||||
TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
IMSI_1, null /* networkId */, false /* roaming */, true /* metered */));
|
||||
NetworkIdentitySet identSet = makeTestIdentSet();
|
||||
mActiveIfaces.put(TEST_IFACE, identSet);
|
||||
|
||||
// Baseline
|
||||
@@ -298,10 +303,7 @@ public class NetworkStatsObserversTest {
|
||||
assertTrue(Objects.equals(sTemplateImsi1, request.template));
|
||||
assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
|
||||
|
||||
NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(
|
||||
TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
IMSI_1, null /* networkId */, false /* roaming */, true /* metered */));
|
||||
NetworkIdentitySet identSet = makeTestIdentSet();
|
||||
mActiveIfaces.put(TEST_IFACE, identSet);
|
||||
|
||||
// Baseline
|
||||
@@ -334,17 +336,14 @@ public class NetworkStatsObserversTest {
|
||||
assertTrue(Objects.equals(sTemplateImsi1, request.template));
|
||||
assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
|
||||
|
||||
NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(
|
||||
TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
IMSI_1, null /* networkId */, false /* roaming */, true /* metered */));
|
||||
NetworkIdentitySet identSet = makeTestIdentSet();
|
||||
mActiveUidIfaces.put(TEST_IFACE, identSet);
|
||||
|
||||
// Baseline
|
||||
NetworkStats xtSnapshot = null;
|
||||
NetworkStats uidSnapshot = new NetworkStats(TEST_START, 2 /* initialSize */)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
BASE_BYTES, 2L, BASE_BYTES, 2L, 0L);
|
||||
DEFAULT_NETWORK_YES, BASE_BYTES, 2L, BASE_BYTES, 2L, 0L);
|
||||
mStatsObservers.updateStats(
|
||||
xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
|
||||
VPN_INFO, TEST_START);
|
||||
@@ -352,7 +351,8 @@ public class NetworkStatsObserversTest {
|
||||
// Delta
|
||||
uidSnapshot = new NetworkStats(TEST_START + 2 * MINUTE_IN_MILLIS, 2 /* initialSize */)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES, 2L, 0L);
|
||||
DEFAULT_NETWORK_NO, BASE_BYTES + THRESHOLD_BYTES, 2L,
|
||||
BASE_BYTES + THRESHOLD_BYTES, 2L, 0L);
|
||||
mStatsObservers.updateStats(
|
||||
xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
|
||||
VPN_INFO, TEST_START);
|
||||
@@ -371,17 +371,14 @@ public class NetworkStatsObserversTest {
|
||||
assertTrue(Objects.equals(sTemplateImsi1, request.template));
|
||||
assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
|
||||
|
||||
NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(
|
||||
TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
IMSI_1, null /* networkId */, false /* roaming */, true /* metered */));
|
||||
NetworkIdentitySet identSet = makeTestIdentSet();
|
||||
mActiveUidIfaces.put(TEST_IFACE, identSet);
|
||||
|
||||
// Baseline
|
||||
NetworkStats xtSnapshot = null;
|
||||
NetworkStats uidSnapshot = new NetworkStats(TEST_START, 2 /* initialSize */)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
BASE_BYTES, 2L, BASE_BYTES, 2L, 0L);
|
||||
DEFAULT_NETWORK_NO, BASE_BYTES, 2L, BASE_BYTES, 2L, 0L);
|
||||
mStatsObservers.updateStats(
|
||||
xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
|
||||
VPN_INFO, TEST_START);
|
||||
@@ -389,7 +386,8 @@ public class NetworkStatsObserversTest {
|
||||
// Delta
|
||||
uidSnapshot = new NetworkStats(TEST_START + 2 * MINUTE_IN_MILLIS, 2 /* initialSize */)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES, 2L, 0L);
|
||||
DEFAULT_NETWORK_NO, BASE_BYTES + THRESHOLD_BYTES, 2L,
|
||||
BASE_BYTES + THRESHOLD_BYTES, 2L, 0L);
|
||||
mStatsObservers.updateStats(
|
||||
xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
|
||||
VPN_INFO, TEST_START);
|
||||
@@ -407,17 +405,14 @@ public class NetworkStatsObserversTest {
|
||||
assertTrue(Objects.equals(sTemplateImsi1, request.template));
|
||||
assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
|
||||
|
||||
NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(
|
||||
TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
IMSI_1, null /* networkId */, false /* roaming */, true /* metered */));
|
||||
NetworkIdentitySet identSet = makeTestIdentSet();
|
||||
mActiveUidIfaces.put(TEST_IFACE, identSet);
|
||||
|
||||
// Baseline
|
||||
NetworkStats xtSnapshot = null;
|
||||
NetworkStats uidSnapshot = new NetworkStats(TEST_START, 2 /* initialSize */)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
BASE_BYTES, 2L, BASE_BYTES, 2L, 0L);
|
||||
DEFAULT_NETWORK_YES, BASE_BYTES, 2L, BASE_BYTES, 2L, 0L);
|
||||
mStatsObservers.updateStats(
|
||||
xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
|
||||
VPN_INFO, TEST_START);
|
||||
@@ -425,7 +420,8 @@ public class NetworkStatsObserversTest {
|
||||
// Delta
|
||||
uidSnapshot = new NetworkStats(TEST_START + 2 * MINUTE_IN_MILLIS, 2 /* initialSize */)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES, 2L, 0L);
|
||||
DEFAULT_NETWORK_YES, BASE_BYTES + THRESHOLD_BYTES, 2L,
|
||||
BASE_BYTES + THRESHOLD_BYTES, 2L, 0L);
|
||||
mStatsObservers.updateStats(
|
||||
xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
|
||||
VPN_INFO, TEST_START);
|
||||
@@ -444,17 +440,14 @@ public class NetworkStatsObserversTest {
|
||||
assertTrue(Objects.equals(sTemplateImsi1, request.template));
|
||||
assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
|
||||
|
||||
NetworkIdentitySet identSet = new NetworkIdentitySet();
|
||||
identSet.add(new NetworkIdentity(
|
||||
TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||
IMSI_1, null /* networkId */, false /* roaming */, true /* metered */));
|
||||
NetworkIdentitySet identSet = makeTestIdentSet();
|
||||
mActiveUidIfaces.put(TEST_IFACE, identSet);
|
||||
|
||||
// Baseline
|
||||
NetworkStats xtSnapshot = null;
|
||||
NetworkStats uidSnapshot = new NetworkStats(TEST_START, 2 /* initialSize */)
|
||||
.addValues(TEST_IFACE, UID_ANOTHER_USER, SET_DEFAULT, TAG_NONE, METERED_NO,
|
||||
ROAMING_NO, BASE_BYTES, 2L, BASE_BYTES, 2L, 0L);
|
||||
ROAMING_NO, DEFAULT_NETWORK_YES, BASE_BYTES, 2L, BASE_BYTES, 2L, 0L);
|
||||
mStatsObservers.updateStats(
|
||||
xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
|
||||
VPN_INFO, TEST_START);
|
||||
@@ -462,8 +455,8 @@ public class NetworkStatsObserversTest {
|
||||
// Delta
|
||||
uidSnapshot = new NetworkStats(TEST_START + 2 * MINUTE_IN_MILLIS, 2 /* initialSize */)
|
||||
.addValues(TEST_IFACE, UID_ANOTHER_USER, SET_DEFAULT, TAG_NONE, METERED_NO,
|
||||
ROAMING_NO, BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES,
|
||||
2L, 0L);
|
||||
ROAMING_NO, DEFAULT_NETWORK_NO, BASE_BYTES + THRESHOLD_BYTES, 2L,
|
||||
BASE_BYTES + THRESHOLD_BYTES, 2L, 0L);
|
||||
mStatsObservers.updateStats(
|
||||
xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
|
||||
VPN_INFO, TEST_START);
|
||||
|
||||
@@ -21,6 +21,9 @@ import static android.content.Intent.EXTRA_UID;
|
||||
import static android.net.ConnectivityManager.TYPE_MOBILE;
|
||||
import static android.net.ConnectivityManager.TYPE_WIFI;
|
||||
import static android.net.ConnectivityManager.TYPE_WIMAX;
|
||||
import static android.net.NetworkStats.DEFAULT_NETWORK_ALL;
|
||||
import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
|
||||
import static android.net.NetworkStats.DEFAULT_NETWORK_YES;
|
||||
import static android.net.NetworkStats.IFACE_ALL;
|
||||
import static android.net.NetworkStats.METERED_ALL;
|
||||
import static android.net.NetworkStats.METERED_NO;
|
||||
@@ -67,6 +70,7 @@ import android.net.IConnectivityManager;
|
||||
import android.net.INetworkManagementEventObserver;
|
||||
import android.net.INetworkStatsSession;
|
||||
import android.net.LinkProperties;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.NetworkInfo.DetailedState;
|
||||
@@ -136,6 +140,12 @@ public class NetworkStatsServiceTest {
|
||||
private static final int UID_BLUE = 1002;
|
||||
private static final int UID_GREEN = 1003;
|
||||
|
||||
|
||||
private static final Network WIFI_NETWORK = new Network(100);
|
||||
private static final Network MOBILE_NETWORK = new Network(101);
|
||||
private static final Network[] NETWORKS_WIFI = new Network[]{ WIFI_NETWORK };
|
||||
private static final Network[] NETWORKS_MOBILE = new Network[]{ MOBILE_NETWORK };
|
||||
|
||||
private static final long WAIT_TIMEOUT = 2 * 1000; // 2 secs
|
||||
private static final int INVALID_TYPE = -1;
|
||||
|
||||
@@ -231,7 +241,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_WIFI);
|
||||
|
||||
// verify service has empty history for wifi
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
@@ -278,7 +288,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_WIFI);
|
||||
|
||||
// verify service has empty history for wifi
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
@@ -306,10 +316,10 @@ public class NetworkStatsServiceTest {
|
||||
// verify service recorded history
|
||||
assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 1024L, 8L, 512L, 4L, 10);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, METERED_NO, ROAMING_NO, 512L, 4L, 256L,
|
||||
2L, 4);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, METERED_NO, ROAMING_NO, 512L, 4L,
|
||||
256L, 2L, 6);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 512L, 4L, 256L, 2L, 4);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 512L, 4L, 256L, 2L, 6);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 0);
|
||||
|
||||
|
||||
@@ -331,10 +341,10 @@ public class NetworkStatsServiceTest {
|
||||
// after systemReady(), we should have historical stats loaded again
|
||||
assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 1024L, 8L, 512L, 4L, 10);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, METERED_NO, ROAMING_NO, 512L, 4L, 256L,
|
||||
2L, 4);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, METERED_NO, ROAMING_NO, 512L, 4L,
|
||||
256L, 2L, 6);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 512L, 4L, 256L, 2L, 4);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 512L, 4L, 256L, 2L, 6);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 0);
|
||||
|
||||
}
|
||||
@@ -356,7 +366,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_WIFI);
|
||||
|
||||
|
||||
// modify some number on wifi, and trigger poll event
|
||||
@@ -401,7 +411,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_MOBILE);
|
||||
|
||||
|
||||
// create some traffic on first network
|
||||
@@ -439,7 +449,7 @@ public class NetworkStatsServiceTest {
|
||||
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_MOBILE);
|
||||
forcePollAndWaitForIdle();
|
||||
|
||||
|
||||
@@ -481,7 +491,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_WIFI);
|
||||
|
||||
|
||||
// create some traffic
|
||||
@@ -543,7 +553,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_MOBILE);
|
||||
|
||||
|
||||
// create some traffic
|
||||
@@ -573,7 +583,7 @@ public class NetworkStatsServiceTest {
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L));
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_MOBILE);
|
||||
forcePollAndWaitForIdle();
|
||||
|
||||
|
||||
@@ -605,7 +615,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_WIFI);
|
||||
|
||||
|
||||
// create some traffic for two apps
|
||||
@@ -641,12 +651,12 @@ public class NetworkStatsServiceTest {
|
||||
NetworkStats stats = mSession.getSummaryForAllUid(
|
||||
sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true);
|
||||
assertEquals(3, stats.size());
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 50L,
|
||||
5L, 50L, 5L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO, 10L,
|
||||
1L, 10L, 1L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 50L, 5L, 50L, 5L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 10L, 1L, 10L, 1L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_BLUE, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
2048L, 16L, 1024L, 8L, 0);
|
||||
DEFAULT_NETWORK_YES, 2048L, 16L, 1024L, 8L, 0);
|
||||
|
||||
// now verify that recent history only contains one uid
|
||||
final long currentTime = currentTimeMillis();
|
||||
@@ -654,7 +664,7 @@ public class NetworkStatsServiceTest {
|
||||
sTemplateWifi, currentTime - HOUR_IN_MILLIS, currentTime, true);
|
||||
assertEquals(1, stats.size());
|
||||
assertValues(stats, IFACE_ALL, UID_BLUE, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
1024L, 8L, 512L, 4L, 0);
|
||||
DEFAULT_NETWORK_YES, 1024L, 8L, 512L, 4L, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -667,7 +677,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_WIFI);
|
||||
|
||||
|
||||
// create some initial traffic
|
||||
@@ -708,14 +718,14 @@ public class NetworkStatsServiceTest {
|
||||
final NetworkStats stats = mSession.getSummaryForAllUid(
|
||||
sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true);
|
||||
assertEquals(4, stats.size());
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 128L,
|
||||
2L, 128L, 2L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO, 64L,
|
||||
1L, 64L, 1L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 128L, 2L, 128L, 2L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 64L, 1L, 64L, 1L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
32L, 2L, 32L, 2L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, 0xFAAD, METERED_NO, ROAMING_NO, 1L,
|
||||
1L, 1L, 1L, 1);
|
||||
DEFAULT_NETWORK_YES, 32L, 2L, 32L, 2L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, 0xFAAD, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 1L, 1L, 1L, 1L, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -728,7 +738,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_WIFI);
|
||||
|
||||
|
||||
// create some initial traffic
|
||||
@@ -736,14 +746,14 @@ public class NetworkStatsServiceTest {
|
||||
expectCurrentTime();
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(buildEmptyStats());
|
||||
// Note that all traffic from NetworkManagementService is tagged as METERED_NO and
|
||||
// ROAMING_NO, because metered and roaming isn't tracked at that layer. We layer it
|
||||
// on top by inspecting the iface properties.
|
||||
// Note that all traffic from NetworkManagementService is tagged as METERED_NO, ROAMING_NO
|
||||
// and DEFAULT_NETWORK_YES, because these three properties aren't tracked at that layer.
|
||||
// We layer them on top by inspecting the iface properties.
|
||||
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 128L,
|
||||
2L, 128L, 2L, 0L)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO, 64L,
|
||||
1L, 64L, 1L, 0L));
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 128L, 2L, 128L, 2L, 0L)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 64L, 1L, 64L, 1L, 0L));
|
||||
mService.incrementOperationCount(UID_RED, 0xF00D, 1);
|
||||
|
||||
forcePollAndWaitForIdle();
|
||||
@@ -755,9 +765,9 @@ public class NetworkStatsServiceTest {
|
||||
sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true);
|
||||
assertEquals(2, stats.size());
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
|
||||
128L, 2L, 128L, 2L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, METERED_YES, ROAMING_NO, 64L,
|
||||
1L, 64L, 1L, 1);
|
||||
DEFAULT_NETWORK_YES, 128L, 2L, 128L, 2L, 1);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, METERED_YES, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 64L, 1L, 64L, 1L, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -770,7 +780,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_MOBILE);
|
||||
|
||||
|
||||
// Create some traffic
|
||||
@@ -783,9 +793,9 @@ public class NetworkStatsServiceTest {
|
||||
// on top by inspecting the iface properties.
|
||||
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_ALL, ROAMING_NO,
|
||||
128L, 2L, 128L, 2L, 0L)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, METERED_ALL, ROAMING_NO, 64L,
|
||||
1L, 64L, 1L, 0L));
|
||||
DEFAULT_NETWORK_YES, 128L, 2L, 128L, 2L, 0L)
|
||||
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, METERED_ALL, ROAMING_NO,
|
||||
DEFAULT_NETWORK_YES, 64L, 1L, 64L, 1L, 0L));
|
||||
forcePollAndWaitForIdle();
|
||||
|
||||
// verify service recorded history
|
||||
@@ -796,9 +806,9 @@ public class NetworkStatsServiceTest {
|
||||
sTemplateImsi1, Long.MIN_VALUE, Long.MAX_VALUE, true);
|
||||
assertEquals(2, stats.size());
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, METERED_ALL, ROAMING_YES,
|
||||
128L, 2L, 128L, 2L, 0);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, METERED_ALL, ROAMING_YES, 64L,
|
||||
1L, 64L, 1L, 0);
|
||||
DEFAULT_NETWORK_YES, 128L, 2L, 128L, 2L, 0);
|
||||
assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, METERED_ALL, ROAMING_YES,
|
||||
DEFAULT_NETWORK_YES, 64L, 1L, 64L, 1L, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -811,7 +821,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_MOBILE);
|
||||
|
||||
|
||||
// create some tethering traffic
|
||||
@@ -856,7 +866,7 @@ public class NetworkStatsServiceTest {
|
||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||
expectBandwidthControlCheck();
|
||||
|
||||
mService.forceUpdateIfaces();
|
||||
mService.forceUpdateIfaces(NETWORKS_WIFI);
|
||||
|
||||
// verify service has empty history for wifi
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
@@ -977,18 +987,18 @@ public class NetworkStatsServiceTest {
|
||||
// verify summary API
|
||||
final NetworkStats stats = mSession.getSummaryForNetwork(template, start, end);
|
||||
assertValues(stats, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL,
|
||||
rxBytes, rxPackets, txBytes, txPackets, operations);
|
||||
DEFAULT_NETWORK_ALL, rxBytes, rxPackets, txBytes, txPackets, operations);
|
||||
}
|
||||
|
||||
private void assertUidTotal(NetworkTemplate template, int uid, long rxBytes, long rxPackets,
|
||||
long txBytes, long txPackets, int operations) throws Exception {
|
||||
assertUidTotal(template, uid, SET_ALL, METERED_ALL, ROAMING_ALL, rxBytes, rxPackets,
|
||||
txBytes, txPackets, operations);
|
||||
assertUidTotal(template, uid, SET_ALL, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL,
|
||||
rxBytes, rxPackets, txBytes, txPackets, operations);
|
||||
}
|
||||
|
||||
private void assertUidTotal(NetworkTemplate template, int uid, int set, int metered,
|
||||
int roaming, long rxBytes, long rxPackets, long txBytes, long txPackets, int operations)
|
||||
throws Exception {
|
||||
int roaming, int defaultNetwork, long rxBytes, long rxPackets, long txBytes,
|
||||
long txPackets, int operations) throws Exception {
|
||||
// verify history API
|
||||
final NetworkStatsHistory history = mSession.getHistoryForUid(
|
||||
template, uid, set, TAG_NONE, FIELD_ALL);
|
||||
@@ -998,8 +1008,8 @@ public class NetworkStatsServiceTest {
|
||||
// verify summary API
|
||||
final NetworkStats stats = mSession.getSummaryForAllUid(
|
||||
template, Long.MIN_VALUE, Long.MAX_VALUE, false);
|
||||
assertValues(stats, IFACE_ALL, uid, set, TAG_NONE, metered, roaming, rxBytes, rxPackets,
|
||||
txBytes, txPackets, operations);
|
||||
assertValues(stats, IFACE_ALL, uid, set, TAG_NONE, metered, roaming, defaultNetwork,
|
||||
rxBytes, rxPackets, txBytes, txPackets, operations);
|
||||
}
|
||||
|
||||
private void expectSystemReady() throws Exception {
|
||||
@@ -1097,8 +1107,8 @@ public class NetworkStatsServiceTest {
|
||||
}
|
||||
|
||||
private static void assertValues(NetworkStats stats, String iface, int uid, int set,
|
||||
int tag, int metered, int roaming, long rxBytes, long rxPackets, long txBytes,
|
||||
long txPackets, int operations) {
|
||||
int tag, int metered, int roaming, int defaultNetwork, long rxBytes, long rxPackets,
|
||||
long txBytes, long txPackets, int operations) {
|
||||
final NetworkStats.Entry entry = new NetworkStats.Entry();
|
||||
final int[] sets;
|
||||
if (set == SET_ALL) {
|
||||
@@ -1121,12 +1131,22 @@ public class NetworkStatsServiceTest {
|
||||
meterings = new int[] { metered };
|
||||
}
|
||||
|
||||
final int[] defaultNetworks;
|
||||
if (defaultNetwork == DEFAULT_NETWORK_ALL) {
|
||||
defaultNetworks = new int[] { DEFAULT_NETWORK_ALL, DEFAULT_NETWORK_YES,
|
||||
DEFAULT_NETWORK_NO };
|
||||
} else {
|
||||
defaultNetworks = new int[] { defaultNetwork };
|
||||
}
|
||||
|
||||
for (int s : sets) {
|
||||
for (int r : roamings) {
|
||||
for (int m : meterings) {
|
||||
final int i = stats.findIndex(iface, uid, s, tag, m, r);
|
||||
if (i != -1) {
|
||||
entry.add(stats.getValues(i, null));
|
||||
for (int d : defaultNetworks) {
|
||||
final int i = stats.findIndex(iface, uid, s, tag, m, r, d);
|
||||
if (i != -1) {
|
||||
entry.add(stats.getValues(i, null));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1161,7 +1181,7 @@ public class NetworkStatsServiceTest {
|
||||
final NetworkCapabilities capabilities = new NetworkCapabilities();
|
||||
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, !isMetered);
|
||||
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, true);
|
||||
return new NetworkState(info, prop, capabilities, null, null, TEST_SSID);
|
||||
return new NetworkState(info, prop, capabilities, WIFI_NETWORK, null, TEST_SSID);
|
||||
}
|
||||
|
||||
private static NetworkState buildMobile3gState(String subscriberId) {
|
||||
@@ -1178,7 +1198,7 @@ public class NetworkStatsServiceTest {
|
||||
final NetworkCapabilities capabilities = new NetworkCapabilities();
|
||||
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, false);
|
||||
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !isRoaming);
|
||||
return new NetworkState(info, prop, capabilities, null, subscriberId, null);
|
||||
return new NetworkState(info, prop, capabilities, MOBILE_NETWORK, subscriberId, null);
|
||||
}
|
||||
|
||||
private static NetworkState buildMobile4gState(String iface) {
|
||||
@@ -1189,7 +1209,7 @@ public class NetworkStatsServiceTest {
|
||||
final NetworkCapabilities capabilities = new NetworkCapabilities();
|
||||
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, false);
|
||||
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, true);
|
||||
return new NetworkState(info, prop, capabilities, null, null, null);
|
||||
return new NetworkState(info, prop, capabilities, MOBILE_NETWORK, null, null);
|
||||
}
|
||||
|
||||
private NetworkStats buildEmptyStats() {
|
||||
|
||||
Reference in New Issue
Block a user