mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Merge pull request #34833 from chinmoy12c
* gh-34833: Polish "Add content buffering support to MockServerRestTemplateCustomizer" Add content buffering support to MockServerRestTemplateCustomizer Closes gh-34833
This commit is contained in:
commit
a37a7228b8
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2022 the original author or authors.
|
* Copyright 2012-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -24,7 +24,9 @@ import java.util.function.Supplier;
|
|||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||||
import org.springframework.boot.web.client.RestTemplateCustomizer;
|
import org.springframework.boot.web.client.RestTemplateCustomizer;
|
||||||
|
import org.springframework.http.client.BufferingClientHttpRequestFactory;
|
||||||
import org.springframework.test.web.client.MockRestServiceServer;
|
import org.springframework.test.web.client.MockRestServiceServer;
|
||||||
|
import org.springframework.test.web.client.MockRestServiceServer.MockRestServiceServerBuilder;
|
||||||
import org.springframework.test.web.client.RequestExpectationManager;
|
import org.springframework.test.web.client.RequestExpectationManager;
|
||||||
import org.springframework.test.web.client.SimpleRequestExpectationManager;
|
import org.springframework.test.web.client.SimpleRequestExpectationManager;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
@ -49,6 +51,7 @@ import org.springframework.web.client.RestTemplate;
|
|||||||
*
|
*
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
* @author Moritz Halbritter
|
* @author Moritz Halbritter
|
||||||
|
* @author Chinmoy Chakraborty
|
||||||
* @since 1.4.0
|
* @since 1.4.0
|
||||||
* @see #getServer()
|
* @see #getServer()
|
||||||
* @see #getServer(RestTemplate)
|
* @see #getServer(RestTemplate)
|
||||||
@ -63,6 +66,8 @@ public class MockServerRestTemplateCustomizer implements RestTemplateCustomizer
|
|||||||
|
|
||||||
private boolean detectRootUri = true;
|
private boolean detectRootUri = true;
|
||||||
|
|
||||||
|
private boolean bufferContent = false;
|
||||||
|
|
||||||
public MockServerRestTemplateCustomizer() {
|
public MockServerRestTemplateCustomizer() {
|
||||||
this(SimpleRequestExpectationManager::new);
|
this(SimpleRequestExpectationManager::new);
|
||||||
}
|
}
|
||||||
@ -96,13 +101,28 @@ public class MockServerRestTemplateCustomizer implements RestTemplateCustomizer
|
|||||||
this.detectRootUri = detectRootUri;
|
this.detectRootUri = detectRootUri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set if the {@link BufferingClientHttpRequestFactory} wrapper should be used to
|
||||||
|
* buffer the input and output streams, and for example, allow multiple reads of the
|
||||||
|
* response body.
|
||||||
|
* @param bufferContent if request and response content should be buffered
|
||||||
|
* @since 3.1.0
|
||||||
|
*/
|
||||||
|
public void setBufferContent(boolean bufferContent) {
|
||||||
|
this.bufferContent = bufferContent;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void customize(RestTemplate restTemplate) {
|
public void customize(RestTemplate restTemplate) {
|
||||||
RequestExpectationManager expectationManager = createExpectationManager();
|
RequestExpectationManager expectationManager = createExpectationManager();
|
||||||
if (this.detectRootUri) {
|
if (this.detectRootUri) {
|
||||||
expectationManager = RootUriRequestExpectationManager.forRestTemplate(restTemplate, expectationManager);
|
expectationManager = RootUriRequestExpectationManager.forRestTemplate(restTemplate, expectationManager);
|
||||||
}
|
}
|
||||||
MockRestServiceServer server = MockRestServiceServer.bindTo(restTemplate).build(expectationManager);
|
MockRestServiceServerBuilder serverBuilder = MockRestServiceServer.bindTo(restTemplate);
|
||||||
|
if (this.bufferContent) {
|
||||||
|
serverBuilder.bufferContent();
|
||||||
|
}
|
||||||
|
MockRestServiceServer server = serverBuilder.build(expectationManager);
|
||||||
this.expectationManagers.put(restTemplate, expectationManager);
|
this.expectationManagers.put(restTemplate, expectationManager);
|
||||||
this.servers.put(restTemplate, server);
|
this.servers.put(restTemplate, server);
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,8 @@ import org.junit.jupiter.api.BeforeEach;
|
|||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||||
|
import org.springframework.http.client.BufferingClientHttpRequestFactory;
|
||||||
|
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||||
import org.springframework.test.web.client.RequestExpectationManager;
|
import org.springframework.test.web.client.RequestExpectationManager;
|
||||||
import org.springframework.test.web.client.SimpleRequestExpectationManager;
|
import org.springframework.test.web.client.SimpleRequestExpectationManager;
|
||||||
import org.springframework.test.web.client.UnorderedRequestExpectationManager;
|
import org.springframework.test.web.client.UnorderedRequestExpectationManager;
|
||||||
@ -104,7 +106,23 @@ class MockServerRestTemplateCustomizerTests {
|
|||||||
this.customizer.customize(new RestTemplateBuilder().rootUri("https://example.com").build());
|
this.customizer.customize(new RestTemplateBuilder().rootUri("https://example.com").build());
|
||||||
assertThat(this.customizer.getServer()).extracting("expectationManager")
|
assertThat(this.customizer.getServer()).extracting("expectationManager")
|
||||||
.isInstanceOf(SimpleRequestExpectationManager.class);
|
.isInstanceOf(SimpleRequestExpectationManager.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void bufferContentShouldDefaultToFalse() {
|
||||||
|
MockServerRestTemplateCustomizer customizer = new MockServerRestTemplateCustomizer();
|
||||||
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
customizer.customize(restTemplate);
|
||||||
|
assertThat(restTemplate.getRequestFactory()).isInstanceOf(ClientHttpRequestFactory.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void setBufferContentShouldEnableContentBuffering() {
|
||||||
|
MockServerRestTemplateCustomizer customizer = new MockServerRestTemplateCustomizer();
|
||||||
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
customizer.setBufferContent(true);
|
||||||
|
customizer.customize(restTemplate);
|
||||||
|
assertThat(restTemplate.getRequestFactory()).isInstanceOf(BufferingClientHttpRequestFactory.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
Reference in New Issue
Block a user