mirror of https://github.com/apache/jclouds.git
added tests for content-disposition, first step
This commit is contained in:
parent
3d4d1301e0
commit
5d8f3bdb37
|
@ -70,7 +70,8 @@ public interface S3Client {
|
||||||
* <p />
|
* <p />
|
||||||
* This command allows you to specify {@link GetObjectOptions} to control delivery of content.
|
* This command allows you to specify {@link GetObjectOptions} to control delivery of content.
|
||||||
*
|
*
|
||||||
* <h2>Note</h2 If you specify any of the below options, you will receive partial content:
|
* <h2>Note</h2>
|
||||||
|
* If you specify any of the below options, you will receive partial content:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>{@link GetObjectOptions#range}</li>
|
* <li>{@link GetObjectOptions#range}</li>
|
||||||
* <li>{@link GetObjectOptions#startAt}</li>
|
* <li>{@link GetObjectOptions#startAt}</li>
|
||||||
|
|
|
@ -510,6 +510,9 @@ public class HttpUtils {
|
||||||
} else if (CONTENT_TYPE.equalsIgnoreCase(header.getKey())) {
|
} else if (CONTENT_TYPE.equalsIgnoreCase(header.getKey())) {
|
||||||
if (payload != null)
|
if (payload != null)
|
||||||
payload.setContentType(header.getValue());
|
payload.setContentType(header.getValue());
|
||||||
|
} else if ("Content-Disposition".equalsIgnoreCase(header.getKey())) {
|
||||||
|
if (payload != null)
|
||||||
|
payload.setContentDisposition(header.getValue());
|
||||||
} else {
|
} else {
|
||||||
message.getHeaders().put(header.getKey(), header.getValue());
|
message.getHeaders().put(header.getKey(), header.getValue());
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,6 +204,8 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
|
||||||
connection.setRequestProperty("Content-MD5", CryptoStreams.base64(request.getPayload().getContentMD5()));
|
connection.setRequestProperty("Content-MD5", CryptoStreams.base64(request.getPayload().getContentMD5()));
|
||||||
if (request.getPayload().getContentType() != null)
|
if (request.getPayload().getContentType() != null)
|
||||||
connection.setRequestProperty(HttpHeaders.CONTENT_TYPE, request.getPayload().getContentType());
|
connection.setRequestProperty(HttpHeaders.CONTENT_TYPE, request.getPayload().getContentType());
|
||||||
|
if (request.getPayload().getContentDisposition() != null)
|
||||||
|
connection.setRequestProperty("Content-Disposition", request.getPayload().getContentDisposition());
|
||||||
if (chunked) {
|
if (chunked) {
|
||||||
connection.setChunkedStreamingMode(8196);
|
connection.setChunkedStreamingMode(8196);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -227,6 +227,11 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base
|
||||||
assertEquals(client.postJson("", "foo").trim(), "{\"key\":\"foo\"}POST");
|
assertEquals(client.postJson("", "foo").trim(), "{\"key\":\"foo\"}POST");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPostContentDisposition() throws MalformedURLException, ExecutionException, InterruptedException,
|
||||||
|
TimeoutException {
|
||||||
|
assertEquals(client.postWithContentDisposition("", "attachment; filename=photo.jpg", "foo").trim(), "content-disposition:photo.jpg");
|
||||||
|
}
|
||||||
|
|
||||||
@Test(invocationCount = 5, timeOut = 5000)
|
@Test(invocationCount = 5, timeOut = 5000)
|
||||||
public void testPut() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException {
|
public void testPut() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException {
|
||||||
assertEquals(client.upload("", "foo").trim(), "fooPUT");
|
assertEquals(client.upload("", "foo").trim(), "fooPUT");
|
||||||
|
|
|
@ -132,6 +132,15 @@ public abstract class BaseJettyTest {
|
||||||
response.setStatus(HttpServletResponse.SC_OK);
|
response.setStatus(HttpServletResponse.SC_OK);
|
||||||
response.getWriter().println("created");
|
response.getWriter().println("created");
|
||||||
}
|
}
|
||||||
|
//TODO: insert here additional header detection
|
||||||
|
} else if (request.getHeader("Content-Disposition") != null) {
|
||||||
|
//get the filename
|
||||||
|
String content = request.getHeader("Content-Disposition");
|
||||||
|
int pos = content.lastIndexOf("=");
|
||||||
|
String fileName = pos > 0 ? content.substring(pos + 1) : "";
|
||||||
|
response.setContentType("text/xml");
|
||||||
|
response.setStatus(HttpServletResponse.SC_OK);
|
||||||
|
response.getWriter().println("content-disposition:" + fileName);
|
||||||
} else {
|
} else {
|
||||||
response.setStatus(HttpServletResponse.SC_OK);
|
response.setStatus(HttpServletResponse.SC_OK);
|
||||||
response.getWriter().println(toStringAndClose(request.getInputStream()) + "POST");
|
response.getWriter().println(toStringAndClose(request.getInputStream()) + "POST");
|
||||||
|
|
|
@ -133,6 +133,11 @@ public interface IntegrationTestAsyncClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("/objects/{id}")
|
||||||
|
String postWithContentDisposition(@PathParam("id") String id, @HeaderParam("Content-Disposition") String contentDisposition,
|
||||||
|
@BinderParam(BindToStringPayload.class) String toPut);
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("/objects/{id}")
|
@Path("/objects/{id}")
|
||||||
@MapBinder(BindToJsonPayload.class)
|
@MapBinder(BindToJsonPayload.class)
|
||||||
|
|
|
@ -53,6 +53,8 @@ public interface IntegrationTestClient {
|
||||||
|
|
||||||
String postWithMd5(String id, String base64MD5, File file);
|
String postWithMd5(String id, String base64MD5, File file);
|
||||||
|
|
||||||
|
String postWithContentDisposition(String id, String contentDisposition, String toPut);
|
||||||
|
|
||||||
String postJson(String id, String toPut);
|
String postJson(String id, String toPut);
|
||||||
|
|
||||||
String action(String id, String action, Map<String, String> options);
|
String action(String id, String action, Map<String, String> options);
|
||||||
|
|
|
@ -107,6 +107,7 @@ public abstract class BaseRestClientTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//FIXME Shouldn't be assertPayloadHeadersEqual?
|
||||||
protected void assertNonPayloadHeadersEqual(HttpRequest request, String toMatch) {
|
protected void assertNonPayloadHeadersEqual(HttpRequest request, String toMatch) {
|
||||||
assertEquals(sortAndConcatHeadersIntoString(request.getHeaders()), toMatch);
|
assertEquals(sortAndConcatHeadersIntoString(request.getHeaders()), toMatch);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1494,6 +1494,16 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
||||||
assertPayloadEquals(request, "whoops", "application/unknown", false);
|
assertPayloadEquals(request, "whoops", "application/unknown", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPutPayloadContentDisposition() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = TestTransformers.class.getMethod("put", Payload.class);
|
||||||
|
Payload payload = newStringPayload("whoops");
|
||||||
|
payload.setContentDisposition("attachment; filename=photo.jpg");
|
||||||
|
HttpRequest request = factory(TestQuery.class).createRequest(method, payload);
|
||||||
|
assertRequestLineEquals(request, "PUT http://localhost:9999?x-ms-version=2009-07-17 HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(request, "Content-Disposition: attachment; filename=photo.jpg");
|
||||||
|
assertPayloadEquals(request, "whoops", "application/unknown", false);
|
||||||
|
}
|
||||||
|
|
||||||
public void testPutPayloadWithGeneratedMD5AndNoContentType() throws SecurityException, NoSuchMethodException,
|
public void testPutPayloadWithGeneratedMD5AndNoContentType() throws SecurityException, NoSuchMethodException,
|
||||||
IOException {
|
IOException {
|
||||||
Payload payload = newStringPayload("whoops");
|
Payload payload = newStringPayload("whoops");
|
||||||
|
|
Loading…
Reference in New Issue