fix issue #1289 bug in zero length put

This commit is contained in:
adriancole 2013-02-01 15:09:31 -08:00
parent adf9cd5802
commit 865005afd9
5 changed files with 16 additions and 2 deletions

View File

@ -222,8 +222,10 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
} else { } else {
connection.setRequestProperty(CONTENT_LENGTH, "0"); connection.setRequestProperty(CONTENT_LENGTH, "0");
// for some reason POST/PUT undoes the content length header above. // for some reason POST/PUT undoes the content length header above.
if (ImmutableSet.of("POST", "PUT").contains(connection.getRequestMethod())) if (ImmutableSet.of("POST", "PUT").contains(connection.getRequestMethod())) {
connection.setFixedLengthStreamingMode(0); connection.setFixedLengthStreamingMode(0);
connection.setDoOutput(true);
}
} }
return connection; return connection;
} }

View File

@ -262,4 +262,9 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base
public void testGetAndParseSax() { public void testGetAndParseSax() {
assertEquals(client.downloadAndParse(""), "whoppers"); assertEquals(client.downloadAndParse(""), "whoppers");
} }
@Test(invocationCount = 5, timeOut = 5000)
public void testZeroLengthPut() {
client.putNothing("");
}
} }

View File

@ -127,7 +127,7 @@ public abstract class BaseJettyTest {
response.setStatus(SC_OK); response.setStatus(SC_OK);
response.getWriter().println(toStringAndClose(request.getInputStream()) + "PUT"); response.getWriter().println(toStringAndClose(request.getInputStream()) + "PUT");
} else { } else {
response.sendError(500, "no content"); response.setStatus(SC_OK);
} }
} else if (request.getMethod().equals("POST")) { } else if (request.getMethod().equals("POST")) {
// don't redirect large objects // don't redirect large objects

View File

@ -58,6 +58,7 @@ import com.google.inject.Provides;
/** /**
* Sample test for the behaviour of our Integration Test jetty server. * Sample test for the behaviour of our Integration Test jetty server.
* *
* @see IntegrationTestClient
* @author Adrian Cole * @author Adrian Cole
*/ */
public interface IntegrationTestAsyncClient { public interface IntegrationTestAsyncClient {
@ -196,6 +197,10 @@ public interface IntegrationTestAsyncClient {
} }
@PUT
@Path("/objects/{id}")
ListenableFuture<Void> putNothing(@PathParam("id") String id);
@Provides @Provides
StringBuilder newStringBuilder(); StringBuilder newStringBuilder();

View File

@ -60,6 +60,8 @@ public interface IntegrationTestClient {
String downloadAndParse(String id); String downloadAndParse(String id);
void putNothing(String id);
@Provides @Provides
StringBuilder newStringBuilder(); StringBuilder newStringBuilder();
} }