1e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard/* 2e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * Copyright (C) 2010 The Android Open Source Project 3e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * 4e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * Licensed under the Apache License, Version 2.0 (the "License"); 5e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * you may not use this file except in compliance with the License. 6e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * You may obtain a copy of the License at 7e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * 8e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * http://www.apache.org/licenses/LICENSE-2.0 9e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * 10e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * Unless required by applicable law or agreed to in writing, software 11e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * distributed under the License is distributed on an "AS IS" BASIS, 12e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * See the License for the specific language governing permissions and 14e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * limitations under the License. 15e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard */ 16e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard 17e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howardpackage com.android.providers.downloads; 18e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard 1914961f94d762e733a733e3268fca1074d8da5f8cSteve Howardimport android.app.DownloadManager; 20e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howardimport android.test.suitebuilder.annotation.LargeTest; 21e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard 22e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard/** 23e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * Download manager tests that require multithreading. 24e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard */ 25e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard@LargeTest 26e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howardpublic class ThreadingTest extends AbstractPublicApiTest { 27e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard private static class FakeSystemFacadeWithThreading extends FakeSystemFacade { 28e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard @Override 29e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard public void startThread(Thread thread) { 30e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard thread.start(); 31e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard } 32e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard } 33e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard 34e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard public ThreadingTest() { 35e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard super(new FakeSystemFacadeWithThreading()); 36e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard } 37e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard 38e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard @Override 39e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard protected void tearDown() throws Exception { 40e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard Thread.sleep(50); // give threads a chance to finish 41e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard super.tearDown(); 42e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard } 43e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard 44e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard /** 45e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * Test for race conditions when the service is flooded with startService() calls while running 46e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard * a download. 47e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard */ 48e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard public void testFloodServiceWithStarts() throws Exception { 49e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard enqueueResponse(HTTP_OK, FILE_CONTENT); 50e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard Download download = enqueueRequest(getRequest()); 51e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard while (download.getStatus() != DownloadManager.STATUS_SUCCESSFUL) { 52e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard startService(null); 53e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard Thread.sleep(10); 54e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard } 55e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard } 56e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard} 57