From 965c168c2c2d5f2630ba9b9e780722fc4b6b1550 Mon Sep 17 00:00:00 2001 From: buildmaster Date: Fri, 11 Mar 2022 10:57:35 +0000 Subject: [PATCH 1/3] Bumping versions --- docs/src/main/asciidoc/_configprops.adoc | 1 + .../cloud/openfeign/FeignAutoConfiguration.java | 7 +++---- .../CircuitBreakerAutoConfigurationTests.java | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/src/main/asciidoc/_configprops.adoc b/docs/src/main/asciidoc/_configprops.adoc index f9dd180c..14058c51 100644 --- a/docs/src/main/asciidoc/_configprops.adoc +++ b/docs/src/main/asciidoc/_configprops.adoc @@ -2,6 +2,7 @@ |Name | Default | Description |feign.autoconfiguration.jackson.enabled | `false` | If true, PageJacksonModule and SortJacksonModule bean will be provided for Jackson page decoding. +|feign.circuitbreaker.alphanumeric-ids.enabled | `false` | If true, Circuit Breaker ids will only contain alphanumeric characters to allow for configuration via configuration properties. |feign.circuitbreaker.enabled | `false` | If true, an OpenFeign client will be wrapped with a Spring Cloud CircuitBreaker circuit breaker. |feign.circuitbreaker.group.enabled | `false` | If true, an OpenFeign client will be wrapped with a Spring Cloud CircuitBreaker circuit breaker with with group. |feign.client.config | | diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java index ec189e61..8daecea0 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java @@ -166,16 +166,15 @@ public class FeignAutoConfiguration { @Bean @ConditionalOnMissingBean(CircuitBreakerNameResolver.class) - @ConditionalOnProperty(value = "feign.circuitbreaker.alphanumeric-ids.enabled", - havingValue = "false", matchIfMissing = true) + @ConditionalOnProperty(value = "feign.circuitbreaker.alphanumeric-ids.enabled", havingValue = "false", + matchIfMissing = true) public CircuitBreakerNameResolver circuitBreakerNameResolver() { return new DefaultCircuitBreakerNameResolver(); } @Bean @ConditionalOnMissingBean(CircuitBreakerNameResolver.class) - @ConditionalOnProperty(value = "feign.circuitbreaker.alphanumeric-ids.enabled", - havingValue = "true") + @ConditionalOnProperty(value = "feign.circuitbreaker.alphanumeric-ids.enabled", havingValue = "true") public CircuitBreakerNameResolver alphanumericCircuitBreakerNameResolver() { return new AlphanumericCircuitBreakerNameResolver(); } diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/circuitbreaker/CircuitBreakerAutoConfigurationTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/circuitbreaker/CircuitBreakerAutoConfigurationTests.java index 983e9558..3c805240 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/circuitbreaker/CircuitBreakerAutoConfigurationTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/circuitbreaker/CircuitBreakerAutoConfigurationTests.java @@ -57,8 +57,7 @@ public class CircuitBreakerAutoConfigurationTests { @SpringBootTest(classes = CircuitBreakerTests.Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, value = { "spring.application.name=springcircuittest", "spring.jmx.enabled=false", - "feign.circuitbreaker.enabled=true", - "feign.circuitbreaker.alphanumeric-ids.enabled=true" }) + "feign.circuitbreaker.enabled=true", "feign.circuitbreaker.alphanumeric-ids.enabled=true" }) @Nested class AlphanumericNamingStrategy { From 12efc629a3ee4062e4398acdb0b53fdec018059d Mon Sep 17 00:00:00 2001 From: Bhavya Agrawal <72398995+Bhavya-official@users.noreply.github.com> Date: Wed, 16 Mar 2022 18:23:35 +0530 Subject: [PATCH 2/3] [CORRECTION] Add Test Support for @RequestMapping NoPath, OnlySlashPath, MissingSlashLeadingPath. (#692) --- .../support/SpringMvcContractTests.java | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java index 9637d5a6..44f85862 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java @@ -78,7 +78,9 @@ import static org.junit.jupiter.api.Assumptions.assumeTrue; * @author Olga Maciaszek-Sharma * @author Szymon Linowski * @author Sam Kruglov - */ + * @author Bhavya Agrawal + **/ + class SpringMvcContractTests { private static final Class EXECUTABLE_TYPE; @@ -171,6 +173,41 @@ class SpringMvcContractTests { assertThat(data.indexToName().get(0).iterator().next()).isEqualTo("id"); } + @Test + void testProcessAnnotations_SimpleNoPath() throws Exception { + Method method = TestTemplate_Simple.class.getDeclaredMethod("getTest"); + MethodMetadata data = contract.parseAndValidateMetadata(method.getDeclaringClass(), method); + + assertThat(data.template().url()).isEqualTo("/"); + assertThat(data.template().method()).isEqualTo("GET"); + assertThat(data.template().headers().get("Accept").iterator().next()) + .isEqualTo(MediaType.APPLICATION_JSON_VALUE); + } + + @Test + void testProcessAnnotations_SimplePathIsOnlyASlash() throws Exception { + Method method = TestTemplate_Simple.class.getDeclaredMethod("getSlashPath", String.class); + MethodMetadata data = contract + .parseAndValidateMetadata(method.getDeclaringClass(), method); + + assertThat(data.template().url()).isEqualTo("/?id=" + "{id}"); + assertThat(data.template().method()).isEqualTo("GET"); + assertThat(data.template().headers().get("Accept").iterator().next()) + .isEqualTo(MediaType.APPLICATION_JSON_VALUE); + } + + @Test + void testProcessAnnotations_MissingLeadingSlashInPath() throws Exception { + Method method = TestTemplate_Simple.class.getDeclaredMethod("getTestNoLeadingSlash", String.class); + MethodMetadata data = contract + .parseAndValidateMetadata(method.getDeclaringClass(), method); + + assertThat(data.template().url()).isEqualTo("/test?name=" + "{name}"); + assertThat(data.template().method()).isEqualTo("GET"); + assertThat(data.template().headers().get("Accept").iterator().next()) + .isEqualTo(MediaType.APPLICATION_JSON_VALUE); + } + @Test void testProcessAnnotations_SimpleGetMapping() throws Exception { Method method = TestTemplate_Simple.class.getDeclaredMethod("getMappingTest", String.class); @@ -616,6 +653,12 @@ class SpringMvcContractTests { @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) TestObject postMappingTest(@RequestBody TestObject object); + @GetMapping(value = "/", produces = MediaType.APPLICATION_JSON_VALUE) + ResponseEntity getSlashPath(@RequestParam("id") String id); + + @GetMapping(path = "test", produces = MediaType.APPLICATION_JSON_VALUE) + ResponseEntity getTestNoLeadingSlash(@RequestParam("name") String name); + } @RequestMapping("/prepend/{classId}") From d76869f2145eeba40128238038fcb42a96d0ba40 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Wed, 16 Mar 2022 13:56:57 +0100 Subject: [PATCH 3/3] Reformat. --- .../openfeign/support/SpringMvcContractTests.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java index 44f85862..f789bfa7 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java @@ -181,31 +181,29 @@ class SpringMvcContractTests { assertThat(data.template().url()).isEqualTo("/"); assertThat(data.template().method()).isEqualTo("GET"); assertThat(data.template().headers().get("Accept").iterator().next()) - .isEqualTo(MediaType.APPLICATION_JSON_VALUE); + .isEqualTo(MediaType.APPLICATION_JSON_VALUE); } @Test void testProcessAnnotations_SimplePathIsOnlyASlash() throws Exception { Method method = TestTemplate_Simple.class.getDeclaredMethod("getSlashPath", String.class); - MethodMetadata data = contract - .parseAndValidateMetadata(method.getDeclaringClass(), method); + MethodMetadata data = contract.parseAndValidateMetadata(method.getDeclaringClass(), method); assertThat(data.template().url()).isEqualTo("/?id=" + "{id}"); assertThat(data.template().method()).isEqualTo("GET"); assertThat(data.template().headers().get("Accept").iterator().next()) - .isEqualTo(MediaType.APPLICATION_JSON_VALUE); + .isEqualTo(MediaType.APPLICATION_JSON_VALUE); } @Test void testProcessAnnotations_MissingLeadingSlashInPath() throws Exception { Method method = TestTemplate_Simple.class.getDeclaredMethod("getTestNoLeadingSlash", String.class); - MethodMetadata data = contract - .parseAndValidateMetadata(method.getDeclaringClass(), method); + MethodMetadata data = contract.parseAndValidateMetadata(method.getDeclaringClass(), method); assertThat(data.template().url()).isEqualTo("/test?name=" + "{name}"); assertThat(data.template().method()).isEqualTo("GET"); assertThat(data.template().headers().get("Accept").iterator().next()) - .isEqualTo(MediaType.APPLICATION_JSON_VALUE); + .isEqualTo(MediaType.APPLICATION_JSON_VALUE); } @Test