From 475e929e782d31923744c260532bfa60363bc1a0 Mon Sep 17 00:00:00 2001 From: Vladimir Sitnikov Date: Sat, 13 May 2023 23:01:45 +0300 Subject: [PATCH] Deprecate getHeaderManager and setHeaderManager in HTTPSamplerBase See https://github.com/apache/jmeter/pull/727 --- .../http/gui/action/ParseCurlCommandAction.java | 5 ++++- .../org/apache/jmeter/protocol/http/proxy/Proxy.java | 7 ++++++- .../jmeter/protocol/http/sampler/AjpSampler.java | 2 ++ .../protocol/http/sampler/HTTPAbstractImpl.java | 2 ++ .../jmeter/protocol/http/sampler/HTTPHC4Impl.java | 4 +++- .../jmeter/protocol/http/sampler/HTTPJavaImpl.java | 8 ++++++-- .../protocol/http/sampler/HTTPSamplerBase.java | 12 ++++++++++++ .../gui/action/ParseCurlCommandActionTest.java | 6 ++++-- .../protocol/http/sampler/TestDecompression.java | 7 ++++++- xdocs/changes.xml | 1 + 10 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/ParseCurlCommandAction.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/ParseCurlCommandAction.java index 966c3502af4..aa47f1b5324 100644 --- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/ParseCurlCommandAction.java +++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/ParseCurlCommandAction.java @@ -282,7 +282,9 @@ private void createTestPlan(ActionEvent e, Request request, String statusText) private HTTPSamplerProxy createHttpRequest(Request request, HashTree parentHT, String commentText) throws MalformedURLException { HTTPSamplerProxy httpSampler = createSampler(request,commentText); HashTree samplerHT = parentHT.add(httpSampler); - samplerHT.add(httpSampler.getHeaderManager()); + @SuppressWarnings("deprecation") + HeaderManager headerManager = httpSampler.getHeaderManager(); + samplerHT.add(headerManager); if (CERT.equals(request.getCaCert())) { samplerHT.add(httpSampler.getKeystoreConfig()); } @@ -763,6 +765,7 @@ private void addToTestPlan(final JMeterTreeNode currentNode, Request request,Str createCookieManager(cookieManager, request); } } + @SuppressWarnings("deprecation") HeaderManager headerManager = sampler.getHeaderManager(); KeystoreConfig keystoreConfig = sampler.getKeystoreConfig(); final JMeterTreeNode newNode = treeModel.addComponent(sampler, currentNode); diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/Proxy.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/Proxy.java index 84cc35ce7ad..6ac18d3f457 100644 --- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/Proxy.java +++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/Proxy.java @@ -241,7 +241,7 @@ public void run() { * captured and sent to the server */ headers = request.getHeaderManager(); - sampler.setHeaderManager(headers); + setHeaderManager(headers, sampler); sampler.threadStarted(); // Needed for HTTPSampler2 if (isDebug) { @@ -317,6 +317,11 @@ public void run() { } } + @SuppressWarnings("deprecation") + private static void setHeaderManager(HeaderManager headers, HTTPSamplerBase sampler) { + sampler.setHeaderManager(headers); + } + /** * Set the counter for all registered {@link SamplerCreatorFactory}s * diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/AjpSampler.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/AjpSampler.java index d705ae726cb..c3230542135 100644 --- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/AjpSampler.java +++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/AjpSampler.java @@ -201,6 +201,7 @@ private void setupConnection(URL url, } private int getHeaderSize(String method, URL url) { + @SuppressWarnings("deprecation") HeaderManager headers = getHeaderManager(); CookieManager cookies = getCookieManager(); AuthManager auth = getAuthManager(); @@ -231,6 +232,7 @@ private int getHeaderSize(String method, URL url) { private String setConnectionHeaders(URL url, String host, String method) throws IOException { + @SuppressWarnings("deprecation") HeaderManager headers = getHeaderManager(); AuthManager auth = getAuthManager(); StringBuilder hbuf = new StringBuilder(); diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java index 8323270f604..ee08e3edfcd 100644 --- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java +++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java @@ -193,7 +193,9 @@ protected CookieManager getCookieManager() { * Invokes {@link HTTPSamplerBase#getHeaderManager()} * * @return the {@link HeaderManager} of the associated test element + * @deprecated since 5.6 as it prevents sharing a common Header Manager across samplers */ + @Deprecated protected HeaderManager getHeaderManager() { return testElement.getHeaderManager(); } diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java index 8f7e624bd9a..b72de56ee61 100644 --- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java +++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java @@ -1304,7 +1304,9 @@ protected void setupRequest(URL url, HttpRequestBase httpRequest, HTTPSampleResu httpRequest.setHeader(HTTPConstants.HEADER_CONNECTION, HTTPConstants.CONNECTION_CLOSE); } - setConnectionHeaders(httpRequest, url, getHeaderManager(), getCacheManager()); + @SuppressWarnings("deprecation") + HeaderManager headerManager = getHeaderManager(); + setConnectionHeaders(httpRequest, url, headerManager, getCacheManager()); String cookies = setConnectionCookie(httpRequest, url, getCookieManager()); diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java index 22bb7a7e302..3e959b2d6e6 100644 --- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java +++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java @@ -191,7 +191,9 @@ protected HttpURLConnection setupConnection(URL u, String method, HTTPSampleResu } conn.setRequestMethod(method); - setConnectionHeaders(conn, u, getHeaderManager(), getCacheManager()); + @SuppressWarnings("deprecation") + HeaderManager headerManager = getHeaderManager(); + setConnectionHeaders(conn, u, headerManager, getCacheManager()); String cookies = setConnectionCookie(conn, u, getCookieManager()); Map securityHeaders = setConnectionAuthorization(conn, u, getAuthManager()); @@ -518,7 +520,9 @@ protected HTTPSampleResult sample(URL url, String method, boolean areFollowingRe // Check cache for an entry with an Expires header in the future final CacheManager cacheManager = getCacheManager(); if (cacheManager != null && HTTPConstants.GET.equalsIgnoreCase(method)) { - if (cacheManager.inCache(url, getHeaders(getHeaderManager()))) { + @SuppressWarnings("deprecation") + HeaderManager headerManager = getHeaderManager(); + if (cacheManager.inCache(url, getHeaders(headerManager))) { return updateSampleResultForResourceInCache(res); } } diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java index dae016f253d..866e505b0e9 100644 --- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java +++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java @@ -928,7 +928,14 @@ public AuthManager getAuthManager() { return (AuthManager) getProperty(AUTH_MANAGER).getObjectValue(); } + /** + * Sets HTTP Header Manager for this sampler. + * @deprecated since 5.6 as it prevents sharing a common Header Manager across samplers + * @param value header manager + */ + @Deprecated public void setHeaderManager(final HeaderManager value) { + @SuppressWarnings("deprecation") HeaderManager mgr = getHeaderManager(); HeaderManager lValue = value; if (mgr != null) { @@ -943,6 +950,11 @@ public void setHeaderManager(final HeaderManager value) { setProperty(new TestElementProperty(HEADER_MANAGER, lValue)); } + /** + * Retrieves HTTP Header Manager for this sampler. + * @deprecated since 5.6 as it prevents sharing a common Header Manager across samplers + */ + @Deprecated public HeaderManager getHeaderManager() { return (HeaderManager) getProperty(HEADER_MANAGER).getObjectValue(); } diff --git a/src/protocol/http/src/test/java/org/apache/jmeter/gui/action/ParseCurlCommandActionTest.java b/src/protocol/http/src/test/java/org/apache/jmeter/gui/action/ParseCurlCommandActionTest.java index 15b984c1832..b12c73abc06 100644 --- a/src/protocol/http/src/test/java/org/apache/jmeter/gui/action/ParseCurlCommandActionTest.java +++ b/src/protocol/http/src/test/java/org/apache/jmeter/gui/action/ParseCurlCommandActionTest.java @@ -251,8 +251,10 @@ public void testCreateSampler(@TempDir Path tempDir) throws Exception { assertEquals("www.example.com", httpSampler.getDomain()); assertEquals("/12345?param1=value1¶m2=value2", httpSampler.getPath()); assertEquals("PUT", httpSampler.getMethod()); - assertEquals(new Header("accept", "*/*"), httpSampler.getHeaderManager().getHeader(0)); - assertEquals(new Header("X-XSRF-TOKEN", "1234"), httpSampler.getHeaderManager().getHeader(1)); + @SuppressWarnings("deprecation") + HeaderManager headerManager = httpSampler.getHeaderManager(); + assertEquals(new Header("accept", "*/*"), headerManager.getHeader(0)); + assertEquals(new Header("X-XSRF-TOKEN", "1234"), headerManager.getHeader(1)); } @Test diff --git a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/TestDecompression.java b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/TestDecompression.java index 24938c2ed9c..10673266009 100644 --- a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/TestDecompression.java +++ b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/TestDecompression.java @@ -74,7 +74,7 @@ public void mockServer(String httpImpl, ClientGzip clientGzip, ServerGzip server hm.add(new Header("Accept-Encoding", "gzip")); } hm.add(new Header("Content-Encoding", "utf-8")); - http.setHeaderManager(hm); + setHeaderManager(http, hm); MappingBuilder mappingBuilder = WireMock.get("/gzip"); if (clientGzip == ClientGzip.REQUESTED) { mappingBuilder = mappingBuilder.withHeader("Accept-Encoding", WireMock.equalTo("gzip")); @@ -108,6 +108,11 @@ public void mockServer(String httpImpl, ClientGzip clientGzip, ServerGzip server } } + @SuppressWarnings("deprecation") + private static void setHeaderManager(HTTPSamplerBase http, HeaderManager hm) { + http.setHeaderManager(hm); + } + private WireMockServer createServer(Consumer config) { WireMockConfiguration configuration = WireMockConfiguration diff --git a/xdocs/changes.xml b/xdocs/changes.xml index 449fa8f4818..9762d3d1347 100644 --- a/xdocs/changes.xml +++ b/xdocs/changes.xml @@ -75,6 +75,7 @@ Summary

HTTP Samplers and Test Script Recorder

  • 5911 Use Caffeine for caching HTTP headers instead of commons-collections4 LRUMap
  • +
  • 5917727 Deprecate HTTPSamplerBase#getHeaderManager and HTTPSamplerBase#setHeaderManager so HTTP Header Managers could be shared in the future

Other samplers