fix:fix the error capture of rate limit exception. ()

pull/864/head
Haotian Zhang 2 years ago committed by GitHub
parent 99995e6505
commit 4fd32eaf80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,3 +5,4 @@
- [docs:Add license checker GitHub Action.](https://github.com/Tencent/spring-cloud-tencent/pull/841) - [docs:Add license checker GitHub Action.](https://github.com/Tencent/spring-cloud-tencent/pull/841)
- [refactor:move loadbalancer to discovery module.](https://github.com/Tencent/spring-cloud-tencent/pull/845) - [refactor:move loadbalancer to discovery module.](https://github.com/Tencent/spring-cloud-tencent/pull/845)
- [feature:add PolarisRateLimiterLimitedFallback spi. ](https://github.com/Tencent/spring-cloud-tencent/pull/858) - [feature:add PolarisRateLimiterLimitedFallback spi. ](https://github.com/Tencent/spring-cloud-tencent/pull/858)
- [fix:fix the error capture of rate limit exception.](https://github.com/Tencent/spring-cloud-tencent/pull/861)

@ -0,0 +1,3 @@
coverage:
status:
patch: off

@ -91,6 +91,7 @@ public class BusinessController {
}).start(); }).start();
} }
count.await(); count.await();
index.set(0);
return builder.toString(); return builder.toString();
} }

@ -44,6 +44,7 @@ import org.springframework.context.ApplicationContextAware;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.ClientHttpResponse;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.ResponseErrorHandler;
import static com.tencent.cloud.common.constant.ContextConstant.UTF_8; import static com.tencent.cloud.common.constant.ContextConstant.UTF_8;
@ -69,6 +70,9 @@ public class EnhancedRestTemplateReporter extends AbstractPolarisReporterAdapter
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
String[] handlerBeanNames = applicationContext.getBeanNamesForType(ResponseErrorHandler.class); String[] handlerBeanNames = applicationContext.getBeanNamesForType(ResponseErrorHandler.class);
if (handlerBeanNames.length == 1) { if (handlerBeanNames.length == 1) {
if (this.delegateHandler == null) {
this.delegateHandler = new DefaultResponseErrorHandler();
}
return; return;
} }
@ -207,7 +211,11 @@ public class EnhancedRestTemplateReporter extends AbstractPolarisReporterAdapter
return resultRequest; return resultRequest;
} }
public void setDelegateHandler(ResponseErrorHandler delegateHandler) { protected ResponseErrorHandler getDelegateHandler() {
return this.delegateHandler;
}
protected void setDelegateHandler(ResponseErrorHandler delegateHandler) {
this.delegateHandler = delegateHandler; this.delegateHandler = delegateHandler;
} }
} }

@ -28,6 +28,7 @@ import com.tencent.cloud.common.metadata.MetadataContextHolder;
import com.tencent.cloud.common.util.ApplicationContextAwareUtils; import com.tencent.cloud.common.util.ApplicationContextAwareUtils;
import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementReporterProperties; import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementReporterProperties;
import com.tencent.polaris.api.core.ConsumerAPI; import com.tencent.polaris.api.core.ConsumerAPI;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
@ -40,10 +41,13 @@ import org.mockito.MockedStatic;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.client.AbstractClientHttpResponse; import org.springframework.http.client.AbstractClientHttpResponse;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.ResponseErrorHandler;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
@ -72,6 +76,9 @@ public class EnhancedRestTemplateReporterTest {
@InjectMocks @InjectMocks
private EnhancedRestTemplateReporter enhancedRestTemplateReporter; private EnhancedRestTemplateReporter enhancedRestTemplateReporter;
@InjectMocks
private EnhancedRestTemplateReporter enhancedRestTemplateReporter2;
@BeforeClass @BeforeClass
public static void beforeClass() { public static void beforeClass() {
mockedApplicationContextAwareUtils = Mockito.mockStatic(ApplicationContextAwareUtils.class); mockedApplicationContextAwareUtils = Mockito.mockStatic(ApplicationContextAwareUtils.class);
@ -100,6 +107,24 @@ public class EnhancedRestTemplateReporterTest {
enhancedRestTemplateReporter.setDelegateHandler(delegate); enhancedRestTemplateReporter.setDelegateHandler(delegate);
} }
@Test
public void testSetApplicationContext() {
ApplicationContext applicationContext = mock(ApplicationContext.class);
// test no ResponseErrorHandler
when(applicationContext.getBeanNamesForType(any(Class.class)))
.thenReturn(new String[] {"enhancedRestTemplateReporter"});
enhancedRestTemplateReporter2.setApplicationContext(applicationContext);
Assert.assertTrue(enhancedRestTemplateReporter2.getDelegateHandler() instanceof DefaultResponseErrorHandler);
// test one other ResponseErrorHandler
when(applicationContext.getBeanNamesForType(any(Class.class)))
.thenReturn(new String[] {"enhancedRestTemplateReporter", "mockedResponseErrorHandler"});
when(applicationContext.getBean(anyString())).thenReturn(mock(MockedResponseErrorHandler.class));
enhancedRestTemplateReporter2.setApplicationContext(applicationContext);
Assert.assertTrue(enhancedRestTemplateReporter2.getDelegateHandler() instanceof MockedResponseErrorHandler);
}
@Test @Test
public void testHasError() throws IOException { public void testHasError() throws IOException {
when(delegate.hasError(any())).thenReturn(true); when(delegate.hasError(any())).thenReturn(true);
@ -156,21 +181,21 @@ public class EnhancedRestTemplateReporterTest {
verify(delegate).handleError(uri, HttpMethod.GET, response); verify(delegate).handleError(uri, HttpMethod.GET, response);
} }
class MockedClientHttpResponse extends AbstractClientHttpResponse { static class MockedClientHttpResponse extends AbstractClientHttpResponse {
private HttpHeaders headers; private final HttpHeaders headers;
MockedClientHttpResponse() { MockedClientHttpResponse() {
this.headers = new HttpHeaders(); this.headers = new HttpHeaders();
} }
@Override @Override
public int getRawStatusCode() throws IOException { public int getRawStatusCode() {
return 0; return 0;
} }
@Override @Override
public String getStatusText() throws IOException { public String getStatusText() {
return null; return null;
} }
@ -194,4 +219,12 @@ public class EnhancedRestTemplateReporterTest {
return HttpStatus.OK; return HttpStatus.OK;
} }
} }
private static class MockedResponseErrorHandler extends DefaultResponseErrorHandler {
@Override
public void handleError(@NonNull ClientHttpResponse response) {
}
}
} }

Loading…
Cancel
Save