From dd34aea9a2dd8dcfe1e196c9b2fc385e936de809 Mon Sep 17 00:00:00 2001 From: seanyu Date: Thu, 11 May 2023 18:25:43 +0800 Subject: [PATCH] add ut --- ...risCircuitBreakerFeignIntegrationTest.java | 2 - ...olarisFeignCircuitBreakerTargeterTest.java | 89 +++++++++++++++++++ 2 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignCircuitBreakerTargeterTest.java diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerFeignIntegrationTest.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerFeignIntegrationTest.java index 6ccdec791..085a8e9fe 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerFeignIntegrationTest.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerFeignIntegrationTest.java @@ -50,7 +50,6 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -73,7 +72,6 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen "spring.cloud.polaris.namespace=" + NAMESPACE_TEST, "spring.cloud.polaris.service=test" }) -@DirtiesContext public class PolarisCircuitBreakerFeignIntegrationTest { private static final String TEST_SERVICE_NAME = "test-service-callee"; diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignCircuitBreakerTargeterTest.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignCircuitBreakerTargeterTest.java new file mode 100644 index 000000000..68766e078 --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignCircuitBreakerTargeterTest.java @@ -0,0 +1,89 @@ +/* + * 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.feign; + +import feign.Feign; +import feign.RequestLine; +import feign.Target; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory; +import org.springframework.cloud.openfeign.CircuitBreakerNameResolver; +import org.springframework.cloud.openfeign.FeignClientFactory; +import org.springframework.cloud.openfeign.FeignClientFactoryBean; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +/** + * PolarisFeignCircuitBreakerTargeterTest. + * + * @author sean yu + */ +@ExtendWith(MockitoExtension.class) +public class PolarisFeignCircuitBreakerTargeterTest { + + @Mock + CircuitBreakerFactory circuitBreakerFactory; + + @Mock + CircuitBreakerNameResolver circuitBreakerNameResolver; + + @Test + public void testTarget() { + PolarisFeignCircuitBreakerTargeter targeter = new PolarisFeignCircuitBreakerTargeter(circuitBreakerFactory, circuitBreakerNameResolver); + targeter.target(new FeignClientFactoryBean(), new Feign.Builder(), new FeignClientFactory(), new Target.HardCodedTarget<>(TestApi.class, "/test")); + } + + @Test + public void testTarget2() { + PolarisFeignCircuitBreakerTargeter targeter = new PolarisFeignCircuitBreakerTargeter(circuitBreakerFactory, circuitBreakerNameResolver); + FeignClientFactoryBean feignClientFactoryBean = mock(FeignClientFactoryBean.class); + doReturn(TestApi.class).when(feignClientFactoryBean).getFallback(); + doReturn("test").when(feignClientFactoryBean).getName(); + FeignClientFactory feignClientFactory = mock(FeignClientFactory.class); + doReturn(null).when(feignClientFactory).getInstance("test", TestApi.class); + assertThatThrownBy(() -> { + targeter.target(feignClientFactoryBean, new PolarisFeignCircuitBreaker.Builder(), feignClientFactory, new Target.HardCodedTarget<>(TestApi.class, "/test")); + }).isInstanceOf(IllegalStateException.class); + } + + @Test + public void testTarget3() { + PolarisFeignCircuitBreakerTargeter targeter = new PolarisFeignCircuitBreakerTargeter(circuitBreakerFactory, circuitBreakerNameResolver); + FeignClientFactoryBean feignClientFactoryBean = mock(FeignClientFactoryBean.class); + doReturn(void.class).when(feignClientFactoryBean).getFallback(); + doReturn(TestApi.class).when(feignClientFactoryBean).getFallbackFactory(); + doReturn("test").when(feignClientFactoryBean).getName(); + FeignClientFactory feignClientFactory = mock(FeignClientFactory.class); + doReturn(Object.class).when(feignClientFactory).getInstance("test", TestApi.class); + assertThatThrownBy(() -> { + targeter.target(feignClientFactoryBean, new PolarisFeignCircuitBreaker.Builder(), feignClientFactory, new Target.HardCodedTarget<>(TestApi.class, "/test")); + }).isInstanceOf(IllegalStateException.class); + } + + interface TestApi { + @RequestLine("GET /test") + void test(); + } + +}