1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.io.entity;
29
30 import java.io.ByteArrayInputStream;
31 import java.io.ByteArrayOutputStream;
32 import java.io.InputStream;
33 import java.nio.charset.StandardCharsets;
34
35 import org.apache.hc.core5.http.ContentType;
36 import org.junit.jupiter.api.Assertions;
37 import org.junit.jupiter.api.Test;
38
39
40
41
42
43 public class TestInputStreamEntity {
44
45 @Test
46 public void testBasics() throws Exception {
47 final byte[] bytes = "Message content".getBytes(StandardCharsets.ISO_8859_1);
48 final InputStreamEntity entity = new InputStreamEntity(new ByteArrayInputStream(bytes), bytes.length, null);
49
50 Assertions.assertEquals(bytes.length, entity.getContentLength());
51 Assertions.assertNotNull(entity.getContent());
52 Assertions.assertFalse(entity.isRepeatable());
53 Assertions.assertTrue(entity.isStreaming());
54 }
55
56 @Test
57 public void testNullConstructor() throws Exception {
58 Assertions.assertThrows(NullPointerException.class, () ->
59 new InputStreamEntity(null, 0, null));
60 }
61
62 @Test
63 public void testUnknownLengthConstructor() throws Exception {
64 final InputStreamEntity entity = new InputStreamEntity(EmptyInputStream.INSTANCE, null);
65 Assertions.assertEquals(-1, entity.getContentLength());
66 }
67
68 @Test
69 public void testWriteTo() throws Exception {
70 final String message = "Message content";
71 final byte[] bytes = message.getBytes(StandardCharsets.ISO_8859_1);
72 final InputStream inStream = new ByteArrayInputStream(bytes);
73 final InputStreamEntity entity = new InputStreamEntity(inStream, bytes.length,
74 ContentType.TEXT_PLAIN.withCharset(StandardCharsets.ISO_8859_1));
75
76 final ByteArrayOutputStream out = new ByteArrayOutputStream();
77 entity.writeTo(out);
78 final byte[] writtenBytes = out.toByteArray();
79 Assertions.assertNotNull(writtenBytes);
80 Assertions.assertEquals(bytes.length, writtenBytes.length);
81
82 final String s = new String(writtenBytes, StandardCharsets.ISO_8859_1.name());
83 Assertions.assertEquals(message, s);
84 }
85
86 @Test
87 public void testWriteToPartialContent() throws Exception {
88 final String message = "Message content";
89 final byte[] bytes = message.getBytes(StandardCharsets.ISO_8859_1);
90 final InputStream inStream = new ByteArrayInputStream(bytes);
91 final int contentLength = 7;
92 final InputStreamEntity entity = new InputStreamEntity(inStream, contentLength,
93 ContentType.TEXT_PLAIN.withCharset(StandardCharsets.ISO_8859_1));
94
95 final ByteArrayOutputStream out = new ByteArrayOutputStream();
96 entity.writeTo(out);
97 final byte[] writtenBytes = out.toByteArray();
98 Assertions.assertNotNull(writtenBytes);
99 Assertions.assertEquals(contentLength, writtenBytes.length);
100
101 final String s = new String(writtenBytes, StandardCharsets.ISO_8859_1.name());
102 Assertions.assertEquals(message.substring(0, contentLength), s);
103 }
104
105 @Test
106 public void testWriteToUnknownLength() throws Exception {
107 final String message = "Message content";
108 final byte[] bytes = message.getBytes(StandardCharsets.ISO_8859_1);
109 final InputStreamEntity entity = new InputStreamEntity(new ByteArrayInputStream(bytes),
110 ContentType.TEXT_PLAIN.withCharset(StandardCharsets.ISO_8859_1));
111
112 final ByteArrayOutputStream out = new ByteArrayOutputStream();
113 entity.writeTo(out);
114 final byte[] writtenBytes = out.toByteArray();
115 Assertions.assertNotNull(writtenBytes);
116 Assertions.assertEquals(bytes.length, writtenBytes.length);
117
118 final String s = new String(writtenBytes, StandardCharsets.ISO_8859_1.name());
119 Assertions.assertEquals(message, s);
120 }
121
122 @Test
123 public void testWriteToNull() throws Exception {
124 final InputStreamEntity entity = new InputStreamEntity(EmptyInputStream.INSTANCE, 0, null);
125 Assertions.assertThrows(NullPointerException.class, () ->
126 entity.writeTo(null));
127 }
128 }