https://issues.apache.org/bugzilla/show_bug.cgi?id=57579
Bug ID: 57579
Summary: NullPointerException error is raised on main sample if
"RETURN_NO_SAMPLE" is used (default) and "Use
Cache-Control / Expires header..." is checked in HTTP
Cache Manager
Product: JMeter
Version: 2.12
Hardware: Macintosh
Status: NEW
Severity: normal
Priority: P2
Component: HTTP
Assignee: [email protected]
Reporter: [email protected]
Created attachment 32467
--> https://issues.apache.org/bugzilla/attachment.cgi?id=32467&action=edit
Error instead of no sample showing
Hi,
I was trying to write a simple test script for our site and found interesting
issue. I think it's a bug the new feature of not recording samples for
HTTP-cached responses
(https://issues.apache.org/bugzilla/show_bug.cgi?id=54778).
Steps to reproduce:
(1) Create test with 1 HTTP Sampler request for an URL which returns Expires &
Cache-Control headers in HTTP response, like:
Response headers:
HTTP/1.1 200 OK
Date: Thu, 12 Feb 2015 22:09:52 GMT
...
Vary: Accept-Encoding
Expires: Sun, 09 Feb 2025 22:09:52 GMT
Cache-Control: max-age=315360000, public
ETag: "c7109969:dtagent7888VJDk:dtagent7888kDJV"
Last-Modified: Wed, 30 Oct 2013 17:05:39 GMT
Content-Type: text/css
Content-Length: 320
Connection: close
(2) Add "HTTP Cache Manager" element, check "Use Cache-Control / Expires header
when processing GET requests"
(3) Run the test with 1 thread, with 10 iterations (Loop count = 10).
Result:
First run executes HTTP request, server returns 200 + caching headers. Second
request (and any subsequent) fails with Error in the JMeter. This was taken
from element "View Results Tree":
"Sampler result" tab:
Thread Name: Liferay Authenticated Users Browsing 1-1
Sample Start: 1969-12-31 18:00:00 CST
Load time: 0
Latency: 0
Size in bytes: 413
Headers size in bytes: 0
Body size in bytes: 413
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: java.lang.NullPointerException
Response message: Non HTTP response message: null
Response headers:
HTTPSampleResult fields:
ContentType:
DataEncoding: null
"Request" tab:
null
"Response data" tab:
java.lang.NullPointerException
at
org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1142)
at
org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1130)
at
org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:431)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:258)
at java.lang.Thread.run(Thread.java:745)
Expected:
No error is shown, no sample is recorded.
Workaround:
If you change the behavior of JMeter cache manager using this property:
cache_manager.cached_resource_mode=RETURN_200_CACHE
then script works without errors (samples with response time=0 are recorded as
expected).
Details:
Seems like issue 54778 causes this, I debugged through the code and if the main
sample URL is found in the JMeter cache:
org.apache.jmeter.protocol.http.sampler.HTTPAbstractImpl.updateSampleResultForResourceInCache():365
...
protected HTTPSampleResult
updateSampleResultForResourceInCache(HTTPSampleResult res) {
switch (CACHED_RESOURCE_MODE) {
case RETURN_NO_SAMPLE:
return null; // line 365
case RETURN_200_CACHE:
...
null is returned as the HTTPSampleResult. But then JMeter tries to set the
label on this result:
org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample():1142
...
public SampleResult sample() {
SampleResult res = null;
try {
res = sample(getUrl(), getMethod(), false, 0);
res.setSampleLabel(getName()); // line 1142
return res;
} catch (Exception e) {
return errorResult(e, new HTTPSampleResult());
}
}
...
This fails for NPE.
Note that if the same HTTP response headers are set on a HTTP request which is
a sub-sample (for example originating from "Retrieve All Embedded Resource"),
this works fine -- no error is shown, no sample is recorded.
I'm using OS X 10.10.2 which is not in the list of OSes.
--
You are receiving this mail because:
You are the assignee for the bug.