1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamathpackage org.apache.harmony.tests.internal.net.www.protocol.file;
18cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
19d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamathimport java.io.BufferedOutputStream;
20d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamathimport java.io.File;
21d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamathimport java.io.FileOutputStream;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
23d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamathimport java.io.InputStream;
24d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamathimport java.io.OutputStream;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.net.URL;
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.net.URLConnection;
27d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamathimport junit.framework.TestCase;
28d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamathimport libcore.io.Streams;
292e451d35cb5b0fcebe762b6592e2e42ef130b1d4Piotr Jastrzebski//import libcore.net.url.FileURLConnection;
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/**
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Tests for <code>FileURLConnection</code> class constructors and methods.
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class FileURLConnectionTest extends TestCase {
352e451d35cb5b0fcebe762b6592e2e42ef130b1d4Piotr Jastrzebski/*
36d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath    private static final String RESOURCE_NAME = "resources/test.rtf";
37d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath
38d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath    private final ClassLoader loader = FileURLConnectionTest.class.getClassLoader();
39d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath
40d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath    private URL createTempFileWithContent(String resourceName) throws IOException {
41d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        InputStream is = null;
42d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        OutputStream os = null;
43d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        try {
44d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            final URL url = loader.getResource(resourceName);
45d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            assertNotNull("Cannot find test resource " + resourceName, url);
46d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            is = url.openStream();
47d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            File file = File.createTempFile("FileURLConnectionTest",
48d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath                    resourceName.substring(resourceName.indexOf(".")));
49d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            os = new BufferedOutputStream(new FileOutputStream(file));
50d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            Streams.copy(is, os);
51d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath
52d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            return new URL("file://" + file.getAbsolutePath());
53d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        } finally {
54d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            if (is != null) {
55d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath                is.close();
56d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            }
57d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath
58d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            if (os != null) {
59d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath                os.close();
60d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath            }
61d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        }
62d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath    }
63d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath
64d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath    private String getContentType(String fileName) throws IOException {
651399e0b42af7a565f34b9a2441f0a079e6ab3854Narayan Kamath        String resourceName = "resources/" + fileName;
66d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        URL url = createTempFileWithContent(resourceName);
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return new FileURLConnection(url).getContentType();
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testGetContentType() throws IOException {
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Regression for HARMONY-4699
72d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        assertEquals("text/rtf", getContentType("test.rtf"));
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // RI would return "content/unknown"
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("application/msword", getContentType("test.doc"));
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("text/html", getContentType("test.htx"));
76d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        assertEquals("text/xml", getContentType("test.xml"));
77d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        assertEquals("text/html",
78d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath                new FileURLConnection(new URL("file:///")).getContentType());
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testGetInputStream() throws IOException {
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Regression for Harmony-5737
83d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        URL url = createTempFileWithContent(RESOURCE_NAME);
841399e0b42af7a565f34b9a2441f0a079e6ab3854Narayan Kamath        assertNotNull(url);
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        URL anchorUrl = new URL(url, "#anchor");
86d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        assertNotNull("Cannot find test resource " + RESOURCE_NAME, anchorUrl);
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        FileURLConnection conn = new FileURLConnection(anchorUrl);
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNotNull(conn.getInputStream());
90d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath    }
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
92d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath    public void testGetInputStream_localHost() throws IOException {
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Regression for Harmony-5779
94d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        URL url = createTempFileWithContent(RESOURCE_NAME);
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String localURLString = "file://localhost/" + url.getFile();
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        URL localURL = new URL(localURLString);
97d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        FileURLConnection conn = new FileURLConnection(localURL);
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNotNull(conn.getInputStream());
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("file", conn.getURL().getProtocol());
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testHeaderFunctions() throws IOException {
103d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        URL url = createTempFileWithContent(RESOURCE_NAME);
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        FileURLConnection conn = new FileURLConnection(url);
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNotNull(conn.getInputStream());
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(conn.getContentType(), conn.getHeaderField("content-type"));
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
108d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        url = createTempFileWithContent(RESOURCE_NAME);
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        conn = new FileURLConnection(url);
110d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNotNull(conn.getInputStream());
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(conn.getContentType(), conn.getHeaderField("content-type"));
1132587ef91ba693d73e97704e8163c050b286e7330Neil Fuller        assertEquals(Integer.toString(conn.getContentLength()),
1142587ef91ba693d73e97704e8163c050b286e7330Neil Fuller                conn.getHeaderField("content-length"));
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(conn.getHeaderField(0), conn.getHeaderField("content-type"));
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(conn.getHeaderField(1), conn.getHeaderField("content-length"));
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(conn.getHeaderField(2), conn.getHeaderField("last-modified"));
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("last-modified", conn.getHeaderFieldKey(2));
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("content-length", conn.getHeaderFieldKey(1));
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("content-type", conn.getHeaderFieldKey(0));
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testHeader_BoundaryCheck() throws IOException {
124d94e746976d2906b89197448db15e4a0e355d98aNarayan Kamath        URL url = createTempFileWithContent(RESOURCE_NAME);
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        URLConnection urlConnection = url.openConnection();
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNull(urlConnection.getHeaderField(Integer.MIN_VALUE));
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNull(urlConnection.getHeaderField(Integer.MAX_VALUE));
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNull(urlConnection.getHeaderFieldKey(Integer.MIN_VALUE));
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNull(urlConnection.getHeaderFieldKey(Integer.MAX_VALUE));
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNull(urlConnection.getHeaderField(null));
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1322e451d35cb5b0fcebe762b6592e2e42ef130b1d4Piotr Jastrzebski    */
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
134