View Javadoc

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  }