diff options
| author | 2016-04-12 11:29:07 +0900 | |
|---|---|---|
| committer | 2016-04-12 12:38:03 +0900 | |
| commit | 3edcde295326db07520ed5eedde087c24c16dfd0 (patch) | |
| tree | 490462e02fde86a1945a8c433e28fa8cc299b217 | |
| parent | 76be46f4d9314fd7daca0985a0a7e02126d85975 (diff) | |
Fix flakiness DocumentLoader#testCancelTask.
For testing, we use blockDocument and unblockDocument test mehtods to
control flow of DocumentLoader's background thread.
Previously testCancelTask may exit before the background thread goes
back from blocking, which causes InterruptedException.
Fixes: 28125289
Change-Id: Id03826733c5b6f1da66b9280838eb1d2897ed5fc
| -rw-r--r-- | packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java | 7 | ||||
| -rw-r--r-- | packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java | 17 |
2 files changed, 15 insertions, 9 deletions
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java b/packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java index 329afdd4f17c..6ed4ea1db499 100644 --- a/packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java +++ b/packages/MtpDocumentsProvider/src/com/android/mtp/DocumentLoader.java @@ -196,9 +196,10 @@ class DocumentLoader implements AutoCloseable { } task.loadObjectInfoList(NUM_LOADING_ENTRIES); final boolean shouldNotify = - task.mLastNotified.getTime() < - new Date().getTime() - NOTIFY_PERIOD_MS || - task.getState() != LoaderTask.STATE_LOADING; + task.getState() != LoaderTask.STATE_CANCELLED && + (task.mLastNotified.getTime() < + new Date().getTime() - NOTIFY_PERIOD_MS || + task.getState() != LoaderTask.STATE_LOADING); if (shouldNotify) { task.notify(mResolver); } diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java index 60dd7e16a1d9..a3c6bd77cefb 100644 --- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java +++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java @@ -143,9 +143,9 @@ public class DocumentLoaderTest extends AndroidTestCase { } } - public void testCancelTask() throws IOException, InterruptedException { + public void testCancelTask() throws IOException, InterruptedException, TimeoutException { setUpDocument(mManager, - DocumentLoader.NUM_INITIAL_ENTRIES + DocumentLoader.NUM_LOADING_ENTRIES + 1); + DocumentLoader.NUM_INITIAL_ENTRIES + 1); // Block the first iteration in the background thread. mManager.blockDocument( @@ -155,19 +155,24 @@ public class DocumentLoaderTest extends AndroidTestCase { MtpDocumentsProvider.DEFAULT_DOCUMENT_PROJECTION, mParentIdentifier)) { assertTrue(cursor.getExtras().getBoolean(DocumentsContract.EXTRA_LOADING)); } - Thread.sleep(DocumentLoader.NOTIFY_PERIOD_MS); + + final Uri uri = DocumentsContract.buildChildDocumentsUri( + MtpDocumentsProvider.AUTHORITY, mParentIdentifier.mDocumentId); + assertEquals(0, mResolver.getChangeCount(uri)); // Clear task while the first iteration is being blocked. + mLoader.cancelTask(mParentIdentifier); mManager.unblockDocument( 0, DocumentLoader.NUM_INITIAL_ENTRIES + 1); - mLoader.cancelTask(mParentIdentifier); - - Thread.sleep(DocumentLoader.NOTIFY_PERIOD_MS * 2); + Thread.sleep(DocumentLoader.NOTIFY_PERIOD_MS); + assertEquals(0, mResolver.getChangeCount(uri)); // Check if it's OK to query invalidated task. try (final Cursor cursor = mLoader.queryChildDocuments( MtpDocumentsProvider.DEFAULT_DOCUMENT_PROJECTION, mParentIdentifier)) { + assertTrue(cursor.getExtras().getBoolean(DocumentsContract.EXTRA_LOADING)); } + mResolver.waitForNotification(uri, 1); } private void setUpLoader() { |