From 0de55602ec6d350548248feddc68c91b29326eff Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Sun, 23 Dec 2012 19:28:09 -0800 Subject: Simplify download flow control, handle redirects. Move redirection handling into a single loop, and handle each HTTP response code inline to make flow control easier to reason about. Fix race condition in tests by waiting for first status update. Bug: 7887226 Change-Id: Id4bfd182941baad4cd0bb702376c4beeb7275bb2 --- .../providers/downloads/AbstractPublicApiTest.java | 19 +++++++++++-------- .../providers/downloads/PublicApiFunctionalTest.java | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) (limited to 'tests/src/com/android') diff --git a/tests/src/com/android/providers/downloads/AbstractPublicApiTest.java b/tests/src/com/android/providers/downloads/AbstractPublicApiTest.java index 12c04f6a..e7f08c90 100644 --- a/tests/src/com/android/providers/downloads/AbstractPublicApiTest.java +++ b/tests/src/com/android/providers/downloads/AbstractPublicApiTest.java @@ -100,21 +100,24 @@ public abstract class AbstractPublicApiTest extends AbstractDownloadProviderFunc } void runUntilStatus(int status) throws TimeoutException { + final long startMillis = mSystemFacade.currentTimeMillis(); startService(null); - waitForStatus(status); + waitForStatus(status, startMillis); } - void waitForStatus(int expected) throws TimeoutException { + void waitForStatus(int expected, long afterMillis) throws TimeoutException { int actual = -1; final long timeout = SystemClock.elapsedRealtime() + (15 * SECOND_IN_MILLIS); while (SystemClock.elapsedRealtime() < timeout) { - actual = getStatus(); - if (actual == STATUS_SUCCESSFUL || actual == STATUS_FAILED) { - assertEquals(expected, actual); - return; - } else if (actual == expected) { - return; + if (getLongField(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP) >= afterMillis) { + actual = getStatus(); + if (actual == STATUS_SUCCESSFUL || actual == STATUS_FAILED) { + assertEquals(expected, actual); + return; + } else if (actual == expected) { + return; + } } SystemClock.sleep(100); diff --git a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java index 4159beb6..157cce89 100644 --- a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java +++ b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java @@ -421,7 +421,7 @@ public class PublicApiFunctionalTest extends AbstractPublicApiTest { mManager.remove(download.mId); // make sure the row is gone from the database - download.waitForStatus(-1); + download.waitForStatus(-1, -1); } public void testDownloadCompleteBroadcast() throws Exception { -- cgit v1.2.3