summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Daichi Hirono <hirono@google.com> 2016-04-12 11:29:07 +0900
committer Daichi Hirono <hirono@google.com> 2016-04-12 12:38:03 +0900
commit3edcde295326db07520ed5eedde087c24c16dfd0 (patch)
tree490462e02fde86a1945a8c433e28fa8cc299b217
parent76be46f4d9314fd7daca0985a0a7e02126d85975 (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.java7
-rw-r--r--packages/MtpDocumentsProvider/tests/src/com/android/mtp/DocumentLoaderTest.java17
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() {