path: root/tests
diff options
authorSteve Howard <>2010-07-20 12:04:02 -0700
committerSteve Howard <>2010-07-20 12:04:02 -0700
commit5180de23e77139dd6971dfd48269242e3e3562d9 (patch)
treeebcf27563c2eb44e821437b459f99f3b150e1454 /tests
parent071bd7acb3185f4f1e807855605c5e6018e9742f (diff)
Fix bug with deciding when to restart a download.
In previous refactoring I had combined the code for starting a download (from DownloadService.insertDownload()) and restarting a download (from DownloadService.updateDownload()). I'd missed the fact that the former checks DownloadInfo.isReadyToStart() while the latter checks DownloadInfo.isReadyToRestart(). This cause a race condition where multiple startService() calls during a download would cause the service to try to spawn a second thread for the same running download. I've fixed the bug and added a test case to exercise this. Change-Id: Ia968331a030137daac7c8b5792a01e3e19065b38
Diffstat (limited to 'tests')
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/src/com/android/providers/downloads/ b/tests/src/com/android/providers/downloads/
index a9810fc1..e34c66e6 100644
--- a/tests/src/com/android/providers/downloads/
+++ b/tests/src/com/android/providers/downloads/
@@ -309,6 +309,19 @@ public class PublicApiFunctionalTest extends AbstractDownloadManagerFunctionalTe
enqueueResponse(HTTP_OK, FILE_CONTENT);
+ /**
+ * Test for race conditions when the service is flooded with startService() calls while running
+ * a download.
+ */
+ public void testFloodServiceWithStarts() throws Exception {
+ enqueueResponse(HTTP_OK, FILE_CONTENT);
+ Download download = enqueueRequest(getRequest());
+ while (download.getStatus() != DownloadManager.STATUS_SUCCESSFUL) {
+ startService(null);
+ Thread.sleep(10);
+ }
+ }
private DownloadManager.Request getRequest() throws MalformedURLException {
return getRequest(getServerUri(REQUEST_PATH));