Blazemeter / jmeter-http2-plugin

HTTP2 plugin for Apache JMeter
Apache License 2.0
45 stars 27 forks source link

jmeter fails with java.lang.StackOverflowError when protocol is passed in sampler via variable #56

Closed antonkislinskiy closed 4 months ago

antonkislinskiy commented 11 months ago

test jmeter project test_http2.zip Jmeter 5.5, Java 11+

Passing protocol via variable e.g ${PROTOCOL} is causing infinite loop of redirects and java.lang.StackOverflowError image

Response body: java.lang.Exception: Error downloading URI:https://fonts.googleapis.com/css?family=Material+Icons at com.blazemeter.jmeter.http2.sampler.HTTP2Sampler$1.onComplete(HTTP2Sampler.java:541) at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:213) at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:205) at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:477) at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:457) at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:420) at org.eclipse.jetty.http2.client.http.HttpReceiverOverHTTP2.access$300(HttpReceiverOverHTTP2.java:46) at org.eclipse.jetty.http2.client.http.HttpReceiverOverHTTP2$ContentNotifier.process(HttpReceiverOverHTTP2.java:270) at org.eclipse.jetty.http2.client.http.HttpReceiverOverHTTP2.notifyContent(HttpReceiverOverHTTP2.java:225) at org.eclipse.jetty.http2.client.http.HttpReceiverOverHTTP2.onData(HttpReceiverOverHTTP2.java:193) at org.eclipse.jetty.http2.client.http.HttpChannelOverHTTP2$Listener.onDataDemanded(HttpChannelOverHTTP2.java:199) at org.eclipse.jetty.http2.HTTP2Stream.notifyDataDemanded(HTTP2Stream.java:831) at org.eclipse.jetty.http2.HTTP2Stream.processData(HTTP2Stream.java:540) at org.eclipse.jetty.http2.HTTP2Stream.onData(HTTP2Stream.java:499) at org.eclipse.jetty.http2.HTTP2Stream.process(HTTP2Stream.java:387) at org.eclipse.jetty.http2.HTTP2Session.onData(HTTP2Session.java:262) at org.eclipse.jetty.http2.HTTP2Connection$ParserListener.onData(HTTP2Connection.java:407) at org.eclipse.jetty.http2.parser.BodyParser.notifyData(BodyParser.java:103) at org.eclipse.jetty.http2.parser.DataBodyParser.onData(DataBodyParser.java:145) at org.eclipse.jetty.http2.parser.DataBodyParser.onData(DataBodyParser.java:140) at org.eclipse.jetty.http2.parser.DataBodyParser.parse(DataBodyParser.java:106) at org.eclipse.jetty.http2.parser.Parser.parseBody(Parser.java:193) at org.eclipse.jetty.http2.parser.Parser.parse(Parser.java:122) at org.eclipse.jetty.http2.HTTP2Connection$HTTP2Producer.produce(HTTP2Connection.java:278) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produceTask(AdaptiveExecutionStrategy.java:450) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:243) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:194) at org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:208) at org.eclipse.jetty.http2.HTTP2Connection.onFillable(HTTP2Connection.java:155) at org.eclipse.jetty.http2.HTTP2Connection$FillableCallback.succeeded(HTTP2Connection.java:378) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:558) at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:379) at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:146) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:416) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:385) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:272) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.lambda$new$0(AdaptiveExecutionStrategy.java:140) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.net.MalformedURLException: unknown protocol: ${protocol} at java.base/java.net.URL.(URL.java:452) at java.base/java.net.URL.(URL.java:338) at java.base/java.net.URL.(URL.java:361) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.getUrl(HTTPSamplerBase.java:1123) at com.blazemeter.jmeter.http2.sampler.HTTP2Sampler.buildConnectionKey(HTTP2Sampler.java:241) at com.blazemeter.jmeter.http2.sampler.HTTP2Sampler.getClient(HTTP2Sampler.java:247) at com.blazemeter.jmeter.http2.sampler.HTTP2Sampler.sampleFromListener(HTTP2Sampler.java:204) at com.blazemeter.jmeter.http2.sampler.HTTP2Sampler$1.onComplete(HTTP2Sampler.java:533) ... 44 more

jmeter.log 2023-07-27 21:33:34,382 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main] java.lang.StackOverflowError: null at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?] at javax.swing.tree.DefaultTreeModel.getPathToRoot(DefaultTreeModel.java:439) ~[?:?]

3dgiordano commented 11 months ago

Thank you @antonkislinskiy Thanks for providing an example test as well.

We will be solving it in a future version.

3dgiordano commented 8 months ago

Hi @antonkislinskiy

New version with fixes released. You can access it from the Releases section on GitHub. https://github.com/Blazemeter/jmeter-http2-plugin/releases/tag/v2.0.5

It will be available in Plugin Manager in the next 24 hours.

Could you tell us if this version resolves the issues reported?

antonkislinskiy commented 4 months ago

Hi @3dgiordano yes LGTM now. Thank you!