diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignObjectWrapperTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignObjectWrapperTests.java index eb55c3960..dd8d279f7 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignObjectWrapperTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignObjectWrapperTests.java @@ -27,16 +27,19 @@ import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.BeanFactory; +import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerProperties; import org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; import org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient; +import org.springframework.cloud.openfeign.loadbalancer.RetryableFeignBlockingLoadBalancerClient; import static org.mockito.Mockito.mock; /** * @author Marcin Grzejszczak + * @author Olga Maciaszek-Sharma */ @ExtendWith(MockitoExtension.class) public class TracingFeignObjectWrapperTests { @@ -73,6 +76,21 @@ public class TracingFeignObjectWrapperTests { Assertions.assertThat(wrapped).isInstanceOf(TraceFeignBlockingLoadBalancerClient.class); } + // gh-1528 + @Test + public void should_wrap_feign_retryable_loadbalancer_client() { + Client delegate = mock(Client.class); + BlockingLoadBalancerClient loadBalancerClient = mock(BlockingLoadBalancerClient.class); + LoadBalancerClientFactory loadBalancerClientFactory = mock(LoadBalancerClientFactory.class); + LoadBalancedRetryFactory retryFactory = mock(LoadBalancedRetryFactory.class); + Mockito.when(beanFactory.getBean(LoadBalancerClient.class)).thenReturn(loadBalancerClient); + + Object wrapped = traceFeignObjectWrapper.wrap(new RetryableFeignBlockingLoadBalancerClient(delegate, + loadBalancerClient, retryFactory, new LoadBalancerProperties(), loadBalancerClientFactory)); + + Assertions.assertThat(wrapped).isInstanceOf(TraceRetryableFeignBlockingLoadBalancerClient.class); + } + // gh-1528, gh-1125 @Test public void should_wrap_subclass_of_feign_loadbalancer_client() { @@ -81,12 +99,29 @@ public class TracingFeignObjectWrapperTests { LoadBalancerClientFactory loadBalancerClientFactory = mock(LoadBalancerClientFactory.class); Mockito.when(beanFactory.getBean(LoadBalancerClient.class)).thenReturn(loadBalancerClient); - Object wrapped = traceFeignObjectWrapper - .wrap(new TestFeignBlockingLoadBalancerClient(delegate, loadBalancerClient, loadBalancerClientFactory)); + Object wrapped = traceFeignObjectWrapper.wrap( + new org.springframework.cloud.sleuth.instrument.web.client.feign.TracingFeignObjectWrapperTests.TestFeignBlockingLoadBalancerClient( + delegate, loadBalancerClient, loadBalancerClientFactory)); Assertions.assertThat(wrapped).isInstanceOf(TraceFeignBlockingLoadBalancerClient.class); } + // gh-1528, gh-1125 + @Test + public void should_wrap_subclass_of_retryable_feign_loadbalancer_client() { + Client delegate = mock(Client.class); + BlockingLoadBalancerClient loadBalancerClient = mock(BlockingLoadBalancerClient.class); + LoadBalancerClientFactory loadBalancerClientFactory = mock(LoadBalancerClientFactory.class); + LoadBalancedRetryFactory retryFactory = mock(LoadBalancedRetryFactory.class); + Mockito.when(beanFactory.getBean(LoadBalancerClient.class)).thenReturn(loadBalancerClient); + + Object wrapped = traceFeignObjectWrapper.wrap( + new org.springframework.cloud.sleuth.instrument.web.client.feign.TracingFeignObjectWrapperTests.TestRetryableFeignBlockingLoadBalancerClient( + delegate, loadBalancerClient, retryFactory, loadBalancerClientFactory)); + + Assertions.assertThat(wrapped).isInstanceOf(TraceRetryableFeignBlockingLoadBalancerClient.class); + } + static class TestFeignBlockingLoadBalancerClient extends FeignBlockingLoadBalancerClient { TestFeignBlockingLoadBalancerClient(Client delegate, BlockingLoadBalancerClient loadBalancerClient, @@ -96,4 +131,13 @@ public class TracingFeignObjectWrapperTests { } + static class TestRetryableFeignBlockingLoadBalancerClient extends RetryableFeignBlockingLoadBalancerClient { + + TestRetryableFeignBlockingLoadBalancerClient(Client delegate, BlockingLoadBalancerClient loadBalancerClient, + LoadBalancedRetryFactory retryFactory, LoadBalancerClientFactory loadBalancerClientFactory) { + super(delegate, loadBalancerClient, retryFactory, new LoadBalancerProperties(), loadBalancerClientFactory); + } + + } + } diff --git a/tests/brave/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/brave/instrument/feign/issues/issue1125/ManuallyCreatedLoadBalancerFeignClientTests.java b/tests/brave/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/brave/instrument/feign/issues/issue1125/ManuallyCreatedLoadBalancerFeignClientTests.java index 4fb2825d0..6a6c47cbe 100644 --- a/tests/brave/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/brave/instrument/feign/issues/issue1125/ManuallyCreatedLoadBalancerFeignClientTests.java +++ b/tests/brave/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/brave/instrument/feign/issues/issue1125/ManuallyCreatedLoadBalancerFeignClientTests.java @@ -160,10 +160,6 @@ class MyDelegateClient implements Client { .headers(new HashMap<>()).status(200).build(); } - boolean wasCalled() { - return wasCalled; - } - } @FeignClient(name = "foo", url = "http://foo")