@VisibleForTesting
static class LogRunnable implements Runnable {
- private static final long TIMEOUT_MILLIS = TimeUnit.MINUTES.toMillis(5);
+ private static final long TIMEOUT_MILLIS = TimeUnit.MINUTES.toMillis(10);
private JobService mJobService;
private JobParameters mParams;
FileCollector.MeasurementResult downloads =
FileCollector.getMeasurementResult(mDownloadsDirectory);
- logToFile(mainCategories, downloads, mCollector.getPackageStats(TIMEOUT_MILLIS),
- mSystemSize);
+ boolean needsReschedule = true;
+ List<PackageStats> stats = mCollector.getPackageStats(TIMEOUT_MILLIS);
+ if (stats != null) {
+ needsReschedule = false;
+ logToFile(mainCategories, downloads, stats, mSystemSize);
+ } else {
+ Log.w("TAG", "Timed out while fetching package stats.");
+ }
if (mJobService != null) {
- mJobService.jobFinished(mParams, false);
+ mJobService.jobFinished(mParams, needsReschedule);
}
}
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.job.JobService;
+import android.app.job.JobParameters;
import android.content.pm.PackageStats;
import android.test.AndroidTestCase;
assertThat(json.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY).length()).isEqualTo(1L);
}
+ @Test
+ public void testDontCrashOnPackageStatsTimeout() throws Exception {
+ when(mCollector.getPackageStats(anyInt())).thenReturn(null);
+
+ LogRunnable task = new LogRunnable();
+ task.setAppCollector(mCollector);
+ task.setDownloadsDirectory(mDownloads.getRoot());
+ task.setRootDirectory(mRootDirectory.getRoot());
+ task.setLogOutputFile(mInputFile);
+ task.setSystemSize(10L);
+ task.run();
+
+ // No exception should be thrown.
+ }
+
private void writeDataToFile(File f, String data) throws Exception{
PrintStream out = new PrintStream(f);
out.print(data);