Skip to content

Commit

Permalink
Update reactive tests to use transform api
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanjbaxter committed Apr 19, 2019
1 parent fb565d9 commit bf4056a
Show file tree
Hide file tree
Showing 15 changed files with 123 additions and 125 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ public CircuitBreakerFactory hystrixCircuitBreakerFactory() {

@Bean
@ConditionalOnMissingBean(ReactiveCircuitBreakerFactory.class)
@ConditionalOnClass(name = { "reactor.core.publisher.Mono",
"reactor.core.publisher.Flux" })
@ConditionalOnClass(
name = { "reactor.core.publisher.Mono", "reactor.core.publisher.Flux" })
public ReactiveHystrixCircuitBreakerFactory reactiveHystrixCircuitBreakerFactory() {
return new ReactiveHystrixCircuitBreakerFactory();
}
Expand All @@ -70,8 +70,8 @@ public void init() {
}

@Configuration
@ConditionalOnClass(name = { "reactor.core.publisher.Mono",
"reactor.core.publisher.Flux" })
@ConditionalOnClass(
name = { "reactor.core.publisher.Mono", "reactor.core.publisher.Flux" })
protected static class ReactiveHystrixCircuitBreakerCustomizerConfiguration {

@Autowired(required = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@
* @author Ryan Baxter
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT, classes = HystrixCircuitBreakerIntegrationTest.Application.class)
@SpringBootTest(webEnvironment = RANDOM_PORT,
classes = HystrixCircuitBreakerIntegrationTest.Application.class)
@DirtiesContext
public class HystrixCircuitBreakerIntegrationTest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@
* @author Ryan Baxter
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT, classes = ReactiveHystrixCircuitBreakerIntegrationTest.Application.class)
@SpringBootTest(webEnvironment = RANDOM_PORT,
classes = ReactiveHystrixCircuitBreakerIntegrationTest.Application.class)
@DirtiesContext
public class ReactiveHystrixCircuitBreakerIntegrationTest {

Expand Down Expand Up @@ -119,23 +120,21 @@ public static class DemoControllerService {
}

public Mono<String> slow() {
return cbFactory.create("slow").run(
WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/slow").retrieve().bodyToMono(String.class),
t -> {
return WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/slow").retrieve().bodyToMono(String.class)
.transform(it -> cbFactory.create("slow").run(it, t -> {
t.printStackTrace();
return Mono.just("fallback");
});
}));
}

public Mono<String> normal() {
return cbFactory.create("normal").run(
WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/normal").retrieve().bodyToMono(String.class),
t -> {
return WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/normal").retrieve().bodyToMono(String.class)
.transform(it -> cbFactory.create("normal").run(it, t -> {
t.printStackTrace();
return Mono.just("fallback");
});
}));
}

public void setPort(int port) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,25 +34,26 @@ public class ReactiveHystrixCircuitBreakerTest {
public void monoRun() {
ReactiveCircuitBreaker cb = new ReactiveHystrixCircuitBreakerFactory()
.create("foo");
Mono<String> s = cb.run(Mono.just("foobar"), t -> Mono.just("fallback"));
Mono<String> s = Mono.just("foobar")
.transform(it -> cb.run(it, t -> Mono.just("fallback")));
assertThat(s.block()).isEqualTo("foobar");
}

@Test
public void monoFallback() {
ReactiveCircuitBreaker cb = new ReactiveHystrixCircuitBreakerFactory()
.create("foo");
assertThat(cb
.run(Mono.error(new RuntimeException("boom")), t -> Mono.just("fallback"))
.block()).isEqualTo("fallback");
assertThat(Mono.error(new RuntimeException("boom"))
.transform(it -> cb.run(it, t -> Mono.just("fallback"))).block())
.isEqualTo("fallback");
}

@Test
public void fluxRun() {
ReactiveCircuitBreaker cb = new ReactiveHystrixCircuitBreakerFactory()
.create("foo");
Flux<String> s = cb.run(Flux.just("foobar", "hello world"),
t -> Flux.just("fallback"));
Flux<String> s = Flux.just("foobar", "hello world")
.transform(it -> cb.run(it, t -> Flux.just("fallback")));
assertThat(s.collectList().block())
.isEqualTo(Arrays.asList(new String[] { "foobar", "hello world" }));
}
Expand All @@ -61,10 +62,9 @@ public void fluxRun() {
public void fluxFallback() {
ReactiveCircuitBreaker cb = new ReactiveHystrixCircuitBreakerFactory()
.create("foo");
assertThat(cb
.run(Flux.error(new RuntimeException("boom")), t -> Flux.just("fallback"))
.collectList().block())
.isEqualTo(Arrays.asList(new String[] { "fallback" }));
assertThat(Flux.error(new RuntimeException("boom"))
.transform(it -> cb.run(it, t -> Flux.just("fallback"))).collectList()
.block()).isEqualTo(Arrays.asList(new String[] { "fallback" }));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
* @author Ryan Baxter
*/
@Configuration
@ConditionalOnClass(name = { "reactor.core.publisher.Mono",
"reactor.core.publisher.Flux" })
@ConditionalOnClass(
name = { "reactor.core.publisher.Mono", "reactor.core.publisher.Flux" })
public class ReactiveResilience4JAutoConfiguration {

@Bean
Expand All @@ -44,8 +44,8 @@ public ReactiveCircuitBreakerFactory reactiveResilience4JCircuitBreakerFactory()
}

@Configuration
@ConditionalOnClass(name = { "reactor.core.publisher.Mono",
"reactor.core.publisher.Flux" })
@ConditionalOnClass(
name = { "reactor.core.publisher.Mono", "reactor.core.publisher.Flux" })
public static class ReactiveResilience4JCustomizerConfiguration {

@Autowired(required = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@
* @author Ryan Baxter
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT, classes = ReactiveResilience4JCircuitBreakerIntegrationTest.Application.class)
@SpringBootTest(webEnvironment = RANDOM_PORT,
classes = ReactiveResilience4JCircuitBreakerIntegrationTest.Application.class)
@DirtiesContext
public class ReactiveResilience4JCircuitBreakerIntegrationTest {

Expand Down Expand Up @@ -181,44 +182,40 @@ public static class DemoControllerService {
}

public Mono<String> slow() {
return cbFactory.create("slow").run(
WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/slow").retrieve().bodyToMono(String.class),
t -> {
return WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/slow").retrieve().bodyToMono(String.class)
.transform(it -> cbFactory.create("slow").run(it, t -> {
t.printStackTrace();
return Mono.just("fallback");
});
}));
}

public Mono<String> normal() {
return cbFactory.create("normal").run(
WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/normal").retrieve().bodyToMono(String.class),
t -> {
return WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/normal").retrieve().bodyToMono(String.class)
.transform(it -> cbFactory.create("normal").run(it, t -> {
t.printStackTrace();
return Mono.just("fallback");
});
}));
}

public Flux<String> slowFlux() {
return cbFactory.create("slowflux")
.run(WebClient.builder().baseUrl("http://localhost:" + port)
.build().get().uri("/slowflux").retrieve()
.bodyToFlux(new ParameterizedTypeReference<String>() {
}), t -> {
t.printStackTrace();
return Flux.just("fluxfallback");
});
return WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/slowflux").retrieve()
.bodyToFlux(new ParameterizedTypeReference<String>() {
}).transform(it -> cbFactory.create("slowflux").run(it, t -> {
t.printStackTrace();
return Flux.just("fluxfallback");
}));
}

public Flux<String> normalFlux() {
return cbFactory.create("normalflux")
.run(WebClient.builder().baseUrl("http://localhost:" + port)
.build().get().uri("/normalflux").retrieve()
.bodyToFlux(String.class), t -> {
t.printStackTrace();
return Flux.just("fluxfallback");
});
return WebClient.builder().baseUrl("http://localhost:" + port).build()
.get().uri("/normalflux").retrieve().bodyToFlux(String.class)
.transform(it -> cbFactory.create("normalflux").run(it, t -> {
t.printStackTrace();
return Flux.just("fluxfallback");
}));
}

public void setPort(int port) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,33 +35,34 @@ public class ReactiveResilience4JCircuitBreakerTest {
public void runMono() {
ReactiveCircuitBreaker cb = new ReactiveResilience4JCircuitBreakerFactory()
.create("foo");
assertThat(cb.run(Mono.just("foobar")).block()).isEqualTo("foobar");
assertThat(Mono.just("foobar").transform(it -> cb.run(it)).block())
.isEqualTo("foobar");
}

@Test
public void runMonoWithFallback() {
ReactiveCircuitBreaker cb = new ReactiveResilience4JCircuitBreakerFactory()
.create("foo");
assertThat(cb
.run(Mono.error(new RuntimeException("boom")), t -> Mono.just("fallback"))
.block()).isEqualTo("fallback");
assertThat(Mono.error(new RuntimeException("boom"))
.transform(it -> cb.run(it, t -> Mono.just("fallback"))).block())
.isEqualTo("fallback");
}

@Test
public void runFlux() {
ReactiveCircuitBreaker cb = new ReactiveResilience4JCircuitBreakerFactory()
.create("foo");
assertThat(cb.run(Flux.just("foobar", "hello world")).collectList().block())
.isEqualTo(Arrays.asList("foobar", "hello world"));
assertThat(Flux.just("foobar", "hello world").transform(it -> cb.run(it))
.collectList().block()).isEqualTo(Arrays.asList("foobar", "hello world"));
}

@Test
public void runFluxWithFallback() {
ReactiveCircuitBreaker cb = new ReactiveResilience4JCircuitBreakerFactory()
.create("foo");
assertThat(cb
.run(Flux.error(new RuntimeException("boom")), t -> Flux.just("fallback"))
.collectList().block()).isEqualTo(Arrays.asList("fallback"));
assertThat(Flux.error(new RuntimeException("boom"))
.transform(it -> cb.run(it, t -> Flux.just("fallback"))).collectList()
.block()).isEqualTo(Arrays.asList("fallback"));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@
* @author Ryan Baxter
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT, classes = Resilience4JCircuitBreakerIntegrationTest.Application.class)
@SpringBootTest(webEnvironment = RANDOM_PORT,
classes = Resilience4JCircuitBreakerIntegrationTest.Application.class)
@DirtiesContext
public class Resilience4JCircuitBreakerIntegrationTest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
* @author Eric Zhao
*/
@Configuration
@ConditionalOnClass(name = { "reactor.core.publisher.Mono",
"reactor.core.publisher.Flux" })
@ConditionalOnClass(
name = { "reactor.core.publisher.Mono", "reactor.core.publisher.Flux" })
public class ReactiveSentinelCircuitBreakerAutoConfiguration {

@Bean
Expand All @@ -45,8 +45,8 @@ public ReactiveCircuitBreakerFactory reactiveSentinelCircuitBreakerFactory() {
}

@Configuration
@ConditionalOnClass(name = { "reactor.core.publisher.Mono",
"reactor.core.publisher.Flux" })
@ConditionalOnClass(
name = { "reactor.core.publisher.Mono", "reactor.core.publisher.Flux" })
public static class ReactiveSentinelCustomizerConfiguration {

@Autowired(required = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public class SentinelCircuitBreaker implements CircuitBreaker {
private final List<DegradeRule> rules;

public SentinelCircuitBreaker(String resourceName, EntryType entryType,
List<DegradeRule> rules) {
List<DegradeRule> rules) {
Assert.hasText(resourceName, "resourceName cannot be blank");
Assert.notNull(rules, "rules should not be null");
this.resourceName = resourceName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,16 @@
* @author Eric Zhao
*/
public class SentinelCircuitBreakerFactory extends
CircuitBreakerFactory<SentinelConfigBuilder.SentinelCircuitBreakerConfiguration, SentinelConfigBuilder> {
CircuitBreakerFactory<SentinelConfigBuilder.SentinelCircuitBreakerConfiguration, SentinelConfigBuilder> {

private Function<String, SentinelConfigBuilder.SentinelCircuitBreakerConfiguration> defaultConfiguration = id -> new SentinelConfigBuilder()
.resourceName(id)
.entryType(EntryType.OUT)
.rules(new ArrayList<>())
.build();
.resourceName(id).entryType(EntryType.OUT).rules(new ArrayList<>()).build();

@Override
public CircuitBreaker create(String id) {
Assert.hasText(id, "A CircuitBreaker must have an id.");
SentinelConfigBuilder.SentinelCircuitBreakerConfiguration conf = getConfigurations()
.computeIfAbsent(id, defaultConfiguration);
.computeIfAbsent(id, defaultConfiguration);
return new SentinelCircuitBreaker(id, conf.getEntryType(), conf.getRules());
}

Expand All @@ -53,7 +50,7 @@ protected SentinelConfigBuilder configBuilder(String id) {

@Override
public void configureDefault(
Function<String, SentinelCircuitBreakerConfiguration> defaultConfiguration) {
Function<String, SentinelCircuitBreakerConfiguration> defaultConfiguration) {
this.defaultConfiguration = defaultConfiguration;
}

Expand Down
Loading

0 comments on commit bf4056a

Please sign in to comment.