diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/AbstractPolarisCircuitBreakAdapter.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/AbstractPolarisCircuitBreakAdapter.java
new file mode 100644
index 000000000..42137fe62
--- /dev/null
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/AbstractPolarisCircuitBreakAdapter.java
@@ -0,0 +1,92 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package com.tencent.cloud.polaris.circuitbreaker;
+
+import java.util.List;
+import java.util.Objects;
+
+import com.tencent.cloud.polaris.circuitbreaker.config.PolarisCircuitBreakerProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.lang.Nullable;
+
+import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
+
+/**
+ * Abstract Polaris Circuit-Break Adapter .
+ *
+ * @author Elve.Xu 2022-07-11
+ */
+public abstract class AbstractPolarisCircuitBreakAdapter {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractPolarisCircuitBreakAdapter.class);
+
+ protected final PolarisCircuitBreakerProperties properties;
+
+ /**
+ * Constructor With {@link PolarisCircuitBreakerProperties} .
+ *
+ * @param properties instance of {@link PolarisCircuitBreakerProperties}.
+ */
+ protected AbstractPolarisCircuitBreakAdapter(PolarisCircuitBreakerProperties properties) {
+ this.properties = properties;
+ }
+
+ /**
+ * Callback after completion of request processing, Check if business meltdown reporting is required.
+ *
+ * @param httpStatus request http status code
+ * @return true , otherwise return false .
+ */
+ protected boolean apply(@Nullable HttpStatus httpStatus) {
+ if (Objects.isNull(httpStatus)) {
+ return false;
+ }
+ else {
+ // statuses > series
+ List status = properties.getStatuses();
+
+ if (status.isEmpty()) {
+ List series = properties.getSeries();
+ // Check INTERNAL_SERVER_ERROR (500) status.
+ if (properties.getIgnoreInternalServerError() && Objects.equals(httpStatus, INTERNAL_SERVER_ERROR)) {
+ return false;
+ }
+ if (series.isEmpty()) {
+ return false;
+ }
+ else {
+ try {
+ return series.contains(HttpStatus.Series.valueOf(httpStatus));
+ }
+ catch (Exception e) {
+ LOG.warn("Decode http status failed.", e);
+ }
+ }
+ }
+ else {
+ // Use the user-specified fuse status code.
+ return status.contains(httpStatus);
+ }
+ }
+ // DEFAULT RETURN FALSE.
+ return false;
+ }
+}
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerAutoConfiguration.java
index 4f4291a83..31b11ccc2 100644
--- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerAutoConfiguration.java
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerAutoConfiguration.java
@@ -89,8 +89,9 @@ public class PolarisCircuitBreakerAutoConfiguration {
@Bean
public PolarisRestTemplateResponseErrorHandler polarisRestTemplateResponseErrorHandler(
- ConsumerAPI consumerAPI, @Autowired(required = false) PolarisResponseErrorHandler polarisResponseErrorHandler) {
- return new PolarisRestTemplateResponseErrorHandler(consumerAPI, polarisResponseErrorHandler);
+ PolarisCircuitBreakerProperties properties, ConsumerAPI consumerAPI,
+ @Autowired(required = false) PolarisResponseErrorHandler polarisResponseErrorHandler) {
+ return new PolarisRestTemplateResponseErrorHandler(properties, consumerAPI, polarisResponseErrorHandler);
}
@Bean
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerProperties.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerProperties.java
index 12fd57dcd..a47ad20a7 100644
--- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerProperties.java
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerProperties.java
@@ -21,8 +21,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import com.google.common.collect.Lists;
-
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.http.HttpStatus;
@@ -54,7 +52,7 @@ public class PolarisCircuitBreakerProperties {
/**
* Specify the Http status code(s) that needs to be fused.
*/
- private List statuses = Lists.newArrayList(NOT_IMPLEMENTED, BAD_GATEWAY,
+ private List statuses = toList(NOT_IMPLEMENTED, BAD_GATEWAY,
SERVICE_UNAVAILABLE, GATEWAY_TIMEOUT, HTTP_VERSION_NOT_SUPPORTED, VARIANT_ALSO_NEGOTIATES,
INSUFFICIENT_STORAGE, LOOP_DETECTED, BANDWIDTH_LIMIT_EXCEEDED, NOT_EXTENDED, NETWORK_AUTHENTICATION_REQUIRED);
@@ -63,14 +61,53 @@ public class PolarisCircuitBreakerProperties {
*/
private List series = toList(HttpStatus.Series.SERVER_ERROR);
+ /**
+ * Ignore Internal Server Error Http Status Code,
+ * Only takes effect if the attribute {@link PolarisCircuitBreakerProperties#series} is not empty.
+ */
+ private Boolean ignoreInternalServerError = true;
+
/**
* Convert items to List.
+ *
* @param items item arrays
- * @param Object Generics.
+ * @param Object Generics.
* @return list
*/
@SafeVarargs
private static List toList(T... items) {
return new ArrayList<>(Arrays.asList(items));
}
+
+ public Boolean getEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(Boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public List getStatuses() {
+ return statuses;
+ }
+
+ public void setStatuses(List statuses) {
+ this.statuses = statuses;
+ }
+
+ public List getSeries() {
+ return series;
+ }
+
+ public void setSeries(List series) {
+ this.series = series;
+ }
+
+ public Boolean getIgnoreInternalServerError() {
+ return ignoreInternalServerError;
+ }
+
+ public void setIgnoreInternalServerError(Boolean ignoreInternalServerError) {
+ this.ignoreInternalServerError = ignoreInternalServerError;
+ }
}
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignBeanPostProcessor.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignBeanPostProcessor.java
index ea8242587..63615025a 100644
--- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignBeanPostProcessor.java
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignBeanPostProcessor.java
@@ -17,6 +17,7 @@
package com.tencent.cloud.polaris.circuitbreaker.feign;
+import com.tencent.cloud.polaris.circuitbreaker.config.PolarisCircuitBreakerProperties;
import com.tencent.polaris.api.core.ConsumerAPI;
import feign.Client;
@@ -29,6 +30,7 @@ import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient;
import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
+import org.springframework.lang.NonNull;
/**
* Wrap Spring Bean and decorating proxy for Feign Client.
@@ -46,7 +48,7 @@ public class PolarisFeignBeanPostProcessor implements BeanPostProcessor, BeanFac
}
@Override
- public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+ public Object postProcessBeforeInitialization(@NonNull Object bean, @NonNull String beanName) throws BeansException {
return wrapper(bean);
}
@@ -77,11 +79,11 @@ public class PolarisFeignBeanPostProcessor implements BeanPostProcessor, BeanFac
}
private PolarisFeignClient createPolarisFeignClient(Client delegate) {
- return new PolarisFeignClient(delegate, consumerAPI);
+ return new PolarisFeignClient(delegate, consumerAPI, factory.getBean(PolarisCircuitBreakerProperties.class));
}
@Override
- public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
+ public void setBeanFactory(@NonNull BeanFactory beanFactory) throws BeansException {
this.factory = beanFactory;
}
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClient.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClient.java
index 0c8551404..b8ae3cbd6 100644
--- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClient.java
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClient.java
@@ -22,6 +22,8 @@ import java.io.IOException;
import java.net.URI;
import com.tencent.cloud.common.metadata.MetadataContext;
+import com.tencent.cloud.polaris.circuitbreaker.AbstractPolarisCircuitBreakAdapter;
+import com.tencent.cloud.polaris.circuitbreaker.config.PolarisCircuitBreakerProperties;
import com.tencent.polaris.api.core.ConsumerAPI;
import com.tencent.polaris.api.pojo.RetStatus;
import com.tencent.polaris.api.pojo.ServiceKey;
@@ -34,6 +36,8 @@ import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
+
import static feign.Util.checkNotNull;
/**
@@ -41,7 +45,7 @@ import static feign.Util.checkNotNull;
*
* @author Haotian Zhang
*/
-public class PolarisFeignClient implements Client {
+public class PolarisFeignClient extends AbstractPolarisCircuitBreakAdapter implements Client {
private static final Logger LOG = LoggerFactory.getLogger(PolarisFeignClient.class);
@@ -49,7 +53,8 @@ public class PolarisFeignClient implements Client {
private final ConsumerAPI consumerAPI;
- public PolarisFeignClient(Client target, ConsumerAPI consumerAPI) {
+ public PolarisFeignClient(Client target, ConsumerAPI consumerAPI, PolarisCircuitBreakerProperties properties) {
+ super(properties);
this.delegate = checkNotNull(target, "target");
this.consumerAPI = checkNotNull(consumerAPI, "CircuitBreakAPI");
}
@@ -60,7 +65,7 @@ public class PolarisFeignClient implements Client {
try {
Response response = delegate.execute(request, options);
// HTTP code greater than 500 is an exception
- if (response.status() > 500) {
+ if (super.apply(HttpStatus.resolve(response.status()))) {
resultRequest.setRetStatus(RetStatus.RetFail);
}
LOG.debug("Will report result of {}. Request=[{}]. Response=[{}].",
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/resttemplate/PolarisRestTemplateResponseErrorHandler.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/resttemplate/PolarisRestTemplateResponseErrorHandler.java
index 4adf0bac2..55e5c42cf 100644
--- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/resttemplate/PolarisRestTemplateResponseErrorHandler.java
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/resttemplate/PolarisRestTemplateResponseErrorHandler.java
@@ -25,6 +25,8 @@ import java.util.Objects;
import com.tencent.cloud.common.metadata.MetadataContext;
import com.tencent.cloud.common.util.ReflectionUtils;
+import com.tencent.cloud.polaris.circuitbreaker.AbstractPolarisCircuitBreakAdapter;
+import com.tencent.cloud.polaris.circuitbreaker.config.PolarisCircuitBreakerProperties;
import com.tencent.polaris.api.core.ConsumerAPI;
import com.tencent.polaris.api.pojo.RetStatus;
import com.tencent.polaris.api.pojo.ServiceKey;
@@ -43,7 +45,7 @@ import org.springframework.web.client.ResponseErrorHandler;
*
* @author wh 2022/6/21
*/
-public class PolarisRestTemplateResponseErrorHandler implements ResponseErrorHandler {
+public class PolarisRestTemplateResponseErrorHandler extends AbstractPolarisCircuitBreakAdapter implements ResponseErrorHandler {
private static final Logger LOG = LoggerFactory.getLogger(PolarisRestTemplateResponseErrorHandler.class);
@@ -53,9 +55,10 @@ public class PolarisRestTemplateResponseErrorHandler implements ResponseErrorHan
private final PolarisResponseErrorHandler polarisResponseErrorHandler;
-
- public PolarisRestTemplateResponseErrorHandler(ConsumerAPI consumerAPI,
+ public PolarisRestTemplateResponseErrorHandler(
+ PolarisCircuitBreakerProperties properties, ConsumerAPI consumerAPI,
PolarisResponseErrorHandler polarisResponseErrorHandler) {
+ super(properties);
this.consumerAPI = consumerAPI;
this.polarisResponseErrorHandler = polarisResponseErrorHandler;
}
@@ -86,7 +89,7 @@ public class PolarisRestTemplateResponseErrorHandler implements ResponseErrorHan
resultRequest.setPort(realURL.getPort());
}
- if (response.getStatusCode().value() > 500) {
+ if (super.apply(response.getStatusCode())) {
resultRequest.setRetStatus(RetStatus.RetFail);
}
}
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/AbstractPolarisCircuitBreakAdapterTest.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/AbstractPolarisCircuitBreakAdapterTest.java
new file mode 100644
index 000000000..0775c8313
--- /dev/null
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/AbstractPolarisCircuitBreakAdapterTest.java
@@ -0,0 +1,117 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package com.tencent.cloud.polaris.circuitbreaker;
+
+import com.tencent.cloud.polaris.circuitbreaker.config.PolarisCircuitBreakerProperties;
+import org.assertj.core.api.Assertions;
+import org.junit.Test;
+
+import org.springframework.http.HttpStatus;
+
+/**
+ * Test For {@link AbstractPolarisCircuitBreakAdapter}.
+ *
+ * @author Elve.Xu
+ * @version ${project.version} - 2022/7/11
+ */
+public class AbstractPolarisCircuitBreakAdapterTest {
+
+ @Test
+ public void testApplyWithDefaultConfig() {
+ PolarisCircuitBreakerProperties properties = new PolarisCircuitBreakerProperties();
+ // Mock Condition
+ SimplePolarisCircuitBreakAdapter adapter = new SimplePolarisCircuitBreakAdapter(properties);
+
+ // Assert
+ Assertions.assertThat(adapter.apply(HttpStatus.OK)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.INTERNAL_SERVER_ERROR)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.BAD_GATEWAY)).isEqualTo(true);
+ }
+
+ @Test
+ public void testApplyWithoutIgnoreInternalServerError() {
+ PolarisCircuitBreakerProperties properties = new PolarisCircuitBreakerProperties();
+ // Mock Condition
+ properties.getStatuses().clear();
+ properties.setIgnoreInternalServerError(false);
+
+ SimplePolarisCircuitBreakAdapter adapter = new SimplePolarisCircuitBreakAdapter(properties);
+
+ // Assert
+ Assertions.assertThat(adapter.apply(HttpStatus.OK)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.INTERNAL_SERVER_ERROR)).isEqualTo(true);
+ Assertions.assertThat(adapter.apply(HttpStatus.BAD_GATEWAY)).isEqualTo(true);
+ }
+
+ @Test
+ public void testApplyWithIgnoreInternalServerError() {
+ PolarisCircuitBreakerProperties properties = new PolarisCircuitBreakerProperties();
+ // Mock Condition
+ properties.getStatuses().clear();
+ properties.setIgnoreInternalServerError(true);
+
+ SimplePolarisCircuitBreakAdapter adapter = new SimplePolarisCircuitBreakAdapter(properties);
+
+ // Assert
+ Assertions.assertThat(adapter.apply(HttpStatus.OK)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.INTERNAL_SERVER_ERROR)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.BAD_GATEWAY)).isEqualTo(true);
+ }
+
+ @Test
+ public void testApplyWithoutSeries() {
+ PolarisCircuitBreakerProperties properties = new PolarisCircuitBreakerProperties();
+ // Mock Condition
+ properties.getStatuses().clear();
+ properties.getSeries().clear();
+
+ SimplePolarisCircuitBreakAdapter adapter = new SimplePolarisCircuitBreakAdapter(properties);
+
+ // Assert
+ Assertions.assertThat(adapter.apply(HttpStatus.OK)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.INTERNAL_SERVER_ERROR)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.BAD_GATEWAY)).isEqualTo(false);
+ }
+
+ @Test
+ public void testApplyWithSeries() {
+ PolarisCircuitBreakerProperties properties = new PolarisCircuitBreakerProperties();
+ // Mock Condition
+ properties.getStatuses().clear();
+ properties.getSeries().clear();
+ properties.getSeries().add(HttpStatus.Series.CLIENT_ERROR);
+
+ SimplePolarisCircuitBreakAdapter adapter = new SimplePolarisCircuitBreakAdapter(properties);
+
+ // Assert
+ Assertions.assertThat(adapter.apply(HttpStatus.OK)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.INTERNAL_SERVER_ERROR)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.BAD_GATEWAY)).isEqualTo(false);
+ Assertions.assertThat(adapter.apply(HttpStatus.FORBIDDEN)).isEqualTo(true);
+ }
+
+ /**
+ * Simple Polaris CircuitBreak Adapter Implements .
+ */
+ public static class SimplePolarisCircuitBreakAdapter extends AbstractPolarisCircuitBreakAdapter {
+
+ public SimplePolarisCircuitBreakAdapter(PolarisCircuitBreakerProperties properties) {
+ super(properties);
+ }
+ }
+}
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClientTest.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClientTest.java
index 8d21f6a1e..a389b0a86 100644
--- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClientTest.java
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClientTest.java
@@ -20,6 +20,7 @@ package com.tencent.cloud.polaris.circuitbreaker.feign;
import java.io.IOException;
import com.google.common.collect.Maps;
+import com.tencent.cloud.polaris.circuitbreaker.config.PolarisCircuitBreakerProperties;
import com.tencent.polaris.api.core.ConsumerAPI;
import com.tencent.polaris.api.rpc.ServiceCallResult;
import feign.Client;
@@ -30,6 +31,7 @@ import feign.Target;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@@ -52,10 +54,13 @@ import static org.mockito.Mockito.mock;
properties = {"spring.cloud.polaris.namespace=Test", "spring.cloud.polaris.service=TestApp"})
public class PolarisFeignClientTest {
+ @Autowired
+ private PolarisCircuitBreakerProperties properties;
+
@Test
public void testConstructor() {
try {
- new PolarisFeignClient(null, null);
+ new PolarisFeignClient(null, null, properties);
fail("NullPointerException should be thrown.");
}
catch (Throwable e) {
@@ -64,7 +69,7 @@ public class PolarisFeignClientTest {
}
try {
- new PolarisFeignClient(mock(Client.class), null);
+ new PolarisFeignClient(mock(Client.class), null, properties);
fail("NullPointerException should be thrown.");
}
catch (Throwable e) {
@@ -73,7 +78,7 @@ public class PolarisFeignClientTest {
}
try {
- assertThat(new PolarisFeignClient(mock(Client.class), mock(ConsumerAPI.class)))
+ assertThat(new PolarisFeignClient(mock(Client.class), mock(ConsumerAPI.class), properties))
.isInstanceOf(PolarisFeignClient.class);
}
catch (Throwable e) {
@@ -107,7 +112,7 @@ public class PolarisFeignClientTest {
RequestTemplate requestTemplate = new RequestTemplate();
requestTemplate.feignTarget(target);
- PolarisFeignClient polarisFeignClient = new PolarisFeignClient(delegate, consumerAPI);
+ PolarisFeignClient polarisFeignClient = new PolarisFeignClient(delegate, consumerAPI, properties);
// 200
Response response = polarisFeignClient.execute(Request.create(Request.HttpMethod.GET, "http://localhost:8080/test",
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/resttemplate/PolarisRestTemplateResponseErrorHandlerTest.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/resttemplate/PolarisRestTemplateResponseErrorHandlerTest.java
index 6cb630e37..ee1b2854c 100644
--- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/resttemplate/PolarisRestTemplateResponseErrorHandlerTest.java
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/resttemplate/PolarisRestTemplateResponseErrorHandlerTest.java
@@ -22,10 +22,12 @@ import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
+import com.tencent.cloud.polaris.circuitbreaker.config.PolarisCircuitBreakerProperties;
import com.tencent.polaris.api.core.ConsumerAPI;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpMethod;
@@ -44,10 +46,14 @@ import static org.mockito.Mockito.when;
properties = {"spring.cloud.polaris.namespace=Test", "spring.cloud.polaris.service=TestApp"})
public class PolarisRestTemplateResponseErrorHandlerTest {
+ @Autowired
+ private PolarisCircuitBreakerProperties properties;
+
@Test
public void handleError() throws Exception {
ConsumerAPI consumerAPI = mock(ConsumerAPI.class);
- PolarisRestTemplateResponseErrorHandler polarisRestTemplateResponseErrorHandler = new PolarisRestTemplateResponseErrorHandler(consumerAPI, null);
+ PolarisRestTemplateResponseErrorHandler polarisRestTemplateResponseErrorHandler =
+ new PolarisRestTemplateResponseErrorHandler(properties, consumerAPI, null);
URI uri = mock(URI.class);
when(uri.getPath()).thenReturn("/test");
when(uri.getHost()).thenReturn("host");