NetworkStatsServiceTest.java revision 241dde2306202e7655fdf41d5381f2874e47e108
13f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey/* 23f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 33f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * 43f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 53f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * you may not use this file except in compliance with the License. 63f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * You may obtain a copy of the License at 73f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * 83f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 93f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * 103f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 113f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 123f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * See the License for the specific language governing permissions and 143f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * limitations under the License. 153f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey */ 163f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 173f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeypackage com.android.server; 183f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 19b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkeyimport static android.content.Intent.ACTION_UID_REMOVED; 20b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkeyimport static android.content.Intent.EXTRA_UID; 21961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkeyimport static android.net.ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE; 22b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkeyimport static android.net.ConnectivityManager.TYPE_MOBILE; 233f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static android.net.ConnectivityManager.TYPE_WIFI; 24d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkeyimport static android.net.ConnectivityManager.TYPE_WIMAX; 25d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkeyimport static android.net.NetworkStats.IFACE_ALL; 26b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkeyimport static android.net.NetworkStats.SET_ALL; 27b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkeyimport static android.net.NetworkStats.SET_DEFAULT; 28b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkeyimport static android.net.NetworkStats.SET_FOREGROUND; 291b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.net.NetworkStats.TAG_NONE; 303f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static android.net.NetworkStats.UID_ALL; 3163d27a9233fed934340231f438493746084a681dJeff Sharkeyimport static android.net.NetworkStatsHistory.FIELD_ALL; 324e814c348ce205fcc1a273427f95ef1d100ed60cJeff Sharkeyimport static android.net.NetworkTemplate.buildTemplateMobileAll; 334e814c348ce205fcc1a273427f95ef1d100ed60cJeff Sharkeyimport static android.net.NetworkTemplate.buildTemplateWifi; 34241dde2306202e7655fdf41d5381f2874e47e108Jeff Sharkeyimport static android.net.TrafficStats.MB_IN_BYTES; 35b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkeyimport static android.net.TrafficStats.UID_REMOVED; 36905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkeyimport static android.net.TrafficStats.UID_TETHERING; 373f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static android.text.format.DateUtils.DAY_IN_MILLIS; 383f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static android.text.format.DateUtils.HOUR_IN_MILLIS; 3939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkeyimport static android.text.format.DateUtils.MINUTE_IN_MILLIS; 4039ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkeyimport static android.text.format.DateUtils.WEEK_IN_MILLIS; 413f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static com.android.server.net.NetworkStatsService.ACTION_NETWORK_STATS_POLL; 423f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static org.easymock.EasyMock.anyLong; 4363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport static org.easymock.EasyMock.aryEq; 448e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkeyimport static org.easymock.EasyMock.capture; 453f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static org.easymock.EasyMock.createMock; 463f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static org.easymock.EasyMock.eq; 473f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static org.easymock.EasyMock.expect; 483f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static org.easymock.EasyMock.expectLastCall; 493f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport static org.easymock.EasyMock.isA; 503f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 513f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.app.AlarmManager; 523f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.app.IAlarmManager; 533f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.app.PendingIntent; 543f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.content.Intent; 553f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.net.IConnectivityManager; 568e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkeyimport android.net.INetworkManagementEventObserver; 573f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.net.LinkProperties; 583f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.net.NetworkInfo; 593f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.net.NetworkInfo.DetailedState; 603f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.net.NetworkState; 613f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.net.NetworkStats; 623f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.net.NetworkStatsHistory; 631b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport android.net.NetworkTemplate; 643f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.os.INetworkManagementService; 65b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkeyimport android.telephony.TelephonyManager; 663f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.test.AndroidTestCase; 673f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.test.suitebuilder.annotation.LargeTest; 6863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport android.test.suitebuilder.annotation.Suppress; 693f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport android.util.TrustedTime; 703f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 713f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport com.android.server.net.NetworkStatsService; 7239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkeyimport com.android.server.net.NetworkStatsService.NetworkStatsSettings; 7363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport com.android.server.net.NetworkStatsService.NetworkStatsSettings.Config; 743f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 758e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkeyimport org.easymock.Capture; 763f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport org.easymock.EasyMock; 773f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 783f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeyimport java.io.File; 79b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 80b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkeyimport libcore.io.IoUtils; 813f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 823f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey/** 833f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey * Tests for {@link NetworkStatsService}. 843f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey */ 853f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey@LargeTest 863f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkeypublic class NetworkStatsServiceTest extends AndroidTestCase { 873f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private static final String TAG = "NetworkStatsServiceTest"; 883f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 893f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private static final String TEST_IFACE = "test0"; 90163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey private static final String TEST_IFACE2 = "test1"; 913f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private static final long TEST_START = 1194220800000L; 923f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 93b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey private static final String IMSI_1 = "310004"; 94b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey private static final String IMSI_2 = "310260"; 95b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 964e814c348ce205fcc1a273427f95ef1d100ed60cJeff Sharkey private static NetworkTemplate sTemplateWifi = buildTemplateWifi(); 974e814c348ce205fcc1a273427f95ef1d100ed60cJeff Sharkey private static NetworkTemplate sTemplateImsi1 = buildTemplateMobileAll(IMSI_1); 984e814c348ce205fcc1a273427f95ef1d100ed60cJeff Sharkey private static NetworkTemplate sTemplateImsi2 = buildTemplateMobileAll(IMSI_2); 991b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 100d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey private static final int UID_RED = 1001; 101d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey private static final int UID_BLUE = 1002; 102d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey private static final int UID_GREEN = 1003; 10339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 104b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private long mElapsedRealtime; 105b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 1063f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private BroadcastInterceptingContext mServiceContext; 1073f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private File mStatsDir; 1083f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1093f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private INetworkManagementService mNetManager; 1103f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private IAlarmManager mAlarmManager; 1113f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private TrustedTime mTime; 11239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey private NetworkStatsSettings mSettings; 1133f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private IConnectivityManager mConnManager; 1143f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1153f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private NetworkStatsService mService; 1168e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey private INetworkManagementEventObserver mNetworkObserver; 1173f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1183f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey @Override 1193f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey public void setUp() throws Exception { 1203f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey super.setUp(); 1213f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1223f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mServiceContext = new BroadcastInterceptingContext(getContext()); 1233f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mStatsDir = getContext().getFilesDir(); 124b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey if (mStatsDir.exists()) { 125b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey IoUtils.deleteContents(mStatsDir); 126b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey } 1273f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1283f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mNetManager = createMock(INetworkManagementService.class); 1293f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mAlarmManager = createMock(IAlarmManager.class); 1303f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mTime = createMock(TrustedTime.class); 13139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey mSettings = createMock(NetworkStatsSettings.class); 1323f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mConnManager = createMock(IConnectivityManager.class); 1333f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1343f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mService = new NetworkStatsService( 13539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey mServiceContext, mNetManager, mAlarmManager, mTime, mStatsDir, mSettings); 1363f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mService.bindConnectivityManager(mConnManager); 1373f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 138b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mElapsedRealtime = 0L; 139b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 140b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 14139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectDefaultSettings(); 142b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 143b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 1448e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectSystemReady(); 1458e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey 1468e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey // catch INetworkManagementEventObserver during systemReady() 1478e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey final Capture<INetworkManagementEventObserver> networkObserver = new Capture< 1488e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey INetworkManagementEventObserver>(); 1498e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey mNetManager.registerObserver(capture(networkObserver)); 1508e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectLastCall().atLeastOnce(); 1513f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1523f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey replay(); 1533f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mService.systemReady(); 1543f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey verifyAndReset(); 1553f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1568e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey mNetworkObserver = networkObserver.getValue(); 1578e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey 1583f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 1593f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1603f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey @Override 1613f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey public void tearDown() throws Exception { 1623f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey for (File file : mStatsDir.listFiles()) { 1633f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey file.delete(); 1643f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 1653f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1663f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mServiceContext = null; 1673f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mStatsDir = null; 1683f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1693f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mNetManager = null; 1703f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mAlarmManager = null; 1713f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mTime = null; 172b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey mSettings = null; 173b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey mConnManager = null; 1743f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1753f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mService = null; 1763f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1773f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey super.tearDown(); 1783f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 1793f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 180b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey public void testNetworkStatsWifi() throws Exception { 1813f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // pretend that wifi network comes online; service should ask about full 1823f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // network state, and poll any existing interfaces before updating. 183b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 18439ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectDefaultSettings(); 18539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectNetworkState(buildWifiState()); 186b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 187b3d5957604f8fcaafe72bd76052bc76b682bf443Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 188905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 1893f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1903f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey replay(); 191961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 1923f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1933f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // verify service has empty history for wifi 194a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0); 19539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 1963f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 1973f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // modify some number on wifi, and trigger poll event 198b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 199b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 20039ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectDefaultSettings(); 201b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 202b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addIfaceValues(TEST_IFACE, 1024L, 1L, 2048L, 2L)); 203b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 2048e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 2053f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2063f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey replay(); 2073f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 2083f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2093f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // verify service recorded history 210a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 1024L, 1L, 2048L, 2L, 0); 21139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 2123f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2133f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // and bump forward again, with counters going higher. this is 2143f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // important, since polling should correctly subtract last snapshot. 215b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(DAY_IN_MILLIS); 216b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 21739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectDefaultSettings(); 218b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 219b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addIfaceValues(TEST_IFACE, 4096L, 4L, 8192L, 8L)); 220b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 2218e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 2223f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2233f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey replay(); 2243f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 2253f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2263f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // verify service recorded history 227a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 4096L, 4L, 8192L, 8L, 0); 22839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 22939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 2303f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 2313f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 23239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey public void testStatsRebootPersist() throws Exception { 23339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey assertStatsFilesExist(false); 2343f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2353f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // pretend that wifi network comes online; service should ask about full 2363f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // network state, and poll any existing interfaces before updating. 237b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 23839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectDefaultSettings(); 23939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectNetworkState(buildWifiState()); 240b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 241b3d5957604f8fcaafe72bd76052bc76b682bf443Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 242905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 2433f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2443f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey replay(); 245961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 2463f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2473f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // verify service has empty history for wifi 248a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0); 24939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 2503f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2513f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // modify some number on wifi, and trigger poll event 252b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 253b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 25439ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectDefaultSettings(); 255b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 256b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addIfaceValues(TEST_IFACE, 1024L, 8L, 2048L, 16L)); 257b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 2) 258b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 0L) 259b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 256L, 2L, 128L, 1L, 0L) 260b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, TAG_NONE, 512L, 4L, 256L, 2L, 0L) 261b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, 0xFAAD, 256L, 2L, 128L, 1L, 0L) 262b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 0L)); 2638e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 264b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 265b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.setUidForeground(UID_RED, false); 266b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xFAAD, 4); 267b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.setUidForeground(UID_RED, true); 268b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xFAAD, 6); 269a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 2703f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey replay(); 2713f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 2723f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2733f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // verify service recorded history 274a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0); 275b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, 1024L, 8L, 512L, 4L, 10); 276b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, 512L, 4L, 256L, 2L, 4); 277b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, 512L, 4L, 256L, 2L, 6); 278b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 0); 27939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 2803f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2813f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // graceful shutdown system, which should trigger persist of stats, and 2823f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // clear any values in memory. 28334c73acf88c8190b8cd51d8b8f2b9c22aa7f7941Jeff Sharkey expectCurrentTime(); 28434c73acf88c8190b8cd51d8b8f2b9c22aa7f7941Jeff Sharkey expectDefaultSettings(); 28534c73acf88c8190b8cd51d8b8f2b9c22aa7f7941Jeff Sharkey replay(); 2863f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SHUTDOWN)); 28734c73acf88c8190b8cd51d8b8f2b9c22aa7f7941Jeff Sharkey verifyAndReset(); 2883f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 28939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey assertStatsFilesExist(true); 2903f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 2913f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // boot through serviceReady() again 292b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 29339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectDefaultSettings(); 294b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 295b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 2968e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectSystemReady(); 2978e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey 2988e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey // catch INetworkManagementEventObserver during systemReady() 2998e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey final Capture<INetworkManagementEventObserver> networkObserver = new Capture< 3008e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey INetworkManagementEventObserver>(); 3018e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey mNetManager.registerObserver(capture(networkObserver)); 3028e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectLastCall().atLeastOnce(); 3033f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 3043f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey replay(); 3053f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mService.systemReady(); 3068e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey 3078e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey mNetworkObserver = networkObserver.getValue(); 3083f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 3093f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey // after systemReady(), we should have historical stats loaded again 310a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0); 311b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, 1024L, 8L, 512L, 4L, 10); 312b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, 512L, 4L, 256L, 2L, 4); 313b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, 512L, 4L, 256L, 2L, 6); 314b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 0); 31539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 31639ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 31739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 31839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 31963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // TODO: simulate reboot to test bucket resize 32063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey @Suppress 32139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey public void testStatsBucketResize() throws Exception { 32239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey NetworkStatsHistory history = null; 32339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 32439ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey assertStatsFilesExist(false); 32539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 32639ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey // pretend that wifi network comes online; service should ask about full 32739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey // network state, and poll any existing interfaces before updating. 328b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 32939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); 33039ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectNetworkState(buildWifiState()); 331b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 332b3d5957604f8fcaafe72bd76052bc76b682bf443Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 333905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 33439ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 33539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey replay(); 336961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 33739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 33839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 33939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey // modify some number on wifi, and trigger poll event 340b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(2 * HOUR_IN_MILLIS); 341b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 34239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); 343b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 344b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addIfaceValues(TEST_IFACE, 512L, 4L, 512L, 4L)); 345b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 3468e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 34739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 34839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey replay(); 34939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 35039ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 35139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey // verify service recorded history 35263d27a9233fed934340231f438493746084a681dJeff Sharkey history = mService.getHistoryForNetwork(sTemplateWifi, FIELD_ALL); 353a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, 512L, 4L, 512L, 4L, 0); 354d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(HOUR_IN_MILLIS, history.getBucketDuration()); 355d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(2, history.size()); 35639ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 35739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 35839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey // now change bucket duration setting and trigger another poll with 35939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey // exact same values, which should resize existing buckets. 360b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 36139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectSettings(0L, 30 * MINUTE_IN_MILLIS, WEEK_IN_MILLIS); 362b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 363b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 3648e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 36539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 36639ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey replay(); 36739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 36839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 36939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey // verify identical stats, but spread across 4 buckets now 37063d27a9233fed934340231f438493746084a681dJeff Sharkey history = mService.getHistoryForNetwork(sTemplateWifi, FIELD_ALL); 371a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, 512L, 4L, 512L, 4L, 0); 372d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(30 * MINUTE_IN_MILLIS, history.getBucketDuration()); 373d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(4, history.size()); 37439ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey verifyAndReset(); 3753f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 3763f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 3773f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 378b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey public void testUidStatsAcrossNetworks() throws Exception { 379b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // pretend first mobile network comes online 380b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 381b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectDefaultSettings(); 382b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectNetworkState(buildMobile3gState(IMSI_1)); 383b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 384b3d5957604f8fcaafe72bd76052bc76b682bf443Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 385905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 386b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 387b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey replay(); 388961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 389b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey verifyAndReset(); 390b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 391b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // create some traffic on first network 392b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 393b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 394b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectDefaultSettings(); 395b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 396b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L)); 397b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3) 398b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1536L, 12L, 512L, 4L, 0L) 399b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L) 400b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L)); 4018e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 402b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 403a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xF00D, 10); 404a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 405b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey replay(); 406b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 407b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 408b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // verify service recorded history 409a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0); 410a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0); 411b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 10); 412b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 0); 413b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey verifyAndReset(); 414b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 415b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // now switch networks; this also tests that we're okay with interfaces 416b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // disappearing, to verify we don't count backwards. 417b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 418b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 419b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectDefaultSettings(); 420b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectNetworkState(buildMobile3gState(IMSI_2)); 421163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 422163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L)); 423163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3) 424163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1536L, 12L, 512L, 4L, 0L) 425163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L) 426163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L)); 4278e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 428b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 429b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey replay(); 430961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 431b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 432b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey verifyAndReset(); 433b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 434b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // create traffic on second network 435b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 436b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 437b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectDefaultSettings(); 438b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 439163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addIfaceValues(TEST_IFACE, 2176L, 17L, 1536L, 12L)); 440b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 441163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1536L, 12L, 512L, 4L, 0L) 442163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L) 443163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 640L, 5L, 1024L, 8L, 0L) 444b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, 0xFAAD, 128L, 1L, 1024L, 8L, 0L)); 4458e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 446b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 447b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.incrementOperationCount(UID_BLUE, 0xFAAD, 10); 448a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 449b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey replay(); 450b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 451b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 452b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // verify original history still intact 453a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0); 454b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 10); 455b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 0); 456b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 457b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // and verify new history also recorded under different template, which 458b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // verifies that we didn't cross the streams. 459a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateImsi2, 128L, 1L, 1024L, 8L, 0); 460a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0); 461a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertUidTotal(sTemplateImsi2, UID_BLUE, 128L, 1L, 1024L, 8L, 10); 462b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey verifyAndReset(); 463b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 464b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey } 465b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 466b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey public void testUidRemovedIsMoved() throws Exception { 467b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // pretend that network comes online 468b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 469b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectDefaultSettings(); 470b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectNetworkState(buildWifiState()); 471b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 472b3d5957604f8fcaafe72bd76052bc76b682bf443Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 473905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 474b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 475b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey replay(); 476961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 477b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey verifyAndReset(); 478b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 479b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // create some traffic 480b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 481b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 482b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectDefaultSettings(); 483b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 484b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addIfaceValues(TEST_IFACE, 4128L, 258L, 544L, 34L)); 485b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 486b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 16L, 1L, 16L, 1L, 0L) 487b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 16L, 1L, 16L, 1L, 0L) 488b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 4096L, 258L, 512L, 32L, 0L) 489b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_GREEN, SET_DEFAULT, TAG_NONE, 16L, 1L, 16L, 1L, 0L)); 4908e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 491b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 492b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xFAAD, 10); 493a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 494b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey replay(); 495b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 496b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 497b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // verify service recorded history 498a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 4128L, 258L, 544L, 34L, 0); 499a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, 16L, 1L, 16L, 1L, 10); 500b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_BLUE, 4096L, 258L, 512L, 32L, 0); 501b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 0); 502b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey verifyAndReset(); 503b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 504b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // now pretend two UIDs are uninstalled, which should migrate stats to 505b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // special "removed" bucket. 50634c73acf88c8190b8cd51d8b8f2b9c22aa7f7941Jeff Sharkey expectCurrentTime(); 507b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey expectDefaultSettings(); 508163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 509163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addIfaceValues(TEST_IFACE, 4128L, 258L, 544L, 34L)); 510163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 511163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 16L, 1L, 16L, 1L, 0L) 512163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 16L, 1L, 16L, 1L, 0L) 513163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 4096L, 258L, 512L, 32L, 0L) 514163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_GREEN, SET_DEFAULT, TAG_NONE, 16L, 1L, 16L, 1L, 0L)); 515163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey expectNetworkStatsPoll(); 516163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey 517b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey replay(); 518b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey final Intent intent = new Intent(ACTION_UID_REMOVED); 519d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey intent.putExtra(EXTRA_UID, UID_BLUE); 520b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey mServiceContext.sendBroadcast(intent); 521d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey intent.putExtra(EXTRA_UID, UID_RED); 522b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey mServiceContext.sendBroadcast(intent); 523b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 524b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // existing uid and total should remain unchanged; but removed UID 525b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey // should be gone completely. 526a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertNetworkTotal(sTemplateWifi, 4128L, 258L, 544L, 34L, 0); 527a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, 0L, 0L, 0L, 0L, 0); 528a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertUidTotal(sTemplateWifi, UID_BLUE, 0L, 0L, 0L, 0L, 0); 529b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 0); 530b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_REMOVED, 4112L, 259L, 528L, 33L, 10); 531b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey verifyAndReset(); 532b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 533b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey } 534b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 535d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey public void testUid3g4gCombinedByTemplate() throws Exception { 536d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // pretend that network comes online 537b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 538d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectDefaultSettings(); 539d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectNetworkState(buildMobile3gState(IMSI_1)); 540b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 541b3d5957604f8fcaafe72bd76052bc76b682bf443Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 542905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 543d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 544d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey replay(); 545961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 546d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey verifyAndReset(); 547d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 548d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // create some traffic 549b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 550b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 551d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectDefaultSettings(); 552b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 553b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 554b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L) 555b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L)); 5568e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 557d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 558a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xF00D, 5); 559a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 560d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey replay(); 561d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 562d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 563d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // verify service recorded history 564b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateImsi1, UID_RED, 1024L, 8L, 1024L, 8L, 5); 565d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey verifyAndReset(); 566d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 567d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // now switch over to 4g network 568b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 569b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 570d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectDefaultSettings(); 571163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey expectNetworkState(buildMobile4gState(TEST_IFACE2)); 572b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 573163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 574163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L) 575163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L)); 5768e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 577d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 578d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey replay(); 579961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 580d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 581d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey verifyAndReset(); 582d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 583d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // create traffic on second network 584b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 585b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 586d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectDefaultSettings(); 587b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 588b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 589163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L) 590163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L) 591163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE2, UID_RED, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 0L) 592163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE2, UID_RED, SET_DEFAULT, 0xFAAD, 512L, 4L, 256L, 2L, 0L)); 5938e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 594d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 595b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xFAAD, 5); 596a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 597d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey replay(); 598d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 599d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 600d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // verify that ALL_MOBILE template combines both 601b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 1280L, 10L, 10); 602d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 603d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey verifyAndReset(); 604d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey } 605d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 606d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey public void testSummaryForAllUid() throws Exception { 607d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // pretend that network comes online 608b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 609d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectDefaultSettings(); 610d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectNetworkState(buildWifiState()); 611b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 612b3d5957604f8fcaafe72bd76052bc76b682bf443Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 613905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 614d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 615d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey replay(); 616961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 617d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey verifyAndReset(); 618d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 619d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // create some traffic for two apps 620b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 621b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 622d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectDefaultSettings(); 623b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 624b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 625b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 0L) 626b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 10L, 1L, 10L, 1L, 0L) 627b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 1024L, 8L, 512L, 4L, 0L)); 6288e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 629d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 630a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xF00D, 1); 631a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 632d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey replay(); 633d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 634d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 635d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // verify service recorded history 636b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, 50L, 5L, 50L, 5L, 1); 637b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_BLUE, 1024L, 8L, 512L, 4L, 0); 638d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey verifyAndReset(); 639a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 640d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // now create more traffic in next hour, but only for one app 641b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 642b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 643d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey expectDefaultSettings(); 644b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 645b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 646163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 0L) 647163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 10L, 1L, 10L, 1L, 0L) 648b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 2048L, 16L, 1024L, 8L, 0L)); 6498e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 650a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey 651d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey replay(); 652d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 653d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 654d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // first verify entire history present 655d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey NetworkStats stats = mService.getSummaryForAllUid( 656d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true); 657d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(3, stats.size()); 658b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 1); 659b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, 10L, 1L, 10L, 1L, 1); 660b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertValues(stats, IFACE_ALL, UID_BLUE, SET_DEFAULT, TAG_NONE, 2048L, 16L, 1024L, 8L, 0); 661d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 662d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey // now verify that recent history only contains one uid 663b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey final long currentTime = currentTimeMillis(); 664d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey stats = mService.getSummaryForAllUid( 665d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey sTemplateWifi, currentTime - HOUR_IN_MILLIS, currentTime, true); 666d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(1, stats.size()); 667b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertValues(stats, IFACE_ALL, UID_BLUE, SET_DEFAULT, TAG_NONE, 1024L, 8L, 512L, 4L, 0); 668b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 669b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey verifyAndReset(); 670b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey } 671b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 672b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey public void testForegroundBackground() throws Exception { 673b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey // pretend that network comes online 674b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 675b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectDefaultSettings(); 676b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkState(buildWifiState()); 677b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 678b3d5957604f8fcaafe72bd76052bc76b682bf443Jeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 679905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 680b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 681b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey replay(); 682961e30458319cfd50e1892ba7dd14a1d0ebe4cc7Jeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 683b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey verifyAndReset(); 684b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 685b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey // create some initial traffic 686b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 687b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 688b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectDefaultSettings(); 689b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 690b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 691b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 0L) 692b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 0L)); 6938e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 694b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 695b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xF00D, 1); 696b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 697b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey replay(); 698b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 699b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 700b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey // verify service recorded history 701b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, 128L, 2L, 128L, 2L, 1); 702b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey verifyAndReset(); 703b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 704b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey // now switch to foreground 705b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 706b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectCurrentTime(); 707b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectDefaultSettings(); 708b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 709b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) 710b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 0L) 711b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 0L) 712b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, TAG_NONE, 32L, 2L, 32L, 2L, 0L) 713b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, 0xFAAD, 1L, 1L, 1L, 1L, 0L)); 7148e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectNetworkStatsPoll(); 715b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 716b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.setUidForeground(UID_RED, true); 717b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mService.incrementOperationCount(UID_RED, 0xFAAD, 1); 718b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 719b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey replay(); 720b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 721b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 722b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey // test that we combined correctly 723b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(sTemplateWifi, UID_RED, 160L, 4L, 160L, 4L, 2); 724b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 725b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey // verify entire history present 726b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey final NetworkStats stats = mService.getSummaryForAllUid( 727b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true); 728b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertEquals(4, stats.size()); 729b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 1); 730b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 1); 731b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, TAG_NONE, 32L, 2L, 32L, 2L, 1); 732b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, 0xFAAD, 1L, 1L, 1L, 1L, 1); 733d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 734d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey verifyAndReset(); 735d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey } 736d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 737905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey public void testTethering() throws Exception { 738905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey // pretend first mobile network comes online 739905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectCurrentTime(); 740905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectDefaultSettings(); 741905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkState(buildMobile3gState(IMSI_1)); 742905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsSummary(buildEmptyStats()); 743905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsUidDetail(buildEmptyStats()); 744905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsPoll(); 745905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey 746905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey replay(); 747905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION_IMMEDIATE)); 748905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey verifyAndReset(); 749905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey 750905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey // create some tethering traffic 751905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey incrementCurrentTime(HOUR_IN_MILLIS); 752905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectCurrentTime(); 753905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectDefaultSettings(); 754905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) 755905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey .addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L)); 75663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 75763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final NetworkStats uidStats = new NetworkStats(getElapsedRealtime(), 1) 75863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 0L); 759905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey final String[] tetherIfacePairs = new String[] { TEST_IFACE, "wlan0" }; 76063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final NetworkStats tetherStats = new NetworkStats(getElapsedRealtime(), 1) 76163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey .addValues(TEST_IFACE, UID_TETHERING, SET_DEFAULT, TAG_NONE, 1920L, 14L, 384L, 2L, 0L); 76263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 76363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expectNetworkStatsUidDetail(uidStats, tetherIfacePairs, tetherStats); 76463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expectNetworkStatsPoll(); 765905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey 766905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey replay(); 767905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 768905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey 769905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey // verify service recorded history 770905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0); 771905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey assertUidTotal(sTemplateImsi1, UID_RED, 128L, 2L, 128L, 2L, 0); 772905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey assertUidTotal(sTemplateImsi1, UID_TETHERING, 1920L, 14L, 384L, 2L, 0); 773905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey verifyAndReset(); 774905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey 775905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey } 776905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey 777a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey private void assertNetworkTotal(NetworkTemplate template, long rxBytes, long rxPackets, 778a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey long txBytes, long txPackets, int operations) { 77963d27a9233fed934340231f438493746084a681dJeff Sharkey final NetworkStatsHistory history = mService.getHistoryForNetwork(template, FIELD_ALL); 780a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, rxPackets, txBytes, 781a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey txPackets, operations); 7823f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 7833f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 784a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey private void assertUidTotal(NetworkTemplate template, int uid, long rxBytes, long rxPackets, 785a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey long txBytes, long txPackets, int operations) { 786b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey assertUidTotal(template, uid, SET_ALL, rxBytes, rxPackets, txBytes, txPackets, operations); 787b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey } 788b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 789b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private void assertUidTotal(NetworkTemplate template, int uid, int set, long rxBytes, 790b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey long rxPackets, long txBytes, long txPackets, int operations) { 79163d27a9233fed934340231f438493746084a681dJeff Sharkey final NetworkStatsHistory history = mService.getHistoryForUid( 792b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey template, uid, set, TAG_NONE, FIELD_ALL); 793a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, rxPackets, txBytes, 794a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey txPackets, operations); 79539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 79639ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 7978e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey private void expectSystemReady() throws Exception { 7983f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mAlarmManager.remove(isA(PendingIntent.class)); 7993f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey expectLastCall().anyTimes(); 8003f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 8013f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey mAlarmManager.setInexactRepeating( 8023f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey eq(AlarmManager.ELAPSED_REALTIME), anyLong(), anyLong(), isA(PendingIntent.class)); 8033f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey expectLastCall().atLeastOnce(); 804b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 8058e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey mNetManager.setGlobalAlert(anyLong()); 8068e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectLastCall().atLeastOnce(); 807f60d0afd1ef08a24121d015bb016df05265b6d07Jeff Sharkey 808f60d0afd1ef08a24121d015bb016df05265b6d07Jeff Sharkey expect(mNetManager.isBandwidthControlEnabled()).andReturn(true).atLeastOnce(); 8093f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 8103f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 81139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey private void expectNetworkState(NetworkState... state) throws Exception { 81239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expect(mConnManager.getAllNetworkState()).andReturn(state).atLeastOnce(); 81363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 81463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final LinkProperties linkProp = state.length > 0 ? state[0].linkProperties : null; 81563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expect(mConnManager.getActiveLinkProperties()).andReturn(linkProp).atLeastOnce(); 81639ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 81739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 81839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey private void expectNetworkStatsSummary(NetworkStats summary) throws Exception { 81939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expect(mNetManager.getNetworkStatsSummary()).andReturn(summary).atLeastOnce(); 82039ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 82139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 822a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey private void expectNetworkStatsUidDetail(NetworkStats detail) throws Exception { 82363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expectNetworkStatsUidDetail(detail, new String[0], new NetworkStats(0L, 0)); 82463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 82563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 82663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey private void expectNetworkStatsUidDetail( 82763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey NetworkStats detail, String[] tetherIfacePairs, NetworkStats tetherStats) 82863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey throws Exception { 829a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey expect(mNetManager.getNetworkStatsUidDetail(eq(UID_ALL))).andReturn(detail).atLeastOnce(); 83063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 83163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // also include tethering details, since they are folded into UID 83263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expect(mConnManager.getTetheredIfacePairs()).andReturn(tetherIfacePairs).atLeastOnce(); 83363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expect(mNetManager.getNetworkStatsTethering(aryEq(tetherIfacePairs))) 83463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey .andReturn(tetherStats).atLeastOnce(); 83539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 83639ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 83739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey private void expectDefaultSettings() throws Exception { 83839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); 83939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 84039ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 84163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey private void expectSettings(long persistBytes, long bucketDuration, long deleteAge) 84239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey throws Exception { 84339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expect(mSettings.getPollInterval()).andReturn(HOUR_IN_MILLIS).anyTimes(); 84439ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey expect(mSettings.getTimeCacheMaxAge()).andReturn(DAY_IN_MILLIS).anyTimes(); 84563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expect(mSettings.getGlobalAlertBytes()).andReturn(MB_IN_BYTES).anyTimes(); 84663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expect(mSettings.getSampleEnabled()).andReturn(true).anyTimes(); 84763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 84863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final Config config = new Config(bucketDuration, persistBytes, deleteAge, deleteAge); 84963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expect(mSettings.getDevConfig()).andReturn(config).anyTimes(); 85063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expect(mSettings.getUidConfig()).andReturn(config).anyTimes(); 85163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey expect(mSettings.getUidTagConfig()).andReturn(config).anyTimes(); 85239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 85339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 854b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private void expectCurrentTime() throws Exception { 8553f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey expect(mTime.forceRefresh()).andReturn(false).anyTimes(); 8563f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey expect(mTime.hasCache()).andReturn(true).anyTimes(); 857b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey expect(mTime.currentTimeMillis()).andReturn(currentTimeMillis()).anyTimes(); 8583f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey expect(mTime.getCacheAge()).andReturn(0L).anyTimes(); 8593f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey expect(mTime.getCacheCertainty()).andReturn(0L).anyTimes(); 8603f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 8613f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 8628e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey private void expectNetworkStatsPoll() throws Exception { 8638e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey mNetManager.setGlobalAlert(anyLong()); 8648e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey expectLastCall().anyTimes(); 8658e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey } 8668e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey 86739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey private void assertStatsFilesExist(boolean exist) { 86863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final File basePath = new File(mStatsDir, "netstats"); 86939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey if (exist) { 87063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertTrue(basePath.list().length > 0); 87139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } else { 87263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertTrue(basePath.list().length == 0); 87339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 87439ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 87539ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 876b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private static void assertValues(NetworkStats stats, String iface, int uid, int set, 877b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) { 878b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey final int i = stats.findIndex(iface, uid, set, tag); 879d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey final NetworkStats.Entry entry = stats.getValues(i, null); 880a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes); 881a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets); 882a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals("unexpected txBytes", txBytes, entry.txBytes); 883a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals("unexpected txPackets", txPackets, entry.txPackets); 884a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals("unexpected operations", operations, entry.operations); 885d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey } 886d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 887a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey private static void assertValues(NetworkStatsHistory stats, long start, long end, long rxBytes, 888a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey long rxPackets, long txBytes, long txPackets, int operations) { 889434962e44ea93b1c4d216c55f636a435bf54aa54Jeff Sharkey final NetworkStatsHistory.Entry entry = stats.getValues(start, end, null); 890434962e44ea93b1c4d216c55f636a435bf54aa54Jeff Sharkey assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes); 891a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets); 892434962e44ea93b1c4d216c55f636a435bf54aa54Jeff Sharkey assertEquals("unexpected txBytes", txBytes, entry.txBytes); 893a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals("unexpected txPackets", txPackets, entry.txPackets); 894a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals("unexpected operations", operations, entry.operations); 895434962e44ea93b1c4d216c55f636a435bf54aa54Jeff Sharkey } 896434962e44ea93b1c4d216c55f636a435bf54aa54Jeff Sharkey 89739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey private static NetworkState buildWifiState() { 89839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey final NetworkInfo info = new NetworkInfo(TYPE_WIFI, 0, null, null); 89939ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey info.setDetailedState(DetailedState.CONNECTED, null, null); 90039ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey final LinkProperties prop = new LinkProperties(); 90139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey prop.setInterfaceName(TEST_IFACE); 90239ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey return new NetworkState(info, prop, null); 90339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 90439ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 905b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey private static NetworkState buildMobile3gState(String subscriberId) { 906b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey final NetworkInfo info = new NetworkInfo( 907b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UMTS, null, null); 908b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey info.setDetailedState(DetailedState.CONNECTED, null, null); 909b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey final LinkProperties prop = new LinkProperties(); 910b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey prop.setInterfaceName(TEST_IFACE); 911b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey return new NetworkState(info, prop, null, subscriberId); 912b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey } 913b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey 914163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey private static NetworkState buildMobile4gState(String iface) { 915d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey final NetworkInfo info = new NetworkInfo(TYPE_WIMAX, 0, null, null); 916d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey info.setDetailedState(DetailedState.CONNECTED, null, null); 917d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey final LinkProperties prop = new LinkProperties(); 918163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey prop.setInterfaceName(iface); 919d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey return new NetworkState(info, prop, null); 920d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey } 921d03fd3f004e3ba8aaa1692ee0e92e8ae171d2a04Jeff Sharkey 922b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private NetworkStats buildEmptyStats() { 923b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey return new NetworkStats(getElapsedRealtime(), 0); 924b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey } 925b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 926b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private long getElapsedRealtime() { 927b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey return mElapsedRealtime; 928b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey } 929b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 930b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private long startTimeMillis() { 931b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey return TEST_START; 932b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey } 933b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 934b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private long currentTimeMillis() { 935b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey return startTimeMillis() + mElapsedRealtime; 936b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey } 937b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey 938b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey private void incrementCurrentTime(long duration) { 939b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey mElapsedRealtime += duration; 94039ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey } 94139ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey 9423f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private void replay() { 94339ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey EasyMock.replay(mNetManager, mAlarmManager, mTime, mSettings, mConnManager); 9443f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 9453f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey 9463f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey private void verifyAndReset() { 94739ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey EasyMock.verify(mNetManager, mAlarmManager, mTime, mSettings, mConnManager); 94839ebc2195ed16b9e955dd57f5c95212bb7b934b6Jeff Sharkey EasyMock.reset(mNetManager, mAlarmManager, mTime, mSettings, mConnManager); 9493f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey } 9503f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey} 951