From 476b9bd76543da7d470aac0f34260c9919c54da9 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 14 Oct 2022 14:53:25 +0800 Subject: [PATCH 01/10] Improve AadRestTemplateCreator#createOAuth2ErrorResponseHandledRestTemplate: Use builder instead of setErrorHandler. --- .../aad/implementation/AadRestTemplateCreator.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java index 6cf836892cba..0af7d0f061e4 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java @@ -27,9 +27,8 @@ public static RestTemplate createRestTemplate(RestTemplateBuilder builder) { } public static RestTemplate createOAuth2ErrorResponseHandledRestTemplate(RestTemplateBuilder builder) { - RestTemplate restTemplate = createRestTemplate(builder); - restTemplate.setErrorHandler(new OAuth2ErrorResponseErrorHandler()); - return restTemplate; + builder = builder.errorHandler(new OAuth2ErrorResponseErrorHandler()); + return createRestTemplate(builder); } public static RestTemplate createOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder builder) { From 4fe000e01e84ca3cbf1a1eca2818ee316a8fce38 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 14 Oct 2022 14:56:21 +0800 Subject: [PATCH 02/10] Fix error in current test: "expected" value should be the first parameter. --- .../aad/implementation/AadRestTemplateCreatorTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index 054a22267433..44323d9ef201 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -43,21 +43,21 @@ void testAadRestOperationConfiguration() { RestTemplate restTemplate = createRestTemplate(builder); ResponseErrorHandler handler = restTemplate.getErrorHandler(); - assertNotEquals(handler.getClass(), OAuth2ErrorResponseErrorHandler.class); + assertNotEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); List> converters = restTemplate.getMessageConverters(); assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); handler = restTemplate.getErrorHandler(); - assertEquals(handler.getClass(), OAuth2ErrorResponseErrorHandler.class); + assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); converters = restTemplate.getMessageConverters(); assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); restTemplate = createOAuth2AccessTokenResponseClientRestTemplate(builder); handler = restTemplate.getErrorHandler(); - assertEquals(handler.getClass(), OAuth2ErrorResponseErrorHandler.class); + assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); converters = restTemplate.getMessageConverters(); assertTrue(hasItemOfClass(converters, FormHttpMessageConverter.class)); assertTrue(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); From 151602db78f527b65ff2ffcbc5f4d365290aaaf1 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 14 Oct 2022 15:12:18 +0800 Subject: [PATCH 03/10] Improve AadRestTemplateCreatorTest: split method to make code easier to read. --- .../AadRestTemplateCreatorTest.java | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index 44323d9ef201..5e6f52ac5be1 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -40,30 +40,39 @@ void testAadRestOperationConfiguration() { .withUserConfiguration(RestTemplateAutoConfiguration.class) .run((context) -> { RestTemplateBuilder builder = context.getBean(RestTemplateBuilder.class); - - RestTemplate restTemplate = createRestTemplate(builder); - ResponseErrorHandler handler = restTemplate.getErrorHandler(); - assertNotEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); - List> converters = restTemplate.getMessageConverters(); - assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); - - restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); - handler = restTemplate.getErrorHandler(); - assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); - converters = restTemplate.getMessageConverters(); - assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); - - restTemplate = createOAuth2AccessTokenResponseClientRestTemplate(builder); - handler = restTemplate.getErrorHandler(); - assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); - converters = restTemplate.getMessageConverters(); - assertTrue(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertTrue(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); + testCreateRestTemplate(builder); + testCreateOAuth2ErrorResponseHandledRestTemplate(builder); + testCreateOAuth2AccessTokenResponseClientRestTemplate(builder); }); } + void testCreateRestTemplate(RestTemplateBuilder builder) { + RestTemplate restTemplate = createRestTemplate(builder); + ResponseErrorHandler handler = restTemplate.getErrorHandler(); + assertNotEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); + List> converters = restTemplate.getMessageConverters(); + assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); + assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); + } + + void testCreateOAuth2ErrorResponseHandledRestTemplate(RestTemplateBuilder builder) { + RestTemplate restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); + ResponseErrorHandler handler = restTemplate.getErrorHandler(); + assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); + List> converters = restTemplate.getMessageConverters(); + assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); + assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); + } + + void testCreateOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder builder) { + RestTemplate restTemplate = createOAuth2AccessTokenResponseClientRestTemplate(builder); + ResponseErrorHandler handler = restTemplate.getErrorHandler(); + assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); + List> converters = restTemplate.getMessageConverters(); + assertTrue(hasItemOfClass(converters, FormHttpMessageConverter.class)); + assertTrue(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); + } + @Test void testRestOperationProxyConfiguration() { new ApplicationContextRunner() From 7c7b7809b7fce75adf1a64c65fe8ec76096efb54 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 14 Oct 2022 15:14:40 +0800 Subject: [PATCH 04/10] 1. Delete unnecessary asserts. 2. Delete unnecessary method. --- .../AadRestTemplateCreatorTest.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index 5e6f52ac5be1..7939e99a2cf5 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -24,11 +24,8 @@ import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2AccessTokenResponseClientRestTemplate; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2ErrorResponseHandledRestTemplate; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createRestTemplate; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreatorTest.RestTemplateProxyCustomizerConfiguration.FACTORY; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -40,28 +37,15 @@ void testAadRestOperationConfiguration() { .withUserConfiguration(RestTemplateAutoConfiguration.class) .run((context) -> { RestTemplateBuilder builder = context.getBean(RestTemplateBuilder.class); - testCreateRestTemplate(builder); testCreateOAuth2ErrorResponseHandledRestTemplate(builder); testCreateOAuth2AccessTokenResponseClientRestTemplate(builder); }); } - void testCreateRestTemplate(RestTemplateBuilder builder) { - RestTemplate restTemplate = createRestTemplate(builder); - ResponseErrorHandler handler = restTemplate.getErrorHandler(); - assertNotEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); - List> converters = restTemplate.getMessageConverters(); - assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); - } - void testCreateOAuth2ErrorResponseHandledRestTemplate(RestTemplateBuilder builder) { RestTemplate restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); ResponseErrorHandler handler = restTemplate.getErrorHandler(); assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); - List> converters = restTemplate.getMessageConverters(); - assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); } void testCreateOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder builder) { From 9b1eb0a7d4dc55c728f12b719f60a2c1fd345d88 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 14 Oct 2022 15:25:02 +0800 Subject: [PATCH 05/10] Improve test: Use hamcrest's Matchers instead of implement a "hasItemOfClass" method. --- .../implementation/AadRestTemplateCreatorTest.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index 7939e99a2cf5..0d123101951a 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -25,9 +25,11 @@ import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2AccessTokenResponseClientRestTemplate; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2ErrorResponseHandledRestTemplate; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreatorTest.RestTemplateProxyCustomizerConfiguration.FACTORY; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.isA; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; class AadRestTemplateCreatorTest { @@ -53,8 +55,8 @@ void testCreateOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder b ResponseErrorHandler handler = restTemplate.getErrorHandler(); assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); List> converters = restTemplate.getMessageConverters(); - assertTrue(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertTrue(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); + assertThat(converters, hasItem(isA(FormHttpMessageConverter.class))); + assertThat(converters, hasItem(isA(OAuth2AccessTokenResponseHttpMessageConverter.class))); } @Test @@ -69,11 +71,6 @@ void testRestOperationProxyConfiguration() { }); } - static boolean hasItemOfClass(List list, Class clazz) { - return list.stream() - .anyMatch(item -> item.getClass().equals(clazz)); - } - @Configuration static class RestTemplateProxyCustomizerConfiguration { From d91e30d336d3e18a2454339de54e20a013e7eb15 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 14 Oct 2022 16:32:16 +0800 Subject: [PATCH 06/10] Fix #31482. RestTemplate used to get access token should only contain 2 converters. --- .../AadRestTemplateCreator.java | 19 ++----- .../AadRestTemplateCreatorTest.java | 52 ++++++++++++++++++- .../resources/aad/access-token-response.json | 9 ++++ 3 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/aad/access-token-response.json diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java index 0af7d0f061e4..314f9742f8e7 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java @@ -5,14 +5,11 @@ import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.http.converter.FormHttpMessageConverter; -import org.springframework.http.converter.HttpMessageConverter; import org.springframework.security.oauth2.client.http.OAuth2ErrorResponseErrorHandler; import org.springframework.security.oauth2.core.http.converter.OAuth2AccessTokenResponseHttpMessageConverter; import org.springframework.util.Assert; import org.springframework.web.client.RestTemplate; -import java.util.List; - /** * Util class used to create {@link RestTemplate}s for all Azure AD related http requests. */ @@ -32,19 +29,9 @@ public static RestTemplate createOAuth2ErrorResponseHandledRestTemplate(RestTemp } public static RestTemplate createOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder builder) { - RestTemplate restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); - List> converters = restTemplate.getMessageConverters(); - if (notContainsElementOfType(converters, FormHttpMessageConverter.class)) { - converters.add(new FormHttpMessageConverter()); - } - if (notContainsElementOfType(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)) { - converters.add(new OAuth2AccessTokenResponseHttpMessageConverter()); - } - return restTemplate; - } - - private static boolean notContainsElementOfType(List list, Class clazz) { - return list.stream().noneMatch(item -> item.getClass().equals(clazz)); + builder = builder.messageConverters( + new FormHttpMessageConverter(), new OAuth2AccessTokenResponseHttpMessageConverter()); + return createOAuth2ErrorResponseHandledRestTemplate(builder); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index 0d123101951a..7bc6f324bee8 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -10,16 +10,29 @@ import org.springframework.boot.web.client.RestTemplateCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.RequestEntity; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.security.oauth2.client.http.OAuth2ErrorResponseErrorHandler; +import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; import org.springframework.security.oauth2.core.http.converter.OAuth2AccessTokenResponseHttpMessageConverter; +import org.springframework.test.web.client.ExpectedCount; +import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.RestTemplate; +import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.List; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2AccessTokenResponseClientRestTemplate; @@ -29,7 +42,10 @@ import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.isA; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertSame; +import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; +import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus; class AadRestTemplateCreatorTest { @@ -44,19 +60,51 @@ void testAadRestOperationConfiguration() { }); } - void testCreateOAuth2ErrorResponseHandledRestTemplate(RestTemplateBuilder builder) { + private void testCreateOAuth2ErrorResponseHandledRestTemplate(RestTemplateBuilder builder) { RestTemplate restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); ResponseErrorHandler handler = restTemplate.getErrorHandler(); assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); } - void testCreateOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder builder) { + private void testCreateOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder builder) { RestTemplate restTemplate = createOAuth2AccessTokenResponseClientRestTemplate(builder); ResponseErrorHandler handler = restTemplate.getErrorHandler(); assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); List> converters = restTemplate.getMessageConverters(); + //assertEquals(2, converters.size()); assertThat(converters, hasItem(isA(FormHttpMessageConverter.class))); assertThat(converters, hasItem(isA(OAuth2AccessTokenResponseHttpMessageConverter.class))); + + testOAuth2AccessTokenResponseCanBeConstructed(restTemplate); + } + + private void testOAuth2AccessTokenResponseCanBeConstructed(RestTemplate restTemplate) { + URI url; + try { + url = new URI("https://login.microsoftonline.comv/common/oauth2/v2.0/token"); + } catch (URISyntaxException e) { + throw new IllegalStateException(e); + } + MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate); + mockServer + .expect(ExpectedCount.once(), requestTo(url)) + .andRespond(withStatus(HttpStatus.OK) + .contentType(MediaType.APPLICATION_JSON) + .body(readAccessTokenResponse())); + OAuth2AccessTokenResponse response = restTemplate + .exchange(new RequestEntity<>(HttpMethod.POST, url), OAuth2AccessTokenResponse.class) + .getBody(); + assertNotNull(response); + assertEquals("test_access_token_value", response.getAccessToken().getTokenValue()); + } + + private String readAccessTokenResponse() { + try { + return new String(Files.readAllBytes( + Paths.get("src/test/resources/aad/access-token-response.json")), StandardCharsets.UTF_8); + } catch (IOException e) { + throw new IllegalStateException(e); + } } @Test diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/aad/access-token-response.json b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/aad/access-token-response.json new file mode 100644 index 000000000000..06366c914611 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/aad/access-token-response.json @@ -0,0 +1,9 @@ +{ + "token_type": "Bearer", + "scope": "openid profile email", + "expires_in": 5139, + "ext_expires_in": 5139, + "access_token": "test_access_token_value", + "refresh_token": "test_refresh_token_value", + "id_token": "test_id_token_value" +} \ No newline at end of file From afdf4f32fddaa568f231b7b233244fbec3a10dbd Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 14 Oct 2022 16:33:40 +0800 Subject: [PATCH 07/10] Add a new item in CHANGELOG.md. --- sdk/spring/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index 5a45222c216c..5dd93be92e9f 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -5,6 +5,7 @@ Upgrade Spring Boot dependencies version to 2.7.4 and Spring Cloud dependencies #### Bugs Fixed - Fix bug: Put a value into Collections.emptyMap(). [#31190](https://github.com/Azure/azure-sdk-for-java/issues/31190). +- Fix bug: RestTemplate used to get access token should only contain 2 converters. [#31482](https://github.com/Azure/azure-sdk-for-java/issues/31482). ## 4.4.0 (2022-09-26) Upgrade Spring Boot dependencies version to 2.7.3 and Spring Cloud dependencies version to 2021.0.3 From ff30a370d1589cbc9eda7df35df37074aaab4d70 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Mon, 17 Oct 2022 10:31:28 +0800 Subject: [PATCH 08/10] Fix error caused by resolve conflicts in GitHub PR review page. --- .../aad/implementation/AadRestTemplateCreatorTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index cd28a5ba3d88..7bc6f324bee8 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -41,8 +41,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.isA; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createRestTemplate; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.RestTemplateProxyCustomizerConfiguration.FACTORY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertSame; From 21d73df64647e0e40b73f5721e42774601ed82b2 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Mon, 17 Oct 2022 10:33:56 +0800 Subject: [PATCH 09/10] Update test by uncomment codes. --- .../aad/implementation/AadRestTemplateCreatorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index 7bc6f324bee8..643fada9f4c4 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -71,7 +71,7 @@ private void testCreateOAuth2AccessTokenResponseClientRestTemplate(RestTemplateB ResponseErrorHandler handler = restTemplate.getErrorHandler(); assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); List> converters = restTemplate.getMessageConverters(); - //assertEquals(2, converters.size()); + assertEquals(2, converters.size()); assertThat(converters, hasItem(isA(FormHttpMessageConverter.class))); assertThat(converters, hasItem(isA(OAuth2AccessTokenResponseHttpMessageConverter.class))); From 2a053da792b5c848981e43ac38bb83912367d2ca Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Mon, 17 Oct 2022 10:36:44 +0800 Subject: [PATCH 10/10] Remove duplicated codes. --- .../AadRestTemplateCreatorTest.java | 26 +------------------ 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index 643fada9f4c4..edb7f2edf501 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -7,14 +7,10 @@ import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.boot.web.client.RestTemplateCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.RequestEntity; -import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.security.oauth2.client.http.OAuth2ErrorResponseErrorHandler; @@ -26,8 +22,6 @@ import org.springframework.web.client.RestTemplate; import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Proxy; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; @@ -37,7 +31,7 @@ import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2AccessTokenResponseClientRestTemplate; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2ErrorResponseHandledRestTemplate; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreatorTest.RestTemplateProxyCustomizerConfiguration.FACTORY; +import static com.azure.spring.cloud.autoconfigure.aad.implementation.RestTemplateProxyCustomizerConfiguration.FACTORY; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.isA; @@ -119,22 +113,4 @@ void testRestOperationProxyConfiguration() { }); } - @Configuration - static class RestTemplateProxyCustomizerConfiguration { - - static final SimpleClientHttpRequestFactory FACTORY = createProxyFactory(); - - @Bean - public RestTemplateCustomizer proxyRestTemplateCustomizer() { - return (RestTemplate restTemplate) -> restTemplate.setRequestFactory(FACTORY); - } - - static SimpleClientHttpRequestFactory createProxyFactory() { - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8080)); - SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); - factory.setProxy(proxy); - return factory; - } - } - }