Author: fhanik
Date: Wed Jul 11 19:16:10 2012
New Revision: 1360358
URL: http://svn.apache.org/viewvc?rev=1360358&view=rev
Log:
Add a test file unit test case. This test case fails with both NIO and BIO on
Windows 7 with JDK 1.7
Added:
tomcat/trunk/test/org/apache/catalina/connector/TestSendFile.java (with
props)
Added: tomcat/trunk/test/org/apache/catalina/connector/TestSendFile.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestSendFile.java?rev=1360358&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/TestSendFile.java (added)
+++ tomcat/trunk/test/org/apache/catalina/connector/TestSendFile.java Wed Jul
11 19:16:10 2012
@@ -0,0 +1,145 @@
+/*
+ * 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.catalina.connector;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Globals;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.tomcat.util.buf.ByteChunk;
+import org.junit.Test;
+
+public class TestSendFile extends TomcatBaseTest{
+
+ public static final int ITERATIONS = 10;
+ public static final int EXPECTED_CONTENT_LENGTH = 100000;
+
+ @Test
+ public void testSendFile() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ Context root = tomcat.addContext("", TEMP_DIR);
+
+ File[] files = new File[ITERATIONS];
+ for (int i=0; i<ITERATIONS; i++) {
+ files[i] = generateFile(TEMP_DIR, EXPECTED_CONTENT_LENGTH * (i+1));
+ }
+
+ for (int i=0; i<ITERATIONS; i++) {
+ WritingServlet servlet = new WritingServlet(files[i]);
+ Tomcat.addServlet(root, "servlet" + i, servlet);
+ root.addServletMapping("/servlet" + i, "servlet" + i);
+ }
+
+ tomcat.start();
+
+ ByteChunk bc = new ByteChunk();
+ Map<String, List<String>> respHeaders = new HashMap<String,
List<String>>();
+ for (int i=0; i<ITERATIONS; i++) {
+ long start = System.currentTimeMillis();
+ int rc = getUrl("http://localhost:" + getPort() + "/servlet" + i,
bc, null, respHeaders);
+ assertEquals(HttpServletResponse.SC_OK, rc);
+ System.out.println("Client received "+bc.getLength() + " bytes in
"+(System.currentTimeMillis()-start)+" ms.");
+ assertEquals(EXPECTED_CONTENT_LENGTH * (i+1), bc.getLength());
+
+ bc.recycle();
+ }
+ }
+
+ public File generateFile(String dir, int size) throws IOException {
+ String name = "testSendFile-"+System.currentTimeMillis()+".txt";
+ File f = new File(dir,name);
+ FileWriter fw = new FileWriter(f, false);
+ BufferedWriter w = new BufferedWriter(fw);
+ int defSize = 8192;
+ while (size > 0) {
+ int bytes = Math.min(size, defSize);
+ char[] b = new char[bytes];
+ Arrays.fill(b, 'X');
+ w.write(b);
+ size = size - bytes;
+ }
+ w.flush();
+ w.close();
+ return f;
+
+ }
+
+
+ private static class WritingServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ private final File f;
+
+ public WritingServlet(File f) {
+ this.f = f;
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+
+
+
+ resp.setContentType("'application/octet-stream");
+ resp.setCharacterEncoding("ISO-8859-1");
+ resp.setContentLengthLong(f.length());
+ if (req.getAttribute(Globals.SENDFILE_SUPPORTED_ATTR) ==
Boolean.TRUE) {
+ req.setAttribute(Globals.SENDFILE_FILENAME_ATTR,
f.getAbsolutePath());
+ req.setAttribute(Globals.SENDFILE_FILE_START_ATTR, new
Long(0));
+ req.setAttribute(Globals.SENDFILE_FILE_END_ATTR, new
Long(f.length()));
+ } else {
+ byte[] c = new byte[8192];
+ BufferedInputStream in = new BufferedInputStream(new
FileInputStream(f));
+ int len = 0;
+ int written = 0;
+ long start = System.currentTimeMillis();
+ do {
+ len = in.read(c);
+ if (len>0) {
+ resp.getOutputStream().write(c,0,len);
+ written += len;
+ }
+ } while (len > 0);
+ System.out.println("Server Wrote "+written + " bytes in
"+(System.currentTimeMillis()-start)+" ms.");
+ }
+
+ }
+ }
+
+}
Propchange: tomcat/trunk/test/org/apache/catalina/connector/TestSendFile.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]