On 27 February 2017 at 07:57, <[email protected]> wrote: > Author: pmouawad > Date: Mon Feb 27 07:57:43 2017 > New Revision: 1784506 > > URL: http://svn.apache.org/viewvc?rev=1784506&view=rev > Log: > Bug 60778 - Http Java Impl does not show Authorization header in SampleResult > even if it is sent > Bugzilla Id: 60778 > > Modified: > jmeter/trunk/build.xml > > jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java > jmeter/trunk/xdocs/changes.xml > > Modified: jmeter/trunk/build.xml > URL: > http://svn.apache.org/viewvc/jmeter/trunk/build.xml?rev=1784506&r1=1784505&r2=1784506&view=diff > ============================================================================== > --- jmeter/trunk/build.xml (original) > +++ jmeter/trunk/build.xml Mon Feb 27 07:57:43 2017 > @@ -2739,6 +2739,13 @@ run JMeter unless all the JMeter jars ar > <param name="batchtest.jmx" value="Http4ImplPreemptiveBasicAuth.jmx"/> > </antcall> > > + <antcall target="batchtest"> > + <param name="batchtest.name" value="Http4ImplPreemptiveBasicAuth"/> > + <param name="batchtest.jmx" value="Http4ImplPreemptiveBasicAuth.jmx"/> > + <param name="batchtest.variable" value="jmeter.httpsampler"/> > + <param name="batchtest.value" value="Java"/> > + </antcall> > + > <antcall target="batchtest"> > <param name="batchtest.name" value="TestKeepAlive"/> > <param name="batchtest.jmx" value="TestKeepAlive.jmx"/> > > Modified: > jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java > URL: > http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java?rev=1784506&r1=1784505&r2=1784506&view=diff > ============================================================================== > --- > jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java > (original) > +++ > jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java > Mon Feb 27 07:57:43 2017 > @@ -26,6 +26,7 @@ import java.net.InetSocketAddress; > import java.net.Proxy; > import java.net.URL; > import java.net.URLConnection; > +import java.util.HashMap; > import java.util.List; > import java.util.Map; > import java.util.zip.GZIPInputStream; > @@ -63,7 +64,6 @@ public class HTTPJavaImpl extends HTTPAb > > static { > log.info("Maximum connection retries = {}", MAX_CONN_RETRIES); // > $NON-NLS-1$ > - // Temporary copies, so can set the final ones > } > > private static final byte[] NULL_BA = new byte[0];// can share these > @@ -183,6 +183,9 @@ public class HTTPJavaImpl extends HTTPAb > // with the last request to an HTTP server. Instead, most browsers > // leave it to the server to close the connection after their > // timeout period. Leave it to the JMeter user to decide. > + // Ensure System property "" is set to true to allow headers
Missing property name > + // such as "Host" and "Connection" to be passed through. > + // See http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6996110 > if (getUseKeepAlive()) { > conn.setRequestProperty(HTTPConstants.HEADER_CONNECTION, > HTTPConstants.KEEP_ALIVE); > } else { > @@ -193,7 +196,7 @@ public class HTTPJavaImpl extends HTTPAb > setConnectionHeaders(conn, u, getHeaderManager(), getCacheManager()); > String cookies = setConnectionCookie(conn, u, getCookieManager()); > > - setConnectionAuthorization(conn, u, getAuthManager()); > + Map<String, String> securityHeaders = > setConnectionAuthorization(conn, u, getAuthManager()); > > if (method.equals(HTTPConstants.POST)) { > setPostHeaders(conn); > @@ -202,7 +205,7 @@ public class HTTPJavaImpl extends HTTPAb > } > > if (res != null) { > - res.setRequestHeaders(getConnectionHeaders(conn)); > + res.setRequestHeaders(getConnectionHeaders(conn, > securityHeaders)); > res.setCookies(cookies); > } > > @@ -383,9 +386,10 @@ public class HTTPJavaImpl extends HTTPAb > * @param conn > * <code>HttpUrlConnection</code> which represents the URL > * request > + * @param securityHeaders Map of security Header or null > * @return the headers as a string > */ > - private String getConnectionHeaders(HttpURLConnection conn) { > + private String getConnectionHeaders(HttpURLConnection conn, Map<String, > String> securityHeaders) { > // Get all the request properties, which are the headers set on the > connection > StringBuilder hdrs = new StringBuilder(100); > Map<String, List<String>> requestHeaders = > conn.getRequestProperties(); > @@ -402,6 +406,14 @@ public class HTTPJavaImpl extends HTTPAb > } > } > } > + if(securityHeaders != null) { > + for(Map.Entry<String, String> entry : > securityHeaders.entrySet()) { > + hdrs.append(entry.getKey()) > + .append(": ") // $NON-NLS-1$ > + .append(entry.getValue()) > + .append("\n"); // $NON-NLS-1$ > + } > + } > return hdrs.toString(); > } > > @@ -417,14 +429,20 @@ public class HTTPJavaImpl extends HTTPAb > * @param authManager > * the <code>AuthManager</code> containing all the cookies for > * this <code>UrlConfig</code> > + * @return String Authorization header value or null if not set > */ > - private void setConnectionAuthorization(HttpURLConnection conn, URL u, > AuthManager authManager) { > + private Map<String, String> setConnectionAuthorization(HttpURLConnection > conn, URL u, AuthManager authManager) { > if (authManager != null) { > Authorization auth = authManager.getAuthForURL(u); > if (auth != null) { > - conn.setRequestProperty(HTTPConstants.HEADER_AUTHORIZATION, > auth.toBasicHeader()); > + String headerValue = auth.toBasicHeader(); > + conn.setRequestProperty(HTTPConstants.HEADER_AUTHORIZATION, > headerValue); > + Map<String, String> map = new HashMap<>(1); > + map.put(HTTPConstants.HEADER_AUTHORIZATION, headerValue); > + return map; > } > } > + return null; It'a almost always better to return an empty array or collection instead of null. Simplifies the code as callers don't need to check for null. > } > > /** > > Modified: jmeter/trunk/xdocs/changes.xml > URL: > http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1784506&r1=1784505&r2=1784506&view=diff > ============================================================================== > --- jmeter/trunk/xdocs/changes.xml [utf-8] (original) > +++ jmeter/trunk/xdocs/changes.xml [utf-8] Mon Feb 27 07:57:43 2017 > @@ -243,6 +243,7 @@ JMeter now requires Java 8. Ensure you u > <li><bug>60690</bug>Default values for > "httpclient4.validate_after_inactivity" and "httpclient4.time_to_live" which > are equal to each other makes validation useless</li> > <li><bug>60758</bug>HTTP(s) Test Script Recorder : Number request may > generate duplicate numbers. Contributed by Ubik Load Pack (support at > ubikloadpack.com)</li> > <li><bug>56939</bug>Parameters are not passed with OPTIONS HTTP > Request</li> > + <li><bug>60778</bug>Http Java Impl does not show Authorization header in > SampleResult even if it is sent</li> > </ul> > > <h3>Other Samplers</h3> > >
