NetworkStatsServiceTest.java revision 4a97122ebf4d92a3f94402041729d77905e6c0c0
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (C) 2011 The Android Open Source Project 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * you may not use this file except in compliance with the License. 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * You may obtain a copy of the License at 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * See the License for the specific language governing permissions and 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * limitations under the License. 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpackage com.android.server; 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.net.ConnectivityManager.CONNECTIVITY_ACTION; 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.net.ConnectivityManager.TYPE_WIFI; 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.net.NetworkStats.IFACE_ALL; 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.net.NetworkStats.UID_ALL; 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.net.TrafficStats.TEMPLATE_WIFI; 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.text.format.DateUtils.DAY_IN_MILLIS; 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.text.format.DateUtils.HOUR_IN_MILLIS; 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.text.format.DateUtils.MINUTE_IN_MILLIS; 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static android.text.format.DateUtils.WEEK_IN_MILLIS; 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static com.android.server.net.NetworkStatsService.ACTION_NETWORK_STATS_POLL; 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static org.easymock.EasyMock.anyLong; 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static org.easymock.EasyMock.createMock; 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static org.easymock.EasyMock.eq; 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static org.easymock.EasyMock.expect; 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static org.easymock.EasyMock.expectLastCall; 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static org.easymock.EasyMock.isA; 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.app.AlarmManager; 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.app.IAlarmManager; 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.app.PendingIntent; 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.content.Intent; 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.net.IConnectivityManager; 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.net.LinkProperties; 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.net.NetworkInfo; 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.net.NetworkInfo.DetailedState; 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.net.NetworkState; 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.net.NetworkStats; 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.net.NetworkStatsHistory; 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.os.INetworkManagementService; 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.test.AndroidTestCase; 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest; 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.util.TrustedTime; 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport com.android.server.net.NetworkStatsService; 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport com.android.server.net.NetworkStatsService.NetworkStatsSettings; 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport org.easymock.EasyMock; 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport java.io.File; 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/** 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Tests for {@link NetworkStatsService}. 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@LargeTest 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpublic class NetworkStatsServiceTest extends AndroidTestCase { 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private static final String TAG = "NetworkStatsServiceTest"; 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private static final String TEST_IFACE = "test0"; 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private static final long TEST_START = 1194220800000L; 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private static final int TEST_UID_1 = 1001; 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private static final int TEST_UID_2 = 1002; 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private BroadcastInterceptingContext mServiceContext; 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private File mStatsDir; 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private INetworkManagementService mNetManager; 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private IAlarmManager mAlarmManager; 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private TrustedTime mTime; 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private NetworkStatsSettings mSettings; 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private IConnectivityManager mConnManager; 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private NetworkStatsService mService; 82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom @Override 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project public void setUp() throws Exception { 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project super.setUp(); 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mServiceContext = new BroadcastInterceptingContext(getContext()); 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mStatsDir = getContext().getFilesDir(); 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mNetManager = createMock(INetworkManagementService.class); 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mAlarmManager = createMock(IAlarmManager.class); 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mTime = createMock(TrustedTime.class); 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mSettings = createMock(NetworkStatsSettings.class); 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mConnManager = createMock(IConnectivityManager.class); 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mService = new NetworkStatsService( 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mServiceContext, mNetManager, mAlarmManager, mTime, mStatsDir, mSettings); 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mService.bindConnectivityManager(mConnManager); 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project expectDefaultSettings(); 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project expectSystemReady(); 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project replay(); 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mService.systemReady(); 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project verifyAndReset(); 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project @Override 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project public void tearDown() throws Exception { 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (File file : mStatsDir.listFiles()) { 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project file.delete(); 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 114 115 mServiceContext = null; 116 mStatsDir = null; 117 118 mNetManager = null; 119 mAlarmManager = null; 120 mTime = null; 121 122 mService = null; 123 124 super.tearDown(); 125 } 126 127 public void testSummaryStatsWifi() throws Exception { 128 long elapsedRealtime = 0; 129 130 // pretend that wifi network comes online; service should ask about full 131 // network state, and poll any existing interfaces before updating. 132 expectTime(TEST_START + elapsedRealtime); 133 expectDefaultSettings(); 134 expectNetworkState(buildWifiState()); 135 expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); 136 137 replay(); 138 mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION)); 139 140 // verify service has empty history for wifi 141 assertNetworkTotal(TEMPLATE_WIFI, 0L, 0L); 142 verifyAndReset(); 143 144 // modify some number on wifi, and trigger poll event 145 elapsedRealtime += HOUR_IN_MILLIS; 146 expectTime(TEST_START + elapsedRealtime); 147 expectDefaultSettings(); 148 expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) 149 .addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L)); 150 expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime)); 151 152 replay(); 153 mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 154 155 // verify service recorded history 156 assertNetworkTotal(TEMPLATE_WIFI, 1024L, 2048L); 157 verifyAndReset(); 158 159 // and bump forward again, with counters going higher. this is 160 // important, since polling should correctly subtract last snapshot. 161 elapsedRealtime += DAY_IN_MILLIS; 162 expectTime(TEST_START + elapsedRealtime); 163 expectDefaultSettings(); 164 expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) 165 .addEntry(TEST_IFACE, UID_ALL, 4096L, 8192L)); 166 expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime)); 167 168 replay(); 169 mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 170 171 // verify service recorded history 172 assertNetworkTotal(TEMPLATE_WIFI, 4096L, 8192L); 173 verifyAndReset(); 174 175 } 176 177 public void testStatsRebootPersist() throws Exception { 178 long elapsedRealtime = 0; 179 assertStatsFilesExist(false); 180 181 // pretend that wifi network comes online; service should ask about full 182 // network state, and poll any existing interfaces before updating. 183 expectTime(TEST_START + elapsedRealtime); 184 expectDefaultSettings(); 185 expectNetworkState(buildWifiState()); 186 expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); 187 188 replay(); 189 mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION)); 190 191 // verify service has empty history for wifi 192 assertNetworkTotal(TEMPLATE_WIFI, 0L, 0L); 193 verifyAndReset(); 194 195 // modify some number on wifi, and trigger poll event 196 elapsedRealtime += HOUR_IN_MILLIS; 197 expectTime(TEST_START + elapsedRealtime); 198 expectDefaultSettings(); 199 expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) 200 .addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L)); 201 // TODO: switch these stats to specific iface 202 expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 2) 203 .addEntry(IFACE_ALL, TEST_UID_1, 512L, 256L) 204 .addEntry(IFACE_ALL, TEST_UID_2, 128L, 128L)); 205 206 replay(); 207 mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 208 209 // verify service recorded history 210 assertNetworkTotal(TEMPLATE_WIFI, 1024L, 2048L); 211 assertUidTotal(TEST_UID_1, TEMPLATE_WIFI, 512L, 256L); 212 assertUidTotal(TEST_UID_2, TEMPLATE_WIFI, 128L, 128L); 213 verifyAndReset(); 214 215 // graceful shutdown system, which should trigger persist of stats, and 216 // clear any values in memory. 217 mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SHUTDOWN)); 218 219 // talk with zombie service to assert stats have gone; and assert that 220 // we persisted them to file. 221 expectDefaultSettings(); 222 replay(); 223 assertNetworkTotal(TEMPLATE_WIFI, 0L, 0L); 224 verifyAndReset(); 225 226 assertStatsFilesExist(true); 227 228 // boot through serviceReady() again 229 expectDefaultSettings(); 230 expectSystemReady(); 231 232 replay(); 233 mService.systemReady(); 234 235 // after systemReady(), we should have historical stats loaded again 236 assertNetworkTotal(TEMPLATE_WIFI, 1024L, 2048L); 237 assertUidTotal(TEST_UID_1, TEMPLATE_WIFI, 512L, 256L); 238 assertUidTotal(TEST_UID_2, TEMPLATE_WIFI, 128L, 128L); 239 verifyAndReset(); 240 241 } 242 243 public void testStatsBucketResize() throws Exception { 244 long elapsedRealtime = 0; 245 NetworkStatsHistory history = null; 246 long[] total = null; 247 248 assertStatsFilesExist(false); 249 250 // pretend that wifi network comes online; service should ask about full 251 // network state, and poll any existing interfaces before updating. 252 expectTime(TEST_START + elapsedRealtime); 253 expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); 254 expectNetworkState(buildWifiState()); 255 expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); 256 257 replay(); 258 mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION)); 259 verifyAndReset(); 260 261 // modify some number on wifi, and trigger poll event 262 elapsedRealtime += 2 * HOUR_IN_MILLIS; 263 expectTime(TEST_START + elapsedRealtime); 264 expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); 265 expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) 266 .addEntry(TEST_IFACE, UID_ALL, 512L, 512L)); 267 expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime)); 268 269 replay(); 270 mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 271 272 // verify service recorded history 273 history = mService.getHistoryForNetwork(TEMPLATE_WIFI); 274 total = history.getTotalData(Long.MIN_VALUE, Long.MAX_VALUE, null); 275 assertEquals(512L, total[0]); 276 assertEquals(512L, total[1]); 277 assertEquals(HOUR_IN_MILLIS, history.bucketDuration); 278 assertEquals(2, history.bucketCount); 279 verifyAndReset(); 280 281 // now change bucket duration setting and trigger another poll with 282 // exact same values, which should resize existing buckets. 283 expectTime(TEST_START + elapsedRealtime); 284 expectSettings(0L, 30 * MINUTE_IN_MILLIS, WEEK_IN_MILLIS); 285 expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); 286 expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime)); 287 288 replay(); 289 mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); 290 291 // verify identical stats, but spread across 4 buckets now 292 history = mService.getHistoryForNetwork(TEMPLATE_WIFI); 293 total = history.getTotalData(Long.MIN_VALUE, Long.MAX_VALUE, null); 294 assertEquals(512L, total[0]); 295 assertEquals(512L, total[1]); 296 assertEquals(30 * MINUTE_IN_MILLIS, history.bucketDuration); 297 assertEquals(4, history.bucketCount); 298 verifyAndReset(); 299 300 } 301 302 private void assertNetworkTotal(int template, long rx, long tx) { 303 final NetworkStatsHistory history = mService.getHistoryForNetwork(template); 304 final long[] total = history.getTotalData(Long.MIN_VALUE, Long.MAX_VALUE, null); 305 assertEquals(rx, total[0]); 306 assertEquals(tx, total[1]); 307 } 308 309 private void assertUidTotal(int uid, int template, long rx, long tx) { 310 final NetworkStatsHistory history = mService.getHistoryForUid(uid, template); 311 final long[] total = history.getTotalData(Long.MIN_VALUE, Long.MAX_VALUE, null); 312 assertEquals(rx, total[0]); 313 assertEquals(tx, total[1]); 314 } 315 316 private void expectSystemReady() throws Exception { 317 mAlarmManager.remove(isA(PendingIntent.class)); 318 expectLastCall().anyTimes(); 319 320 mAlarmManager.setInexactRepeating( 321 eq(AlarmManager.ELAPSED_REALTIME), anyLong(), anyLong(), isA(PendingIntent.class)); 322 expectLastCall().atLeastOnce(); 323 } 324 325 private void expectNetworkState(NetworkState... state) throws Exception { 326 expect(mConnManager.getAllNetworkState()).andReturn(state).atLeastOnce(); 327 } 328 329 private void expectNetworkStatsSummary(NetworkStats summary) throws Exception { 330 expect(mNetManager.getNetworkStatsSummary()).andReturn(summary).atLeastOnce(); 331 } 332 333 private void expectNetworkStatsDetail(NetworkStats detail) throws Exception { 334 expect(mNetManager.getNetworkStatsDetail()).andReturn(detail).atLeastOnce(); 335 } 336 337 private void expectDefaultSettings() throws Exception { 338 expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); 339 } 340 341 private void expectSettings(long persistThreshold, long bucketDuration, long maxHistory) 342 throws Exception { 343 expect(mSettings.getPollInterval()).andReturn(HOUR_IN_MILLIS).anyTimes(); 344 expect(mSettings.getPersistThreshold()).andReturn(persistThreshold).anyTimes(); 345 expect(mSettings.getNetworkBucketDuration()).andReturn(bucketDuration).anyTimes(); 346 expect(mSettings.getNetworkMaxHistory()).andReturn(maxHistory).anyTimes(); 347 expect(mSettings.getUidBucketDuration()).andReturn(bucketDuration).anyTimes(); 348 expect(mSettings.getUidMaxHistory()).andReturn(maxHistory).anyTimes(); 349 expect(mSettings.getTimeCacheMaxAge()).andReturn(DAY_IN_MILLIS).anyTimes(); 350 } 351 352 private void expectTime(long currentTime) throws Exception { 353 expect(mTime.forceRefresh()).andReturn(false).anyTimes(); 354 expect(mTime.hasCache()).andReturn(true).anyTimes(); 355 expect(mTime.currentTimeMillis()).andReturn(currentTime).anyTimes(); 356 expect(mTime.getCacheAge()).andReturn(0L).anyTimes(); 357 expect(mTime.getCacheCertainty()).andReturn(0L).anyTimes(); 358 } 359 360 private void assertStatsFilesExist(boolean exist) { 361 final File summaryFile = new File(mStatsDir, "netstats.bin"); 362 final File detailFile = new File(mStatsDir, "netstats_uid.bin"); 363 if (exist) { 364 assertTrue(summaryFile.exists()); 365 assertTrue(detailFile.exists()); 366 } else { 367 assertFalse(summaryFile.exists()); 368 assertFalse(detailFile.exists()); 369 } 370 } 371 372 private static NetworkState buildWifiState() { 373 final NetworkInfo info = new NetworkInfo(TYPE_WIFI, 0, null, null); 374 info.setDetailedState(DetailedState.CONNECTED, null, null); 375 final LinkProperties prop = new LinkProperties(); 376 prop.setInterfaceName(TEST_IFACE); 377 return new NetworkState(info, prop, null); 378 } 379 380 private static NetworkStats buildEmptyStats(long elapsedRealtime) { 381 return new NetworkStats(elapsedRealtime, 0); 382 } 383 384 private void replay() { 385 EasyMock.replay(mNetManager, mAlarmManager, mTime, mSettings, mConnManager); 386 } 387 388 private void verifyAndReset() { 389 EasyMock.verify(mNetManager, mAlarmManager, mTime, mSettings, mConnManager); 390 EasyMock.reset(mNetManager, mAlarmManager, mTime, mSettings, mConnManager); 391 } 392} 393