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.message;
29
30 import java.nio.charset.StandardCharsets;
31 import java.util.Collections;
32 import java.util.LinkedHashSet;
33 import java.util.Set;
34
35 import org.apache.hc.core5.http.Header;
36 import org.apache.hc.core5.http.HttpEntity;
37 import org.apache.hc.core5.http.HttpHeaders;
38 import org.apache.hc.core5.http.HttpMessage;
39 import org.apache.hc.core5.http.io.entity.HttpEntities;
40 import org.apache.hc.core5.util.CharArrayBuffer;
41 import org.junit.Assert;
42 import org.junit.Test;
43
44 public class TestMessageSupport {
45
46 private static Set<String> makeSet(final String... tokens) {
47 if (tokens == null) {
48 return null;
49 }
50 final Set<String> set = new LinkedHashSet<>();
51 Collections.addAll(set, tokens);
52 return set;
53 }
54
55 @Test
56 public void testTokenSetFormatting() throws Exception {
57 final Header header = MessageSupport.format(HttpHeaders.TRAILER, makeSet("z", "b", "a"));
58 Assert.assertNotNull(header);
59 Assert.assertEquals("z, b, a", header.getValue());
60 }
61
62 @Test
63 public void testTokenSetFormattingSameName() throws Exception {
64 final Header header = MessageSupport.format(HttpHeaders.TRAILER, makeSet("a", "a", "a"));
65 Assert.assertNotNull(header);
66 Assert.assertEquals("a", header.getValue());
67 }
68
69 @Test
70 public void testTokensFormattingSameName() throws Exception {
71 final Header header = MessageSupport.format(HttpHeaders.TRAILER, "a", "a", "a");
72 Assert.assertNotNull(header);
73 Assert.assertEquals("a, a, a", header.getValue());
74 }
75
76 @Test
77 public void testTrailerNoTrailers() throws Exception {
78 final Header header = MessageSupport.format(HttpHeaders.TRAILER);
79 Assert.assertNull(header);
80 }
81
82 @Test
83 public void testParseTokens() throws Exception {
84 final String s = "a, b, c, c";
85 final ParserCursor cursor = new ParserCursor(0, s.length());
86 Assert.assertEquals(makeSet("a", "b", "c"), MessageSupport.parseTokens(s, cursor));
87 }
88
89 @Test
90 public void testParseTokenHeader() throws Exception {
91 final Header header = new BasicHeader(HttpHeaders.TRAILER, "a, b, c, c");
92 Assert.assertEquals(makeSet("a", "b", "c"), MessageSupport.parseTokens(header));
93 }
94
95 @Test
96 public void testParseTokenBufferedHeader() throws Exception {
97 final CharArrayBuffer buf = new CharArrayBuffer(128);
98 buf.append("stuff: a, b, c, c");
99 final Header header = BufferedHeader.create(buf);
100 Assert.assertEquals(makeSet("a", "b", "c"), MessageSupport.parseTokens(header));
101 }
102
103 @Test
104 public void testAddContentHeaders() throws Exception {
105 final HttpEntity entity = HttpEntities.create("some stuff with trailers", StandardCharsets.US_ASCII,
106 new BasicHeader("z", "this"), new BasicHeader("b", "that"), new BasicHeader("a", "this and that"));
107 final HttpMessage message = new BasicHttpResponse(200);
108 MessageSupport.addTrailerHeader(message, entity);
109 MessageSupport.addContentTypeHeader(message, entity);
110
111 final Header h1 = message.getFirstHeader(HttpHeaders.TRAILER);
112 final Header h2 = message.getFirstHeader(HttpHeaders.CONTENT_TYPE);
113
114 Assert.assertNotNull(h1);
115 Assert.assertEquals("z, b, a", h1.getValue());
116 Assert.assertNotNull(h2);
117 Assert.assertEquals("text/plain; charset=US-ASCII", h2.getValue());
118 }
119
120 @Test
121 public void testContentHeadersAlreadyPresent() throws Exception {
122 final HttpEntity entity = HttpEntities.create("some stuff with trailers", StandardCharsets.US_ASCII,
123 new BasicHeader("z", "this"), new BasicHeader("b", "that"), new BasicHeader("a", "this and that"));
124 final HttpMessage message = new BasicHttpResponse(200);
125 message.addHeader(HttpHeaders.TRAILER, "a, a, a");
126 message.addHeader(HttpHeaders.CONTENT_TYPE, "text/plain; charset=ascii");
127
128 MessageSupport.addTrailerHeader(message, entity);
129 MessageSupport.addContentTypeHeader(message, entity);
130
131 final Header h1 = message.getFirstHeader(HttpHeaders.TRAILER);
132 final Header h2 = message.getFirstHeader(HttpHeaders.CONTENT_TYPE);
133
134 Assert.assertNotNull(h1);
135 Assert.assertEquals("a, a, a", h1.getValue());
136 Assert.assertNotNull(h2);
137 Assert.assertEquals("text/plain; charset=ascii", h2.getValue());
138 }
139
140 }