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