You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2019/05/26 12:52:36 UTC
svn commit: r1860065 -
/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
Author: pmouawad
Date: Sun May 26 12:52:36 2019
New Revision: 1860065
URL: http://svn.apache.org/viewvc?rev=1860065&view=rev
Log:
Bug 62672 - HTTP Request send double requests when configure proxy with authentication
Fix NPE
Bugzilla Id: 62672
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1860065&r1=1860064&r2=1860065&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java Sun May 26 12:52:36 2019
@@ -180,7 +180,10 @@ public class HTTPHC4Impl extends HTTPHCA
static final String CONTEXT_ATTRIBUTE_SAMPLER_RESULT = "__jmeter.S_R__"; //$NON-NLS-1$
- private static final String CONTEXT_ATTRIBUTE_HTTPCLIENT_TOKEN = "__jmeter.H_T__";
+ /**
+ * Holds data used by HTTP request if Embedded resource download is enabled
+ */
+ private static final String CONTEXT_ATTRIBUTE_PARENT_SAMPLE_CLIENT_STATE = "__jmeter.H_T__";
private static final String CONTEXT_ATTRIBUTE_CLIENT_KEY = "__jmeter.C_K__";
@@ -548,13 +551,8 @@ public class HTTPHC4Impl extends HTTPHCA
HttpClientKey key = createHttpClientKey(url);
MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager> triple;
try {
- httpClient = setupClient(key, jMeterVariables, clientContext);
- // Cache triple for further use
- Map<HttpClientKey, MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager>>
- mapHttpClientPerHttpClientKey =
- HTTPCLIENTS_CACHE_PER_THREAD_AND_HTTPCLIENTKEY.get();
- triple =
- mapHttpClientPerHttpClientKey.get(key);
+ triple = setupClient(key, jMeterVariables, clientContext);
+ httpClient = triple.getLeft();
URI uri = url.toURI();
httpRequest = createHttpRequest(uri, method, areFollowingRedirect);
setupRequest(url, httpRequest, res); // can throw IOException
@@ -695,7 +693,7 @@ public class HTTPHC4Impl extends HTTPHCA
} finally {
JOrphanUtils.closeQuietly(httpResponse);
currentRequest = null;
- JMeterContextService.getContext().getSamplerContext().remove(CONTEXT_ATTRIBUTE_HTTPCLIENT_TOKEN);
+ JMeterContextService.getContext().getSamplerContext().remove(CONTEXT_ATTRIBUTE_PARENT_SAMPLE_CLIENT_STATE);
}
return res;
}
@@ -708,21 +706,19 @@ public class HTTPHC4Impl extends HTTPHCA
private void saveProxyAuth(
MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager> triple,
HttpContext localContext) {
- if (triple != null) {
- triple.setMiddle((AuthState) localContext.getAttribute(HttpClientContext.PROXY_AUTH_STATE));
- }
+ triple.setMiddle((AuthState) localContext.getAttribute(HttpClientContext.PROXY_AUTH_STATE));
}
/**
* Store in localContext Proxy auth state of triple
- * @param triple {@link MutableTriple}
+ * @param triple {@link MutableTriple} May be null if first request
* @param localContext {@link HttpContext}
*/
- private void setupProxyAuth(MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager> triple,
+ private void setupProxyAuthState(MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager> triple,
HttpContext localContext) {
if (triple != null) {
- AuthState proxy = triple.getMiddle();
- localContext.setAttribute(HttpClientContext.PROXY_AUTH_STATE, proxy);
+ AuthState proxyAuthState = triple.getMiddle();
+ localContext.setAttribute(HttpClientContext.PROXY_AUTH_STATE, proxyAuthState);
}
}
@@ -993,22 +989,27 @@ public class HTTPHC4Impl extends HTTPHCA
}
}
- private CloseableHttpClient setupClient(HttpClientKey key, JMeterVariables jMeterVariables,
+ private MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager> setupClient(HttpClientKey key, JMeterVariables jMeterVariables,
HttpClientContext clientContext) throws GeneralSecurityException {
Map<HttpClientKey, MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager>> mapHttpClientPerHttpClientKey =
HTTPCLIENTS_CACHE_PER_THREAD_AND_HTTPCLIENTKEY.get();
clientContext.setAttribute(CONTEXT_ATTRIBUTE_CLIENT_KEY, key);
CloseableHttpClient httpClient = null;
+ MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager> triple = null;
boolean concurrentDwn = this.testElement.isConcurrentDwn();
+ Map<String, Object> samplerContext = JMeterContextService.getContext().getSamplerContext();
if(concurrentDwn) {
- httpClient = (CloseableHttpClient) JMeterContextService.getContext().getSamplerContext().get(CONTEXT_ATTRIBUTE_HTTPCLIENT_TOKEN);
+ triple = (MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager>)
+ samplerContext.get(CONTEXT_ATTRIBUTE_PARENT_SAMPLE_CLIENT_STATE);
+ }
+ if (triple == null) {
+ triple = mapHttpClientPerHttpClientKey.get(key);
}
- MutableTriple<CloseableHttpClient, AuthState, PoolingHttpClientConnectionManager> triple =
- mapHttpClientPerHttpClientKey.get(key);
- if (httpClient == null) {
- httpClient = triple != null ? triple.getLeft() : null;
+
+ if(triple != null) {
+ httpClient = triple.getLeft();
}
- setupProxyAuth(triple, clientContext);
+ setupProxyAuthState(triple, clientContext);
resetStateIfNeeded(triple, jMeterVariables, clientContext, mapHttpClientPerHttpClientKey);
if (httpClient == null) { // One-time init for this client
@@ -1096,7 +1097,8 @@ public class HTTPHC4Impl extends HTTPHCA
if (log.isDebugEnabled()) {
log.debug("Created new HttpClient: @{} {}", Integer.valueOf(System.identityHashCode(httpClient)), key);
}
- mapHttpClientPerHttpClientKey.put(key, MutableTriple.of(httpClient, null, pHCCM)); // save the agent for next time round
+ triple = MutableTriple.of(httpClient, null, pHCCM);
+ mapHttpClientPerHttpClientKey.put(key, triple); // save the agent for next time round
} else {
if (log.isDebugEnabled()) {
log.debug("Reusing the HttpClient: @{} {}", Integer.valueOf(System.identityHashCode(httpClient)),key);
@@ -1104,9 +1106,9 @@ public class HTTPHC4Impl extends HTTPHCA
}
if(concurrentDwn) {
- JMeterContextService.getContext().getSamplerContext().put(CONTEXT_ATTRIBUTE_HTTPCLIENT_TOKEN, httpClient);
+ samplerContext.put(CONTEXT_ATTRIBUTE_PARENT_SAMPLE_CLIENT_STATE, triple);
}
- return httpClient;
+ return triple;
}
protected AuthenticationStrategy getProxyAuthStrategy() {