View Javadoc
1   package net.secodo.jcircuitbreaker.breaker.builder.impl;
2   
3   import net.secodo.jcircuitbreaker.breaker.builder.BuilderValidationException;
4   import net.secodo.jcircuitbreaker.breaker.impl.ReusableCircuitBreaker;
5   import net.secodo.jcircuitbreaker.breakhandler.BreakHandler;
6   import net.secodo.jcircuitbreaker.breakstrategy.BreakStrategy;
7   import org.junit.Test;
8   
9   import java.lang.reflect.Field;
10  
11  import static org.hamcrest.CoreMatchers.equalTo;
12  import static org.junit.Assert.assertThat;
13  import static org.mockito.Mockito.mock;
14  
15  
16  @SuppressWarnings("unchecked")
17  public class ReusableCircuitBreakerBuilderTest {
18    @Test(expected = BuilderValidationException.class)
19    public void shouldResultInValidationExceptionWhenBuilderDoesNotDefineAnyProperties() throws Exception {
20      new ReusableCircuitBreakerBuilder<Long>().build();
21    }
22  
23    @Test(expected = BuilderValidationException.class)
24    public void shouldResultInExceptionWhenNoBreakStrategyIsGiven() throws Exception {
25      new ReusableCircuitBreakerBuilder<Long>().withBreakHandler(mock(BreakHandler.class)).build();
26    }
27  
28    @Test(expected = BuilderValidationException.class)
29    public void shouldResultInExceptionWhenNoBreakHandlerIsGiven() throws Exception {
30      new ReusableCircuitBreakerBuilder<Long>().withBreakStrategy(mock(BreakStrategy.class)).build();
31    }
32  
33    @Test
34    public void shouldCreateCircuitBreakerWithBreakStrategyAndBreakHandler() throws Exception {
35      // given
36      final BreakStrategy breakStrategy = mock(BreakStrategy.class);
37      final BreakHandler breakHandler = mock(BreakHandler.class);
38  
39      // when
40      final ReusableCircuitBreaker breaker = new ReusableCircuitBreakerBuilder<Long>().withBreakStrategy(breakStrategy)
41        .withBreakHandler(breakHandler)
42        .build();
43  
44      // then
45      assertThat(getBreakStrategy(breaker), equalTo(breakStrategy));
46      assertThat(getBreakHandler(breaker), equalTo(breakHandler));
47  
48    }
49  
50  
51    private static <R> BreakStrategy<R> getBreakStrategy(ReusableCircuitBreaker<R> circuitBreaker) throws
52      NoSuchFieldException, IllegalAccessException {
53  
54      final Field field = ReusableCircuitBreaker.class.getDeclaredField("breakStrategy");
55      field.setAccessible(true);
56      return (BreakStrategy) field.get(circuitBreaker);
57    }
58  
59    private static <R> BreakHandler<R> getBreakHandler(ReusableCircuitBreaker<R> circuitBreaker) throws
60      NoSuchFieldException, IllegalAccessException {
61  
62      final Field field = ReusableCircuitBreaker.class.getDeclaredField("breakHandler");
63      field.setAccessible(true);
64      return (BreakHandler) field.get(circuitBreaker);
65    }
66  
67  }