View Javadoc
1   package net.secodo.jcircuitbreaker.breakstrategy.impl.dsl;
2   
3   import net.secodo.jcircuitbreaker.breaker.execution.ExecutionContext;
4   import net.secodo.jcircuitbreaker.breakstrategy.BreakStrategy;
5   import net.secodo.jcircuitbreaker.task.Task;
6   import org.junit.Assert;
7   import org.junit.Test;
8   import static org.hamcrest.CoreMatchers.equalTo;
9   import static org.mockito.Matchers.any;
10  import static org.mockito.Mockito.mock;
11  import static org.mockito.Mockito.when;
12  
13  
14  @SuppressWarnings("unchecked")
15  public class DslOrStrategyTest {
16  
17    @Test
18    public void shouldBreakIfBothStrategiesDecidesToBreak() throws Exception {
19      // given
20      BreakStrategy<?> strategy1 = mock(BreakStrategy.class);
21      BreakStrategy<?> strategy2 = mock(BreakStrategy.class);
22  
23      when(strategy1.shouldBreak(any(Task.class), any(ExecutionContext.class))).thenReturn(true);
24      when(strategy2.shouldBreak(any(Task.class), any(ExecutionContext.class))).thenReturn(true);
25  
26      // when
27      final boolean breakResult = new DslOrStrategy(strategy1, strategy2).shouldBreak(mock(Task.class), mock
28        (ExecutionContext
29        .class));
30  
31      // then
32      Assert.assertThat(breakResult, equalTo(true));
33    }
34  
35    @Test
36    public void shouldBreakIfFirstStrategyDecidesToBreakAndSecondNot() throws Exception {
37      // given
38      BreakStrategy<?> strategy1 = mock(BreakStrategy.class);
39      BreakStrategy<?> strategy2 = mock(BreakStrategy.class);
40  
41      when(strategy1.shouldBreak(any(Task.class), any(ExecutionContext.class))).thenReturn(true);
42      when(strategy2.shouldBreak(any(Task.class), any(ExecutionContext.class))).thenReturn(false);
43  
44      // when
45      final boolean breakResult = new DslOrStrategy(strategy1, strategy2).shouldBreak(mock(Task.class),
46        mock(ExecutionContext.class));
47  
48      // then
49      Assert.assertThat(breakResult, equalTo(true));
50    }
51  
52    @Test
53    public void shouldBreakIfFirstStrategyDecidesNotToBreakAndSecondToBreak() throws Exception {
54      // given
55      BreakStrategy<?> strategy1 = mock(BreakStrategy.class);
56      BreakStrategy<?> strategy2 = mock(BreakStrategy.class);
57  
58      when(strategy1.shouldBreak(any(Task.class), any(ExecutionContext.class))).thenReturn(false);
59      when(strategy2.shouldBreak(any(Task.class), any(ExecutionContext.class))).thenReturn(true);
60  
61      // when
62      final boolean breakResult = new DslOrStrategy(strategy1, strategy2).shouldBreak(mock(Task.class),
63        mock(ExecutionContext.class));
64  
65      // then
66      Assert.assertThat(breakResult, equalTo(true));
67    }
68  
69    @Test
70    public void shouldNotBreakIfBothStrategiesDecidesNotToBreak() throws Exception {
71      // given
72      BreakStrategy<?> strategy1 = mock(BreakStrategy.class);
73      BreakStrategy<?> strategy2 = mock(BreakStrategy.class);
74  
75  
76      when(strategy1.shouldBreak(any(Task.class), any(ExecutionContext.class))).thenReturn(false);
77      when(strategy2.shouldBreak(any(Task.class), any(ExecutionContext.class))).thenReturn(false);
78  
79      // when
80      final boolean breakResult = new DslOrStrategy(strategy1, strategy2).shouldBreak(mock(Task.class),
81        mock(ExecutionContext.class));
82  
83      // then
84      Assert.assertThat(breakResult, equalTo(false));
85    }
86  
87  }