|
16 | 16 | package feign; |
17 | 17 |
|
18 | 18 | import com.google.common.base.Joiner; |
| 19 | +import com.google.common.io.ByteStreams; |
| 20 | +import com.google.common.io.CharStreams; |
19 | 21 | import com.google.mockwebserver.MockResponse; |
20 | 22 | import com.google.mockwebserver.MockWebServer; |
21 | 23 | import com.google.mockwebserver.RecordedRequest; |
|
47 | 49 | import java.util.concurrent.atomic.AtomicBoolean; |
48 | 50 |
|
49 | 51 | import static dagger.Provides.Type.SET; |
| 52 | +import static feign.Util.UTF_8; |
50 | 53 | import static org.testng.Assert.assertEquals; |
| 54 | +import static org.testng.Assert.assertNull; |
51 | 55 | import static org.testng.Assert.assertTrue; |
52 | 56 | import static org.testng.Assert.fail; |
53 | 57 |
|
@@ -80,6 +84,8 @@ void login( |
80 | 84 |
|
81 | 85 | @RequestLine("POST /") void body(List<String> contents); |
82 | 86 |
|
| 87 | + @RequestLine("POST /") @Headers("Content-Encoding: gzip") void gzipBody(List<String> contents); |
| 88 | + |
83 | 89 | @RequestLine("POST /") void form( |
84 | 90 | @Named("customer_name") String customer, @Named("user_name") String user, @Named("password") String password); |
85 | 91 |
|
@@ -310,7 +316,30 @@ public void postBodyParam() throws IOException, InterruptedException { |
310 | 316 | TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), new TestInterface.Module()); |
311 | 317 |
|
312 | 318 | api.body(Arrays.asList("netflix", "denominator", "password")); |
313 | | - assertEquals(new String(server.takeRequest().getBody()), "[netflix, denominator, password]"); |
| 319 | + RecordedRequest request = server.takeRequest(); |
| 320 | + assertEquals(request.getHeader("Content-Length"), "32"); |
| 321 | + assertEquals(new String(request.getBody()), "[netflix, denominator, password]"); |
| 322 | + } finally { |
| 323 | + server.shutdown(); |
| 324 | + } |
| 325 | + } |
| 326 | + |
| 327 | + @Test |
| 328 | + public void postGZIPEncodedBodyParam() throws IOException, InterruptedException { |
| 329 | + final MockWebServer server = new MockWebServer(); |
| 330 | + server.enqueue(new MockResponse().setResponseCode(200).setBody("foo")); |
| 331 | + server.play(); |
| 332 | + |
| 333 | + try { |
| 334 | + TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), new TestInterface.Module()); |
| 335 | + |
| 336 | + api.gzipBody(Arrays.asList("netflix", "denominator", "password")); |
| 337 | + RecordedRequest request = server.takeRequest(); |
| 338 | + assertNull(request.getHeader("Content-Length")); |
| 339 | + byte[] compressedBody = request.getBody(); |
| 340 | + String uncompressedBody = CharStreams.toString(CharStreams.newReaderSupplier( |
| 341 | + GZIPStreams.newInputStreamSupplier(ByteStreams.newInputStreamSupplier(compressedBody)), UTF_8)); |
| 342 | + assertEquals(uncompressedBody, "[netflix, denominator, password]"); |
314 | 343 | } finally { |
315 | 344 | server.shutdown(); |
316 | 345 | } |
|
0 commit comments