28
28
import java .util .Optional ;
29
29
import java .util .Set ;
30
30
import java .util .function .BiFunction ;
31
+ import java .util .function .Consumer ;
31
32
import java .util .stream .Stream ;
32
33
33
34
import io .micrometer .observation .tck .TestObservationRegistry ;
79
80
@ SuppressWarnings ("JUnitMalformedDeclaration" )
80
81
class RestClientAdapterTests {
81
82
82
- private final MockWebServer anotherServer = anotherServer ();
83
+ private final MockWebServer anotherServer = new MockWebServer ();
83
84
84
85
85
- @ SuppressWarnings ("ConstantValue" )
86
86
@ AfterEach
87
87
void shutdown () throws IOException {
88
- if (this .anotherServer != null ) {
89
- this .anotherServer .shutdown ();
90
- }
88
+ this .anotherServer .shutdown ();
91
89
}
92
90
91
+
93
92
@ Retention (RetentionPolicy .RUNTIME )
94
93
@ Target (ElementType .METHOD )
95
94
@ ParameterizedTest
@@ -173,6 +172,9 @@ void greetingWithDynamicUri(MockWebServer server, Service service, TestObservati
173
172
174
173
@ Test
175
174
void greetingWithApiVersion () throws Exception {
175
+ prepareResponse (response ->
176
+ response .setHeader ("Content-Type" , "text/plain" ).setBody ("Hello Spring 2!" ));
177
+
176
178
RestClient restClient = RestClient .builder ()
177
179
.baseUrl (anotherServer .url ("/" ).toString ())
178
180
.apiVersionInserter (ApiVersionInserter .useHeader ("X-API-Version" ))
@@ -181,15 +183,18 @@ void greetingWithApiVersion() throws Exception {
181
183
RestClientAdapter adapter = RestClientAdapter .create (restClient );
182
184
Service service = HttpServiceProxyFactory .builderFor (adapter ).build ().createClient (Service .class );
183
185
184
- String response = service .getGreetingWithVersion ();
186
+ String actualResponse = service .getGreetingWithVersion ();
185
187
186
188
RecordedRequest request = anotherServer .takeRequest ();
187
189
assertThat (request .getHeader ("X-API-Version" )).isEqualTo ("1.2" );
188
- assertThat (response ).isEqualTo ("Hello Spring 2!" );
190
+ assertThat (actualResponse ).isEqualTo ("Hello Spring 2!" );
189
191
}
190
192
191
193
@ ParameterizedAdapterTest
192
194
void getWithUriBuilderFactory (MockWebServer server , Service service ) throws InterruptedException {
195
+ prepareResponse (response ->
196
+ response .setHeader ("Content-Type" , "text/plain" ).setBody ("Hello Spring 2!" ));
197
+
193
198
String url = this .anotherServer .url ("/" ).toString ();
194
199
UriBuilderFactory factory = new DefaultUriBuilderFactory (url );
195
200
@@ -205,6 +210,9 @@ void getWithUriBuilderFactory(MockWebServer server, Service service) throws Inte
205
210
206
211
@ ParameterizedAdapterTest
207
212
void getWithFactoryPathVariableAndRequestParam (MockWebServer server , Service service ) throws InterruptedException {
213
+ prepareResponse (response ->
214
+ response .setHeader ("Content-Type" , "text/plain" ).setBody ("Hello Spring 2!" ));
215
+
208
216
String url = this .anotherServer .url ("/" ).toString ();
209
217
UriBuilderFactory factory = new DefaultUriBuilderFactory (url );
210
218
@@ -220,6 +228,9 @@ void getWithFactoryPathVariableAndRequestParam(MockWebServer server, Service ser
220
228
221
229
@ ParameterizedAdapterTest
222
230
void getWithIgnoredUriBuilderFactory (MockWebServer server , Service service ) throws InterruptedException {
231
+ prepareResponse (response ->
232
+ response .setHeader ("Content-Type" , "text/plain" ).setBody ("Hello Spring 2!" ));
233
+
223
234
URI dynamicUri = server .url ("/greeting/123" ).uri ();
224
235
UriBuilderFactory factory = new DefaultUriBuilderFactory (this .anotherServer .url ("/" ).toString ());
225
236
@@ -306,6 +317,9 @@ void putWithSameNameCookies(MockWebServer server, Service service) throws Except
306
317
307
318
@ Test
308
319
void getInputStream () throws Exception {
320
+ prepareResponse (response ->
321
+ response .setHeader ("Content-Type" , "text/plain" ).setBody ("Hello Spring 2!" ));
322
+
309
323
InputStream inputStream = initService ().getInputStream ();
310
324
311
325
RecordedRequest request = this .anotherServer .takeRequest ();
@@ -315,6 +329,9 @@ void getInputStream() throws Exception {
315
329
316
330
@ Test
317
331
void postOutputStream () throws Exception {
332
+ prepareResponse (response ->
333
+ response .setHeader ("Content-Type" , "text/plain" ).setBody ("Hello Spring 2!" ));
334
+
318
335
String body = "test stream" ;
319
336
initService ().postOutputStream (outputStream -> outputStream .write (body .getBytes ()));
320
337
@@ -323,13 +340,23 @@ void postOutputStream() throws Exception {
323
340
assertThat (request .getBody ().readUtf8 ()).isEqualTo (body );
324
341
}
325
342
326
-
327
- private static MockWebServer anotherServer () {
328
- MockWebServer server = new MockWebServer ();
343
+ @ Test
344
+ void handleNotFoundException () {
329
345
MockResponse response = new MockResponse ();
330
- response .setHeader ("Content-Type" , "text/plain" ).setBody ("Hello Spring 2!" );
331
- server .enqueue (response );
332
- return server ;
346
+ response .setResponseCode (404 );
347
+ this .anotherServer .enqueue (response );
348
+
349
+ RestClientAdapter clientAdapter = RestClientAdapter .create (
350
+ RestClient .builder ().baseUrl (this .anotherServer .url ("/" ).toString ()).build ());
351
+
352
+ HttpServiceProxyFactory factory = HttpServiceProxyFactory .builderFor (clientAdapter )
353
+ .exchangeAdapterDecorator (NotFoundRestClientAdapterDecorator ::new )
354
+ .build ();
355
+
356
+ ResponseEntity <String > responseEntity = factory .createClient (Service .class ).getGreetingById ("1" );
357
+
358
+ assertThat (responseEntity .getStatusCode ()).isEqualTo (HttpStatus .NOT_FOUND );
359
+ assertThat (responseEntity .getBody ()).isNull ();
333
360
}
334
361
335
362
private Service initService () {
@@ -339,6 +366,12 @@ private Service initService() {
339
366
return HttpServiceProxyFactory .builderFor (adapter ).build ().createClient (Service .class );
340
367
}
341
368
369
+ private void prepareResponse (Consumer <MockResponse > consumer ) {
370
+ MockResponse response = new MockResponse ();
371
+ consumer .accept (response );
372
+ this .anotherServer .enqueue (response );
373
+ }
374
+
342
375
343
376
private interface Service {
344
377
0 commit comments