ServletFileUploadTest.java :  » Net » apache-commons-fileupload » org » apache » commons » fileupload » Java Open Source

Java Open Source » Net » apache commons fileupload 
apache commons fileupload » org » apache » commons » fileupload » ServletFileUploadTest.java
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.commons.fileupload;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

/**
 * Unit tests {@link org.apache.commons.fileupload.DiskFileUpload}.
 *
 * @author <a href="mailto:jmcnally@apache.org">John McNally</a>
 * @author Sean C. Sullivan
 *
 */
public class ServletFileUploadTest extends FileUploadTestCase
{
  public void testWithInvalidRequest()
    {
      FileUploadBase fu = null;

      fu = new DiskFileUpload();

      HttpServletRequest req = HttpServletRequestFactory.createInvalidHttpServletRequest();


      try
      {
        fu.parseRequest(req);
        fail("testWithInvalidRequest: expected exception was not thrown");
      }
      catch (FileUploadException expected)
      {
        // this exception is expected
      }

    }


  public void testWithNullContentType()
    {
      FileUploadBase fu = new DiskFileUpload();

      HttpServletRequest req = HttpServletRequestFactory.createHttpServletRequestWithNullContentType();

      try
      {
        fu.parseRequest(req);
        fail("testWithNullContentType: expected exception was not thrown");
      }
      catch (DiskFileUpload.InvalidContentTypeException expected)
      {
        // this exception is expected
      }
        catch (FileUploadException unexpected)
        {
        fail("testWithNullContentType: unexpected exception was thrown");
        }

    }


    public void testFileUpload()
            throws IOException, FileUploadException
    {
        List fileItems = parseUpload("-----1234\r\n" +
                        "Content-Disposition: form-data; name=\"file\"; filename=\"foo.tab\"\r\n" +
                        "Content-Type: text/whatever\r\n" +
                        "\r\n" +
                        "This is the content of the file\n" +
                        "\r\n" +
                        "-----1234\r\n" +
                        "Content-Disposition: form-data; name=\"field\"\r\n" +
                        "\r\n" +
                        "fieldValue\r\n" +
                        "-----1234\r\n" +
                        "Content-Disposition: form-data; name=\"multi\"\r\n" +
                        "\r\n" +
                        "value1\r\n" +
                        "-----1234\r\n" +
                        "Content-Disposition: form-data; name=\"multi\"\r\n" +
                        "\r\n" +
                        "value2\r\n" +
                        "-----1234--\r\n");
        assertEquals(4, fileItems.size());

        FileItem file = (FileItem) fileItems.get(0);
        assertEquals("file", file.getFieldName());
        assertFalse(file.isFormField());
        assertEquals("This is the content of the file\n", file.getString());
        assertEquals("text/whatever", file.getContentType());
        assertEquals("foo.tab", file.getName());

        FileItem field = (FileItem) fileItems.get(1);
        assertEquals("field", field.getFieldName());
        assertTrue(field.isFormField());
        assertEquals("fieldValue", field.getString());

        FileItem multi0 = (FileItem) fileItems.get(2);
        assertEquals("multi", multi0.getFieldName());
        assertTrue(multi0.isFormField());
        assertEquals("value1", multi0.getString());

        FileItem multi1 = (FileItem) fileItems.get(3);
        assertEquals("multi", multi1.getFieldName());
        assertTrue(multi1.isFormField());
        assertEquals("value2", multi1.getString());
    }

    public void testFilenameCaseSensitivity() 
            throws IOException, FileUploadException
    {
        List fileItems = parseUpload("-----1234\r\n" +
                        "Content-Disposition: form-data; name=\"FiLe\"; filename=\"FOO.tab\"\r\n" +
                        "Content-Type: text/whatever\r\n" +
                        "\r\n" +
                        "This is the content of the file\n" +
                        "\r\n" +
                        "-----1234--\r\n");
        assertEquals(1, fileItems.size());

        FileItem file = (FileItem) fileItems.get(0);
        assertEquals("FiLe", file.getFieldName());
        assertEquals("FOO.tab", file.getName());
    }

    /**
     * This is what the browser does if you submit the form without choosing a file.
     */
    public void testEmptyFile()
            throws UnsupportedEncodingException, FileUploadException
    {
        List fileItems = parseUpload ("-----1234\r\n" +
                "Content-Disposition: form-data; name=\"file\"; filename=\"\"\r\n" +
                "\r\n" +
                "\r\n" +
                "-----1234--\r\n");
        assertEquals(1, fileItems.size());

        FileItem file = (FileItem) fileItems.get(0);
        assertFalse(file.isFormField());
        assertEquals("", file.getString());
        assertEquals("", file.getName());
    }

    /**
     * Internet Explorer 5 for the Mac has a bug where the carriage
     * return is missing on any boundary line immediately preceding
     * an input with type=image. (type=submit does not have the bug.)
     */
    public void testIE5MacBug()
            throws UnsupportedEncodingException, FileUploadException
    {
        List fileItems = parseUpload("-----1234\r\n" +
                "Content-Disposition: form-data; name=\"field1\"\r\n" +
                "\r\n" +
                "fieldValue\r\n" +
                "-----1234\n" + // NOTE \r missing
                "Content-Disposition: form-data; name=\"submitName.x\"\r\n" +
                "\r\n" +
                "42\r\n" +
                "-----1234\n" + // NOTE \r missing
                "Content-Disposition: form-data; name=\"submitName.y\"\r\n" +
                "\r\n" +
                "21\r\n" +
                "-----1234\r\n" +
                "Content-Disposition: form-data; name=\"field2\"\r\n" +
                "\r\n" +
                "fieldValue2\r\n" +
                "-----1234--\r\n");

        assertEquals(4, fileItems.size());

        FileItem field1 = (FileItem) fileItems.get(0);
        assertEquals("field1", field1.getFieldName());
        assertTrue(field1.isFormField());
        assertEquals("fieldValue", field1.getString());

        FileItem submitX = (FileItem) fileItems.get(1);
        assertEquals("submitName.x", submitX.getFieldName());
        assertTrue(submitX.isFormField());
        assertEquals("42", submitX.getString());

        FileItem submitY = (FileItem) fileItems.get(2);
        assertEquals("submitName.y", submitY.getFieldName());
        assertTrue(submitY.isFormField());
        assertEquals("21", submitY.getString());

        FileItem field2 = (FileItem) fileItems.get(3);
        assertEquals("field2", field2.getFieldName());
        assertTrue(field2.isFormField());
        assertEquals("fieldValue2", field2.getString());
    }

    /**
     * Test for <a href="http://issues.apache.org/jira/browse/FILEUPLOAD-62">FILEUPLOAD-62</a>
     */
    public void testFILEUPLOAD62() throws Exception {
      final String contentType = "multipart/form-data; boundary=AaB03x";
      final String request =
        "--AaB03x\r\n" +
        "content-disposition: form-data; name=\"field1\"\r\n" +
        "\r\n" +
        "Joe Blow\r\n" +
        "--AaB03x\r\n" +
        "content-disposition: form-data; name=\"pics\"\r\n" +
        "Content-type: multipart/mixed; boundary=BbC04y\r\n" +
        "\r\n" +
        "--BbC04y\r\n" +
        "Content-disposition: attachment; filename=\"file1.txt\"\r\n" +
        "Content-Type: text/plain\r\n" +
        "\r\n" +
        "... contents of file1.txt ...\r\n" +
        "--BbC04y\r\n" +
        "Content-disposition: attachment; filename=\"file2.gif\"\r\n" +
        "Content-type: image/gif\r\n" +
        "Content-Transfer-Encoding: binary\r\n" +
        "\r\n" +
        "...contents of file2.gif...\r\n" +
        "--BbC04y--\r\n" +
        "--AaB03x--";
      List fileItems = parseUpload(request.getBytes("US-ASCII"), contentType);
        assertEquals(3, fileItems.size());
        FileItem item0 = (FileItem) fileItems.get(0);
        assertEquals("field1", item0.getFieldName());
        assertNull(item0.getName());
        assertEquals("Joe Blow", new String(item0.get()));
        FileItem item1 = (FileItem) fileItems.get(1);
        assertEquals("pics", item1.getFieldName());
        assertEquals("file1.txt", item1.getName());
        assertEquals("... contents of file1.txt ...", new String(item1.get()));
        FileItem item2 = (FileItem) fileItems.get(2);
        assertEquals("pics", item2.getFieldName());
        assertEquals("file2.gif", item2.getName());
        assertEquals("...contents of file2.gif...", new String(item2.get()));
    }

    /**
     * Test for <a href="http://issues.apache.org/jira/browse/FILEUPLOAD-111">FILEUPLOAD-111</a>
     */
    public void testFoldedHeaders()
        throws IOException, FileUploadException {
      List fileItems = parseUpload("-----1234\r\n" +
          "Content-Disposition: form-data; name=\"file\"; filename=\"foo.tab\"\r\n" +
          "Content-Type: text/whatever\r\n" +
          "\r\n" +
          "This is the content of the file\n" +
          "\r\n" +
          "-----1234\r\n" +
          "Content-Disposition: form-data; \r\n" +
          "\tname=\"field\"\r\n" +
          "\r\n" +
          "fieldValue\r\n" +
          "-----1234\r\n" +
          "Content-Disposition: form-data;\r\n" +
          "     name=\"multi\"\r\n" +
          "\r\n" +
          "value1\r\n" +
          "-----1234\r\n" +
          "Content-Disposition: form-data; name=\"multi\"\r\n" +
          "\r\n" +
          "value2\r\n" +
          "-----1234--\r\n");
      assertEquals(4, fileItems.size());

      FileItem file = (FileItem) fileItems.get(0);
      assertEquals("file", file.getFieldName());
      assertFalse(file.isFormField());
      assertEquals("This is the content of the file\n", file.getString());
      assertEquals("text/whatever", file.getContentType());
      assertEquals("foo.tab", file.getName());

      FileItem field = (FileItem) fileItems.get(1);
      assertEquals("field", field.getFieldName());
      assertTrue(field.isFormField());
      assertEquals("fieldValue", field.getString());

      FileItem multi0 = (FileItem) fileItems.get(2);
      assertEquals("multi", multi0.getFieldName());
      assertTrue(multi0.isFormField());
      assertEquals("value1", multi0.getString());

      FileItem multi1 = (FileItem) fileItems.get(3);
      assertEquals("multi", multi1.getFieldName());
      assertTrue(multi1.isFormField());
      assertEquals("value2", multi1.getString());
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.