@Test(singleThreaded = true)
public class SequentialMultipartUploadStrategyMockTest {
@Test
public void testMPUDoesMultipart() throws IOException, InterruptedException {
MockWebServer server = new MockWebServer();
server.enqueue(new MockResponse().setResponseCode(200).setBody("<UploadId>upload-id</UploadId>"));
server.enqueue(new MockResponse().setResponseCode(200).addHeader("ETag", "a00"));
server.enqueue(new MockResponse().setResponseCode(200).addHeader("ETag", "b00"));
server.enqueue(new MockResponse().setResponseCode(200).setBody("<ETag>fff</ETag>"));
server.play();
byte[] bytes = "0123456789abcdef".getBytes(Charsets.US_ASCII);
int partSize = bytes.length / 2;
SequentialMultipartUploadStrategy api = mockSequentialMultipartUploadStrategy(server.getUrl("/").toString(),
partSize);
try {
assertEquals(api.execute("container", new BlobBuilderImpl().name("foo").payload(bytes)
.contentDisposition("inline; filename=foo.mp4")
.contentType(MediaType.MP4_VIDEO.toString())
.build()), "fff");
} finally {
RecordedRequest initiate = server.takeRequest();
assertEquals(initiate.getRequestLine(), "POST /container/foo?uploads HTTP/1.1");
assertEquals(initiate.getHeader("Content-Length"), "0");
assertEquals(initiate.getHeader(HttpHeaders.CONTENT_TYPE), MediaType.MP4_VIDEO.toString());
assertEquals(initiate.getHeader(HttpHeaders.CONTENT_DISPOSITION), "inline; filename=foo.mp4");
RecordedRequest part1 = server.takeRequest();
assertEquals(part1.getRequestLine(), "PUT /container/foo?partNumber=1&uploadId=upload-id HTTP/1.1");
assertEquals(part1.getHeader("Content-Length"), String.valueOf(partSize));
assertEquals(new String(part1.getBody()), "01234567");
RecordedRequest part2 = server.takeRequest();
assertEquals(part2.getRequestLine(), "PUT /container/foo?partNumber=2&uploadId=upload-id HTTP/1.1");
assertEquals(part2.getHeader("Content-Length"), String.valueOf(partSize));
assertEquals(new String(part2.getBody()), "89abcdef");
RecordedRequest manifest = server.takeRequest();
assertEquals(manifest.getRequestLine(), "POST /container/foo?uploadId=upload-id HTTP/1.1");
assertEquals(manifest.getHeader("Content-Length"), "161");
assertEquals(
new String(manifest.getBody()),
"<CompleteMultipartUpload><Part><PartNumber>1</PartNumber><ETag>a00</ETag></Part><Part><PartNumber>2</PartNumber><ETag>b00</ETag></Part></CompleteMultipartUpload>");
server.shutdown();
}
}