1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.rest.client;
18
19 import static org.apache.juneau.TestUtils.*;
20 import static org.apache.juneau.http.HttpEntities.*;
21 import static org.apache.juneau.http.HttpHeaders.*;
22 import static org.apache.juneau.http.HttpResources.*;
23
24 import java.io.*;
25
26 import org.apache.http.*;
27 import org.apache.juneau.*;
28 import org.apache.juneau.json.*;
29 import org.apache.juneau.rest.annotation.*;
30 import org.apache.juneau.rest.httppart.*;
31 import org.apache.juneau.rest.mock.*;
32 import org.apache.juneau.rest.servlet.*;
33 import org.apache.juneau.testutils.pojos.*;
34 import org.junit.jupiter.api.*;
35
36 class RestClient_Body_Test extends TestBase {
37
38 @Rest
39 public static class A extends BasicRestObject {
40 @RestPost
41 public Reader post(org.apache.juneau.rest.RestRequest req, org.apache.juneau.rest.RestResponse res) throws IOException {
42 for (RequestHeader e : req.getHeaders())
43 res.addHeader("X-" + e.getName(), e.getValue());
44 return req.getReader();
45 }
46 }
47
48
49
50
51
52 @Test void a01_BasicHttpResource() throws Exception {
53 var x1 = stringResource("foo");
54 client().build().post("/", x1).run()
55 .assertHeader("X-Content-Length").asInteger().is(3)
56 .assertHeader("X-Content-Encoding").isNull()
57 .assertHeader("X-Content-Type").isNull()
58 .assertHeader("X-Transfer-Encoding").isNull()
59 ;
60
61 var x2 = stringResource("foo").setContentType("text/plain").setContentEncoding("identity");
62 client().build().post("/",x2).run()
63 .assertHeader("X-Content-Length").asInteger().is(3)
64 .assertHeader("X-Content-Encoding").is("identity")
65 .assertHeader("X-Content-Type").is("text/plain")
66 .assertHeader("X-Transfer-Encoding").isNull()
67 ;
68
69 var x3 = stringResource("foo").setContentType(contentType("text/plain")).setContentEncoding(contentEncoding("identity")).setChunked();
70 client().build().post("/",x3).run()
71 .assertHeader("X-Content-Length").isNull()
72 .assertHeader("X-Content-Encoding").is("identity")
73 .assertHeader("X-Content-Type").is("text/plain")
74 .assertHeader("X-Transfer-Encoding").is("chunked")
75 ;
76
77 var x4 = stringResource("foo", contentType("text/plain")).setContentEncoding("identity");
78 client().build().post("/",x4).run()
79 .assertHeader("X-Content-Length").asInteger().is(3)
80 .assertHeader("X-Content-Encoding").is("identity")
81 .assertHeader("X-Content-Type").is("text/plain")
82 .assertHeader("X-Transfer-Encoding").isNull()
83 ;
84
85 var x5 = stringResource("foo").setHeader("Foo","bar").setHeaders(header("Baz","qux"));
86 client().build().post("/",x5).run()
87 .assertHeader("X-Foo").is("bar")
88 .assertHeader("X-Baz").is("qux")
89 ;
90
91 var x6 = stringResource("foo").addHeaders(header("Foo","bar"),header("Baz","qux"));
92 client().build().post("/",x6).run()
93 .assertHeader("X-Foo").is("bar")
94 .assertHeader("X-Baz").is("qux")
95 ;
96
97 var x7 = readerResource(reader("foo"));
98 client().build().post("/",x7).run().assertContent("foo");
99
100 var x8 = readerResource(reader("foo")).setCached();
101 client().build().post("/",x8).run().assertContent("foo");
102 client().build().post("/",x8).run().assertContent("foo");
103 }
104
105 @Test void a02_StringEntity() throws Exception {
106 var x1 = stringEntity("foo");
107 client().build().post("/", x1).run()
108 .assertHeader("X-Content-Length").asInteger().is(3)
109 .assertHeader("X-Content-Encoding").isNull()
110 .assertHeader("X-Content-Type").isNull()
111 .assertHeader("X-Transfer-Encoding").isNull()
112 ;
113
114 var x2 = stringEntity("foo").setContentType("text/plain").setContentEncoding("identity");
115 client().build().post("/",x2).run()
116 .assertHeader("X-Content-Length").asInteger().is(3)
117 .assertHeader("X-Content-Encoding").is("identity")
118 .assertHeader("X-Content-Type").is("text/plain")
119 .assertHeader("X-Transfer-Encoding").isNull()
120 ;
121
122 var x3 = stringEntity("foo").setContentType(contentType("text/plain")).setContentEncoding(contentEncoding("identity")).setChunked();
123 client().build().post("/",x3).run()
124 .assertHeader("X-Content-Length").isNull()
125 .assertHeader("X-Content-Encoding").is("identity")
126 .assertHeader("X-Content-Type").is("text/plain")
127 .assertHeader("X-Transfer-Encoding").is("chunked")
128 ;
129
130 var x4 = stringEntity("foo", contentType("text/plain")).setContentEncoding("identity");
131 client().build().post("/",x4).run()
132 .assertHeader("X-Content-Length").asInteger().is(3)
133 .assertHeader("X-Content-Encoding").is("identity")
134 .assertHeader("X-Content-Type").is("text/plain")
135 .assertHeader("X-Transfer-Encoding").isNull()
136 ;
137
138 var x7 = readerEntity(reader("foo"));
139 client().build().post("/",x7).run().assertContent("foo");
140
141 var x8 = readerEntity(reader("foo")).setCached();
142 client().build().post("/",x8).run().assertContent("foo");
143 client().build().post("/",x8).run().assertContent("foo");
144
145 var x12 = stringEntity("foo");
146 x12.assertString().is("foo");
147 x12.assertBytes().asString().is("foo");
148 }
149
150 @Test void a03_SerializedHttpEntity() throws Exception {
151 var js = JsonSerializer.DEFAULT;
152
153 var x1 = serializedEntity(ABean.get(),null,null);
154 client().build().post("/",x1).run()
155 .assertHeader("X-Content-Length").isNull()
156 .assertHeader("X-Content-Encoding").isNull()
157 .assertHeader("X-Content-Type").is("application/json5")
158 .assertHeader("X-Transfer-Encoding").is("chunked")
159 ;
160
161 var x2 = serializedEntity(ABean.get(),js,null);
162 client().build().post("/",x2).run()
163 .assertHeader("X-Content-Length").isNull()
164 .assertHeader("X-Content-Encoding").isNull()
165 .assertHeader("X-Content-Type").is("application/json")
166 .assertContent().as(ABean.class).asJson().is("{a:1,b:'foo'}");
167
168 var x3 = serializedEntity(ABean::get,js,null);
169 client().build().post("/",x3).run()
170 .assertHeader("X-Content-Length").isNull()
171 .assertHeader("X-Content-Encoding").isNull()
172 .assertHeader("X-Content-Type").is("application/json")
173 .assertContent().as(ABean.class).asJson().is("{a:1,b:'foo'}");
174 }
175
176
177
178
179
180 private static RestClient.Builder client() {
181 return MockRestClient.create(A.class).json5();
182 }
183
184 private static Header header(String name, Object val) {
185 return basicHeader(name, val);
186 }
187 }