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.impl;
29
30 import org.apache.hc.core5.http.ContentLengthStrategy;
31 import org.apache.hc.core5.http.HttpMessage;
32 import org.apache.hc.core5.http.NotImplementedException;
33 import org.apache.hc.core5.http.ProtocolException;
34 import org.apache.hc.core5.http.ProtocolVersion;
35 import org.apache.hc.core5.http.message.BasicHeader;
36 import org.apache.hc.core5.http.message.HeaderGroup;
37 import org.junit.jupiter.api.Assertions;
38 import org.junit.jupiter.api.Test;
39
40 public class TestDefaultContentLengthStrategy {
41
42 static class TestHttpMessage extends HeaderGroup implements HttpMessage {
43
44 private static final long serialVersionUID = 1L;
45
46 @Override
47 public ProtocolVersion getVersion() {
48 return null;
49 }
50
51 @Override
52 public void addHeader(final String name, final Object value) {
53 addHeader(new BasicHeader(name, value));
54 }
55
56 @Override
57 public void setHeader(final String name, final Object value) {
58 setHeader(new BasicHeader(name, value));
59 }
60
61 @Override
62 public void setVersion(final ProtocolVersion version) {
63 }
64
65 }
66
67 @Test
68 public void testEntityWithChunkTransferEncoding() throws Exception {
69 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
70 final HttpMessage message = new TestHttpMessage();
71 message.addHeader("Transfer-Encoding", "Chunked");
72
73 Assertions.assertEquals(ContentLengthStrategy.CHUNKED, lenStrategy.determineLength(message));
74 }
75
76 @Test
77 public void testEntityWithChunkTransferEncodingAndEmptyTokens() throws Exception {
78 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
79 final HttpMessage message = new TestHttpMessage();
80 message.addHeader("Transfer-Encoding", ",,Chunked,,");
81
82 Assertions.assertEquals(ContentLengthStrategy.CHUNKED, lenStrategy.determineLength(message));
83 }
84
85 @Test
86 public void testEntityWithChunkTransferEncodingDoubleChunk() throws Exception {
87 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
88 final HttpMessage message = new TestHttpMessage();
89 message.addHeader("Transfer-Encoding", "Chunked,Chunked");
90 Assertions.assertThrows(NotImplementedException.class, () ->
91 lenStrategy.determineLength(message));
92 }
93
94 @Test
95 public void testEntityWithChunkTransferEncodingUnknown1() throws Exception {
96 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
97 final HttpMessage message = new TestHttpMessage();
98 message.addHeader("Transfer-Encoding", "blah");
99 Assertions.assertThrows(NotImplementedException.class, () ->
100 lenStrategy.determineLength(message));
101 }
102
103 @Test
104 public void testEntityWithChunkTransferEncodingUnknown2() throws Exception {
105 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
106 final HttpMessage message = new TestHttpMessage();
107 message.addHeader("Transfer-Encoding", "blah, chunked");
108 Assertions.assertThrows(NotImplementedException.class, () ->
109 lenStrategy.determineLength(message));
110 }
111
112 @Test
113 public void testEntityWithChunkTransferEncodingUnknown3() throws Exception {
114 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
115 final HttpMessage message = new TestHttpMessage();
116 message.addHeader("Transfer-Encoding", "chunked,blah");
117 Assertions.assertThrows(NotImplementedException.class, () ->
118 lenStrategy.determineLength(message));
119 }
120
121 @Test
122 public void testEntityWithIdentityTransferEncoding() throws Exception {
123 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
124 final HttpMessage message = new TestHttpMessage();
125 message.addHeader("Transfer-Encoding", "Identity");
126 Assertions.assertThrows(NotImplementedException.class, () ->
127 lenStrategy.determineLength(message));
128 }
129
130 @Test
131 public void testEntityWithContentLength() throws Exception {
132 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
133 final HttpMessage message = new TestHttpMessage();
134 message.addHeader("Content-Length", "100");
135 Assertions.assertEquals(100, lenStrategy.determineLength(message));
136 }
137
138 @Test
139 public void testEntityWithInvalidContentLength() throws Exception {
140 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
141 final HttpMessage message = new TestHttpMessage();
142 message.addHeader("Content-Length", "whatever");
143 Assertions.assertThrows(ProtocolException.class, () ->
144 lenStrategy.determineLength(message));
145 }
146
147 @Test
148 public void testEntityWithNegativeContentLength() throws Exception {
149 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
150 final HttpMessage message = new TestHttpMessage();
151 message.addHeader("Content-Length", "-10");
152 Assertions.assertThrows(ProtocolException.class, () ->
153 lenStrategy.determineLength(message));
154 }
155
156 @Test
157 public void testEntityNoContentDelimiter() throws Exception {
158 final ContentLengthStrategy lenStrategy = new DefaultContentLengthStrategy();
159 final HttpMessage message = new TestHttpMessage();
160 Assertions.assertEquals(ContentLengthStrategy.UNDEFINED, lenStrategy.determineLength(message));
161 }
162
163 }
164