Author: sebb
Date: Tue Apr  7 17:54:16 2009
New Revision: 762874

URL: http://svn.apache.org/viewvc?rev=762874&view=rev
Log:
Bug 46977 -  JMeter does not handle HTTP headers not delimited by whitespace

Modified:
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
    
jakarta/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/proxy/TestHttpRequestHdr.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java?rev=762874&r1=762873&r2=762874&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
 Tue Apr  7 17:54:16 2009
@@ -218,16 +218,12 @@
      * If name = "content-length", then return value as int, else return 0
      */
     private int parseLine(String nextLine) {
-        StringTokenizer tz;
-        tz = new StringTokenizer(nextLine);
-        String token = getToken(tz);
-        // look for termination of HTTP command
-        if (0 == token.length()) {
-            return 0;
-        }
-        String trimmed = token.trim();
-        String name = trimmed.substring(0, trimmed.length() - 1);// drop ':'
-        String value = getRemainder(tz);
+        int colon = nextLine.indexOf(':');
+        if (colon <= 0){
+            return 0; // Nothing to do
+        }
+        String name = nextLine.substring(0, colon).trim();
+        String value = nextLine.substring(colon+1).trim();
         headers.put(name.toLowerCase(java.util.Locale.ENGLISH), new 
Header(name, value));
         if (name.equalsIgnoreCase(CONTENT_LENGTH)) {
             return Integer.parseInt(value);

Modified: 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/proxy/TestHttpRequestHdr.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/proxy/TestHttpRequestHdr.java?rev=762874&r1=762873&r2=762874&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/proxy/TestHttpRequestHdr.java
 (original)
+++ 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/proxy/TestHttpRequestHdr.java
 Tue Apr  7 17:54:16 2009
@@ -20,6 +20,7 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Collections;
 import java.util.HashMap;
@@ -27,6 +28,8 @@
 
 import org.apache.jmeter.config.Arguments;
 import org.apache.jmeter.junit.JMeterTestCase;
+import org.apache.jmeter.protocol.http.control.Header;
+import org.apache.jmeter.protocol.http.control.HeaderManager;
 import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
 import org.apache.jmeter.protocol.http.util.HTTPArgument;
 
@@ -443,6 +446,34 @@
         checkArgument((HTTPArgument)arguments.getArgument(1), "description", 
descriptionValue, descriptionValue, contentEncoding, false);
     }
 
+    public void testParse1() throws Exception {// no space after :
+        HttpRequestHdr req = new HttpRequestHdr();
+        ByteArrayInputStream bis = null;
+        bis = new ByteArrayInputStream("GET xxx HTTP/1.0\r\nname:value 
\r\n".getBytes("ISO-8859-1"));
+        req.parse(bis);
+        bis.close();
+        HeaderManager mgr = req.getHeaderManager();
+        Header header;
+        mgr.getHeaders();
+        header = mgr.getHeader(0);
+        assertEquals("name",header.getName());
+        assertEquals("value",header.getValue());
+    }
+
+    public void testParse2() throws Exception {// spaces after :
+        HttpRequestHdr req = new HttpRequestHdr();
+        ByteArrayInputStream bis = null;
+        bis = new ByteArrayInputStream("GET xxx HTTP/1.0\r\nname:           
value \r\n".getBytes("ISO-8859-1"));
+        req.parse(bis);
+        bis.close();
+        HeaderManager mgr = req.getHeaderManager();
+        Header header;
+        mgr.getHeaders();
+        header = mgr.getHeader(0);
+        assertEquals("name",header.getName());
+        assertEquals("value",header.getValue());
+    }
+
     public void testPostMultipartFileUpload() throws Exception {
         String url = "http://localhost/matrix.html";;
         // A HTTP POST request, multipart/form-data, simple values,

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=762874&r1=762873&r2=762874&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Tue Apr  7 17:54:16 2009
@@ -198,6 +198,7 @@
 JMeter now removes extraneous leading "../" segments (as do many browsers)
 </li>
 <li>Bug 46844 -  "Library" label in test plan are not I18N</li>
+<li>Bug 46977 -  JMeter does not handle HTTP headers not delimited by 
whitespace</li>
 </ul>
 
 <h3>Improvements</h3>
@@ -235,6 +236,7 @@
 <li>Added locales.add property to allow for new Locales</li>
 <li>Bug 40045 - Allow Results monitor to select a specific connector</li>
 <li>Bug 46636 - rmi ports</li>
+<li>Mirror server now supports "X-Sleep" header - if this is set, the 
responding thread will wait for the specified number of milliseconds</li>
 </ul>
 
 <h3>Non-functional changes</h3>



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscr...@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-h...@jakarta.apache.org

Reply via email to