1 package com.atlassian.httpclient.apache.httpcomponents;
2
3 import com.atlassian.httpclient.api.EntityBuilder;
4 import com.google.common.io.CharStreams;
5 import org.apache.http.HttpEntity;
6 import org.apache.http.entity.ContentType;
7 import org.apache.http.entity.mime.HttpMultipartMode;
8 import org.apache.http.entity.mime.MultipartEntityBuilder;
9 import org.hamcrest.core.StringContains;
10 import org.hamcrest.core.StringStartsWith;
11 import org.junit.Assert;
12 import org.junit.Test;
13
14 import java.io.File;
15 import java.io.IOException;
16 import java.io.InputStreamReader;
17 import java.net.URISyntaxException;
18 import java.util.Map;
19
20 public class MultiPartEntityBuilderTest {
21
22 @Test
23 public void testBuildMultipartEntity() throws IOException, URISyntaxException {
24 final File file = new File(getClass().getResource("/com/atlassian/httpclient/apache/httpcomponents/multipart-test-file").toURI());
25 HttpEntity multipartEntity = MultipartEntityBuilder.create()
26 .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
27 .addBinaryBody("file", file, ContentType.APPLICATION_OCTET_STREAM, file.getName())
28 .build();
29
30 final MultiPartEntityBuilder builder = new MultiPartEntityBuilder(multipartEntity);
31 final EntityBuilder.Entity entity = builder.build();
32
33 final Map<String, String> headers = entity.getHeaders();
34 Assert.assertTrue(headers.containsKey("Content-Type"));
35 Assert.assertThat(headers.get("Content-Type"), new StringStartsWith("multipart/form-data"));
36 Assert.assertThat(headers.get("Content-Type"), new StringContains("boundary="));
37
38 final String multiPartContent = CharStreams.toString(new InputStreamReader(entity.getInputStream()));
39 Assert.assertThat(multiPartContent, new StringContains("This is a file which tests multipart entity builder."));
40 Assert.assertThat(multiPartContent, new StringContains("application/octet-stream"));
41 Assert.assertThat(multiPartContent, new StringContains("Content-Disposition: form-data; name=\"file\"; filename=\"multipart-test-file\""));
42 }
43 }