From 5b2f68e292f7803dc845da552b58044d0659c2fd Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Wed, 26 Aug 2020 20:36:05 +0800 Subject: [PATCH] Update test cases of spring-cloud-circuitbreaker-sentinel Signed-off-by: Eric Zhao --- ...SentinelCircuitBreakerIntegrationTest.java | 20 +++++----- ...SentinelCircuitBreakerIntegrationTest.java | 37 +++++++++++-------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/ReactiveSentinelCircuitBreakerIntegrationTest.java b/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/ReactiveSentinelCircuitBreakerIntegrationTest.java index 5d2ed9892..4e640e7aa 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/ReactiveSentinelCircuitBreakerIntegrationTest.java +++ b/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/ReactiveSentinelCircuitBreakerIntegrationTest.java @@ -82,7 +82,7 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { Thread.sleep(1000); } - // Recovered. + // Half-open recovery (will re-open the circuit breaker). StepVerifier.create(service.slow()).expectNext("slow").verifyComplete(); StepVerifier.create(service.normalFlux()).expectNext("normalflux") @@ -99,7 +99,7 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { Thread.sleep(1000); } - // Recovered. + // Half-open recovery (will re-open the circuit breaker). StepVerifier.create(service.slowFlux()).expectNext("slowflux").verifyComplete(); } @@ -110,7 +110,7 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { @GetMapping("/slow") public Mono slow() { - return Mono.just("slow").delayElement(Duration.ofMillis(500)); + return Mono.just("slow").delayElement(Duration.ofMillis(80)); } @GetMapping("/normal") @@ -120,7 +120,7 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { @GetMapping("/slow_flux") public Flux slowFlux() { - return Flux.just("slow", "flux").delayElements(Duration.ofMillis(500)); + return Flux.just("slow", "flux").delayElements(Duration.ofMillis(80)); } @GetMapping("normal_flux") @@ -133,19 +133,19 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { return factory -> { factory.configure(builder -> builder .rules(Collections.singletonList(new DegradeRule("slow_mono") - .setGrade(RuleConstant.DEGRADE_GRADE_RT).setCount(100) - .setTimeWindow(5))), + .setCount(50).setSlowRatioThreshold(0.7).setMinRequestAmount(5) + .setStatIntervalMs(30000).setTimeWindow(5))), "slow_mono"); factory.configure(builder -> builder - .rules(Collections.singletonList(new DegradeRule("slow_flux") - .setGrade(RuleConstant.DEGRADE_GRADE_RT).setCount(100) - .setTimeWindow(5))), + .rules(Collections.singletonList(new DegradeRule("slow_mono") + .setCount(50).setSlowRatioThreshold(0.7).setMinRequestAmount(5) + .setStatIntervalMs(30000).setTimeWindow(5))), "slow_flux"); factory.configureDefault(id -> new SentinelConfigBuilder() .resourceName(id) .rules(Collections.singletonList(new DegradeRule(id) .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) - .setCount(0.5).setTimeWindow(10))) + .setCount(5).setTimeWindow(10))) .build()); }; } diff --git a/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/SentinelCircuitBreakerIntegrationTest.java b/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/SentinelCircuitBreakerIntegrationTest.java index d63abfb5d..ebe0d6d5f 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/SentinelCircuitBreakerIntegrationTest.java +++ b/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/SentinelCircuitBreakerIntegrationTest.java @@ -39,6 +39,7 @@ import org.springframework.stereotype.Service; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import static org.assertj.core.api.Assertions.assertThat; @@ -59,21 +60,24 @@ public class SentinelCircuitBreakerIntegrationTest { @Test public void testSlow() throws Exception { - // The first 5 requests should pass. - assertThat(service.slow()).isEqualTo("slow"); - assertThat(service.slow()).isEqualTo("slow"); - assertThat(service.slow()).isEqualTo("slow"); - assertThat(service.slow()).isEqualTo("slow"); - assertThat(service.slow()).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); + assertThat(service.slow(false)).isEqualTo("slow"); + assertThat(service.slow(false)).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); // Then in the next 10s, the fallback method should be called. - for (int i = 0; i < 10; i++) { - assertThat(service.slow()).isEqualTo("fallback"); + for (int i = 0; i < 5; i++) { + assertThat(service.slow(true)).isEqualTo("fallback"); Thread.sleep(1000); } + // Try a normal request. + assertThat(service.slow(false)).isEqualTo("slow"); // Recovered. - assertThat(service.slow()).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); } @Test @@ -97,8 +101,10 @@ public class SentinelCircuitBreakerIntegrationTest { protected static class Application { @GetMapping("/slow") - public String slow() throws InterruptedException { - Thread.sleep(500); + public String slow(@RequestParam(required = false) Boolean slow) throws InterruptedException { + if (slow == null || slow) { + Thread.sleep(80); + } return "slow"; } @@ -112,14 +118,15 @@ public class SentinelCircuitBreakerIntegrationTest { String slowId = "slow"; List rules = Collections.singletonList( new DegradeRule(slowId).setGrade(RuleConstant.DEGRADE_GRADE_RT) - .setCount(100).setTimeWindow(10)); + .setCount(50).setSlowRatioThreshold(0.7).setMinRequestAmount(5) + .setStatIntervalMs(30000).setTimeWindow(5)); return factory -> { factory.configure(builder -> builder.rules(rules), slowId); factory.configureDefault(id -> new SentinelConfigBuilder() .resourceName(id) .rules(Collections.singletonList(new DegradeRule(id) .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) - .setCount(0.5).setTimeWindow(10))) + .setCount(10).setStatIntervalMs(10000).setTimeWindow(10))) .build()); }; } @@ -137,9 +144,9 @@ public class SentinelCircuitBreakerIntegrationTest { this.cbFactory = cbFactory; } - public String slow() { + public String slow(boolean slow) { return cbFactory.create("slow").run( - () -> rest.getForObject("/slow", String.class), t -> "fallback"); + () -> rest.getForObject("/slow?slow=" + slow, String.class), t -> "fallback"); } public String normal() {