Bug 55255 - Allow Body in HTTP DELETE method to support API that use it (like ElasticSearch)

Bugzilla Id: 55255

git-svn-id: https://svn.apache.org/repos/asf/jmeter/trunk@1503047 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Philippe Mouawad 2013-07-14 20:17:21 +00:00
parent 98411ed353
commit 78f927f9c5
4 changed files with 29 additions and 7 deletions

View File

@ -219,14 +219,19 @@ public class HTTPHC3Impl extends HTTPHCAbstractImpl {
} else if (method.equals(HTTPConstants.OPTIONS)){ } else if (method.equals(HTTPConstants.OPTIONS)){
httpMethod = new OptionsMethod(urlStr); httpMethod = new OptionsMethod(urlStr);
} else if (method.equals(HTTPConstants.DELETE)){ } else if (method.equals(HTTPConstants.DELETE)){
httpMethod = new DeleteMethod(urlStr); httpMethod = new EntityEnclosingMethod(urlStr) {
@Override
public String getName() { // HC3.1 does not have the method
return HTTPConstants.DELETE;
}
};
} else if (method.equals(HTTPConstants.GET)){ } else if (method.equals(HTTPConstants.GET)){
httpMethod = new GetMethod(urlStr); httpMethod = new GetMethod(urlStr);
} else if (method.equals(HTTPConstants.PATCH)){ } else if (method.equals(HTTPConstants.PATCH)){
httpMethod = new EntityEnclosingMethod(urlStr) { httpMethod = new EntityEnclosingMethod(urlStr) {
@Override @Override
public String getName() { // HC3.1 does not have the method public String getName() { // HC3.1 does not have the method
return "PATCH"; return HTTPConstants.PATCH;
} }
}; };
} else { } else {
@ -254,7 +259,8 @@ public class HTTPHC3Impl extends HTTPHCAbstractImpl {
if (method.equals(HTTPConstants.POST)) { if (method.equals(HTTPConstants.POST)) {
String postBody = sendPostData((PostMethod)httpMethod); String postBody = sendPostData((PostMethod)httpMethod);
res.setQueryString(postBody); res.setQueryString(postBody);
} else if (method.equals(HTTPConstants.PUT) || method.equals(HTTPConstants.PATCH)) { } else if (method.equals(HTTPConstants.PUT) || method.equals(HTTPConstants.PATCH)
|| method.equals(HTTPConstants.DELETE)) {
String putBody = sendEntityData((EntityEnclosingMethod) httpMethod); String putBody = sendEntityData((EntityEnclosingMethod) httpMethod);
res.setQueryString(putBody); res.setQueryString(putBody);
} }
@ -959,7 +965,7 @@ public class HTTPHC3Impl extends HTTPHCAbstractImpl {
} }
/** /**
* Set up the PUT/PATCH data * Set up the PUT/PATCH/DELETE data
*/ */
private String sendEntityData(EntityEnclosingMethod put) throws IOException { private String sendEntityData(EntityEnclosingMethod put) throws IOException {
// Buffer to hold the put body, except file content // Buffer to hold the put body, except file content

View File

@ -55,7 +55,6 @@ import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient; import org.apache.http.client.HttpClient;
import org.apache.http.client.HttpRequestRetryHandler; import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpHead; import org.apache.http.client.methods.HttpHead;
@ -220,6 +219,19 @@ public class HTTPHC4Impl extends HTTPHCAbstractImpl {
super(testElement); super(testElement);
} }
public static final class HttpDelete extends HttpEntityEnclosingRequestBase {
public HttpDelete(final URI uri) {
super();
setURI(uri);
}
@Override
public String getMethod() {
return HTTPConstants.DELETE;
}
}
@Override @Override
protected HTTPSampleResult sample(URL url, String method, protected HTTPSampleResult sample(URL url, String method,
boolean areFollowingRedirect, int frameDepth) { boolean areFollowingRedirect, int frameDepth) {
@ -380,7 +392,8 @@ public class HTTPHC4Impl extends HTTPHCAbstractImpl {
if (method.equals(HTTPConstants.POST)) { if (method.equals(HTTPConstants.POST)) {
String postBody = sendPostData((HttpPost)httpRequest); String postBody = sendPostData((HttpPost)httpRequest);
result.setQueryString(postBody); result.setQueryString(postBody);
} else if (method.equals(HTTPConstants.PUT) || method.equals(HTTPConstants.PATCH)) { } else if (method.equals(HTTPConstants.PUT) || method.equals(HTTPConstants.PATCH)
|| method.equals(HTTPConstants.DELETE)) {
String entityBody = sendEntityData(( HttpEntityEnclosingRequestBase)httpRequest); String entityBody = sendEntityData(( HttpEntityEnclosingRequestBase)httpRequest);
result.setQueryString(entityBody); result.setQueryString(entityBody);
} }

View File

@ -135,7 +135,9 @@ public class HTTPSampleResult extends SampleResult {
sb.append(u.toString()); sb.append(u.toString());
sb.append("\n"); sb.append("\n");
// Include request body if it is a post or put or patch // Include request body if it is a post or put or patch
if (HTTPConstants.POST.equals(method) || HTTPConstants.PUT.equals(method) || HTTPConstants.PATCH.equals(method)) { if (HTTPConstants.POST.equals(method) || HTTPConstants.PUT.equals(method)
|| HTTPConstants.PATCH.equals(method)
|| HTTPConstants.DELETE.equals(method)) {
sb.append("\n"+method+" data:\n"); sb.append("\n"+method+" data:\n");
sb.append(queryString); sb.append(queryString);
sb.append("\n"); sb.append("\n");

View File

@ -238,6 +238,7 @@ Transaction Controller now sets Response Code of Generated Parent Sampler (if Ge
<h3>HTTP Samplers</h3> <h3>HTTP Samplers</h3>
<ul> <ul>
<li>HTTP Request: Small user interaction improvements in Row parameter Detail Box</li> <li>HTTP Request: Small user interaction improvements in Row parameter Detail Box</li>
<li><bugzilla>55255</bugzilla> - Allow Body in HTTP DELETE method to support API that use it (like ElasticSearch)</li>
</ul> </ul>
<h3>Other samplers</h3> <h3>Other samplers</h3>