@SmallTest @Feature({"Android-AppBase"}) public void testFindAndUploadAllCrashes() throws IOException { // Setup prerequisites. final AtomicInteger numServiceStarts = new AtomicInteger(0); final File[] minidumpFiles = { new File(mCrashDir, "chromium_renderer-111.dmp1"), new File(mCrashDir, "chromium_renderer-222.dmp2"), new File(mCrashDir, "chromium_renderer-333.dmp3"), }; MinidumpPreparationContext context = new MinidumpPreparationContext(getInstrumentation().getTargetContext()) { @Override public ComponentName startService(Intent intentToCheck) { String filePath = intentToCheck.getStringExtra(MinidumpUploadService.FILE_TO_UPLOAD_KEY); // Assuming numServicesStart value corresponds to minidumpFiles index. assertEquals( "Minidump path should be the absolute path", minidumpFiles[numServiceStarts.intValue()].getAbsolutePath(), filePath); assertTrue( "Should not call service more than number of files", numServiceStarts.incrementAndGet() <= minidumpFiles.length); assertEquals( "Action should be correct", MinidumpUploadService.ACTION_UPLOAD, intentToCheck.getAction()); return new ComponentName(getPackageName(), MinidumpUploadService.class.getName()); } }; MinidumpUploadService service = new TestMinidumpUploadService(context); for (File minidumpFile : minidumpFiles) { setUpMinidumpFile(minidumpFile, BOUNDARY); } // Run test. Intent findAndUploadAllCrashesIntent = MinidumpUploadService.createFindAndUploadAllCrashesIntent(context); findAndUploadAllCrashesIntent.putExtra( MinidumpUploadService.FINISHED_LOGCAT_EXTRACTION_KEY, true); service.onCreate(); service.onHandleIntent(findAndUploadAllCrashesIntent); // Verify. for (File minidumpFile : minidumpFiles) { assertTrue("Minidump file should exist: " + minidumpFile, minidumpFile.isFile()); } assertEquals( "Should have called startService() same number of times as there are files", minidumpFiles.length, numServiceStarts.intValue()); }