Serialize threading for download manager testing.
authorSteve Howard <showard@google.com>
Mon, 26 Jul 2010 22:25:06 +0000 (15:25 -0700)
committerSteve Howard <showard@google.com>
Tue, 27 Jul 2010 23:32:10 +0000 (16:32 -0700)
commite6a05a1aa4697440e9630d12b741b3bae321fe49
tree56e9d9d931308141c0142e37c5c714c92de29ec7
parent93155e1da7e89d4925e244f5afa94afb8ada7381
Serialize threading for download manager testing.

The download manager uses threading in a simple way -- it launches two
threads, UpdateThread and DownloadThread, and both are "fire and
forget".  This is fortunate for testing, since it means we can
eliminate multithreading and simply run each thread in order, and
everything still works.

This change does just that, abstracting Thread.start() behind
SystemFacade and making FakeSystemFacade put new threads into a queue
and then run through them serially.  This simplifies much of the test
code and makes it all much more predictable.

I've simplified the test code as much as possible here and moved a few
more tests over to PublicApiFunctionalTest, leaving only a minimum in
DownloadManagerFunctionalTest, which will eventually be deleted
altogether.  I've also improved testing in some areas -- for example,
we can now test that running notifications get cancelled after the
download completes in a robust way.

There is one test case that checks for race conditions and requires
multithreading.  I've moved this into a new ThreadingTest class, which
uses a custom FakeSystemFacade that allows multithreading.  I've
extracted AbstractPublicApiTest for the newly shared code.

Change-Id: Ic1d5c76bfa9913fe053174c3d8b516790ca8b25f
src/com/android/providers/downloads/DownloadInfo.java
src/com/android/providers/downloads/DownloadService.java
src/com/android/providers/downloads/RealSystemFacade.java
src/com/android/providers/downloads/SystemFacade.java
tests/src/com/android/providers/downloads/AbstractDownloadManagerFunctionalTest.java
tests/src/com/android/providers/downloads/AbstractPublicApiTest.java [new file with mode: 0644]
tests/src/com/android/providers/downloads/DownloadManagerFunctionalTest.java
tests/src/com/android/providers/downloads/FakeSystemFacade.java
tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
tests/src/com/android/providers/downloads/ThreadingTest.java [new file with mode: 0644]