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