1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Licensed to the Apache Software Foundation (ASF) under one or more
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.api.java.net;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grobimport dalvik.annotation.KnownFailure;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grobimport java.io.File;
26b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grobimport java.io.FileOutputStream;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OutputStream;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.CacheRequest;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.CacheResponse;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.HttpURLConnection;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.NetPermission;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.ResponseCache;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URI;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URISyntaxException;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URL;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URLConnection;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission;
40b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grobimport java.util.Arrays;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.List;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Map;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grobimport tests.support.Support_PortManager;
47b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grobimport tests.support.Support_TestWebData;
48b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grobimport tests.support.Support_TestWebServer;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
50b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob@TestTargetClass(value = ResponseCache.class)
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class ResponseCacheTest extends TestCase {
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.ResponseCache#getDefault()
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "This is a complete subset of tests for getDefault method.",
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getDefault",
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_GetDefault() throws Exception {
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(ResponseCache.getDefault());
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.ResponseCache#setDefault(ResponseCache)
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "This is a complete subset of tests for setDefault method.",
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "setDefault",
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.net.ResponseCache.class}
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "This is a complete subset of tests for setDefault method.",
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "ResponseCache",
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_SetDefaultLjava_net_ResponseCache_Normal()
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws Exception {
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ResponseCache rc1 = new MockResponseCache();
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ResponseCache rc2 = new MockResponseCache();
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ResponseCache.setDefault(rc1);
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(ResponseCache.getDefault(), rc1);
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ResponseCache.setDefault(rc2);
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(ResponseCache.getDefault(), rc2);
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ResponseCache.setDefault(null);
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(ResponseCache.getDefault());
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.ResponseCache#getDefault()
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "This is a complete subset of tests for getDefault method.",
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getDefault",
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_GetDefault_Security() {
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager old = System.getSecurityManager();
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(new MockSM());
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.err.println("No setSecurityManager permission.");
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.err.println("test_setDefaultLjava_net_ResponseCache_NoPermission is not tested");
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ResponseCache.getDefault();
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SecurityException");
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(old);
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.ResponseCache#setDefault(ResponseCache)
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.ADDITIONAL,
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "This is a complete subset of tests for setDefault method.",
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setDefault",
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.ResponseCache.class}
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setDefaultLjava_net_ResponseCache_NoPermission() {
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ResponseCache rc = new MockResponseCache();
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager old = System.getSecurityManager();
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(new MockSM());
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.err.println("No setSecurityManager permission.");
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.err.println("test_setDefaultLjava_net_ResponseCache_NoPermission is not tested");
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ResponseCache.setDefault(rc);
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SecurityException");
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(old);
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "get",
158b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        args = {URI.class, String.class, Map.class}
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
160b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob    public void test_get() throws Exception {
161b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        String uri = "http://localhost/";
162b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        URL url  = new URL(uri);
163b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        TestResponseCache cache = new TestResponseCache(uri, true);
164b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        ResponseCache.setDefault(cache);
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpCon.setUseCaches(true);
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpCon.connect();
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Thread.sleep(5000);
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(Exception e) {}
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream is = httpCon.getInputStream();
173b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        byte[] array = new byte [10];
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        is.read(array);
175b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        assertEquals(url.toURI(), cache.getWasCalled);
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Cache test", new String(array));
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        is.close();
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpCon.disconnect();
179b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
182b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob    @TestTargetNew(
183b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        level = TestLevel.COMPLETE,
184b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        notes = "",
185b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        method = "put",
186b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        args = {URI.class, URLConnection.class}
187b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob    )
188b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob    @KnownFailure("the call to put is made with a wrong uri."
189b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            + " The RI calls with http://localhost:<port>/test1,"
190b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            + " but android only calls with http://localhost:<port>")
191b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob    public void test_put() throws Exception {
192b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        // Create test ResponseCache
193b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        TestResponseCache cache = new TestResponseCache(
194b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob                "http://localhost/not_cached", false);
195b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        ResponseCache.setDefault(cache);
196b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
197b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        // Start Server
198b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        int port = Support_PortManager.getNextPort();
199b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        Support_TestWebServer s = new Support_TestWebServer();
200b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        try {
201b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            s.initServer(port, 10000, false);
202b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            Thread.currentThread().sleep(2500);
203b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
204b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            // Create connection to server
205b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            URL url  = new URL("http://localhost:" + port + "/test1");
206b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
207b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            httpCon.setUseCaches(true);
208b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            httpCon.connect();
209b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            Thread.currentThread().sleep(2500);
210b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
211b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            // Check that a call to the cache was made.
212b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            assertEquals(url.toURI(), cache.getWasCalled);
213b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            // Make the HttpConnection get the content. It should try to
214b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            // put it into the cache.
215b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            httpCon.getContent();
216b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            // Check if put was called
217b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            assertEquals(url.toURI(), cache.putWasCalled);
218b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
219b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            // get the
220b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            InputStream is = httpCon.getInputStream();
221b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
222b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            byte[] array = new byte[Support_TestWebData.test1.length];
223b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            is.read(array);
224b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            assertTrue(Arrays.equals(Support_TestWebData.tests[0], array));
225b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            is.close();
226b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            httpCon.disconnect();
227b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        } finally {
228b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            s.close();
229b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        }
230b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob    }
231b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * MockResponseCache for testSetDefault(ResponseCache)
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class MockResponseCache extends ResponseCache {
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public CacheResponse get(URI arg0, String arg1, Map arg2)
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException {
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public CacheRequest put(URI arg0, URLConnection arg1)
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException {
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * MockSecurityMaanger. It denies NetPermission("getResponseCache") and
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * NetPermission("setResponseCache").
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class MockSM extends SecurityManager {
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission permission) {
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission instanceof NetPermission) {
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if ("setResponseCache".equals(permission.getName())) {
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    throw new SecurityException();
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission instanceof NetPermission) {
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if ("getResponseCache".equals(permission.getName())) {
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    throw new SecurityException();
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission instanceof RuntimePermission) {
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if ("setSecurityManager".equals(permission.getName())) {
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    return;
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class TestCacheResponse extends CacheResponse {
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream is = null;
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Map<String, List<String>> headers = null;
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public TestCacheResponse(String filename) {
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String path = getClass().getPackage().getName().replace(".", "/");
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            is = getClass().getResourceAsStream("/" + path + "/" + filename);
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
284b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        @Override
285b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        public InputStream getBody() {
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project           return is;
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
289b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        @Override
290b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob         public Map getHeaders() {
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project           return null;
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         }
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
294b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class TestCacheRequest extends CacheRequest {
296b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
297b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        @Override
298b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        public OutputStream getBody() {
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
302b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        @Override
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void abort() {
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class TestResponseCache extends ResponseCache {
308b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
309b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        URI uri1 = null;
310b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        boolean testGet = false;
311b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
312b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        public URI getWasCalled = null;
313b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        public URI putWasCalled = null;
314b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
315b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        TestResponseCache(String uri, boolean testGet) {
316b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            try {
317b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob                uri1  = new URI(uri);
318b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            } catch (URISyntaxException e) {
319b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            }
320b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            this.testGet = testGet;
321b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        }
322b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob
323b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        @Override
324b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        public CacheResponse get(URI uri, String rqstMethod, Map rqstHeaders) {
325b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            getWasCalled = uri;
326b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            if (testGet && uri.equals(uri1)) {
327b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob                return new TestCacheResponse("file1.cache");
328b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            }
329b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            return null;
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
332b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        @Override
333b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob        public CacheRequest put(URI uri, URLConnection conn) {
334b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            putWasCalled = uri;
335b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            if (!testGet && uri.equals(uri1)) {
336b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob                return new TestCacheRequest();
337b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            }
338b72a4718fca6b1ccde71c785cea317f5b3c2c2e9Urs Grob            return null;
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}