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
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
27 final boolean breakResult = new DslOrStrategy(strategy1, strategy2).shouldBreak(mock(Task.class), mock
28 (ExecutionContext
29 .class));
30
31
32 Assert.assertThat(breakResult, equalTo(true));
33 }
34
35 @Test
36 public void shouldBreakIfFirstStrategyDecidesToBreakAndSecondNot() throws Exception {
37
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
45 final boolean breakResult = new DslOrStrategy(strategy1, strategy2).shouldBreak(mock(Task.class),
46 mock(ExecutionContext.class));
47
48
49 Assert.assertThat(breakResult, equalTo(true));
50 }
51
52 @Test
53 public void shouldBreakIfFirstStrategyDecidesNotToBreakAndSecondToBreak() throws Exception {
54
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
62 final boolean breakResult = new DslOrStrategy(strategy1, strategy2).shouldBreak(mock(Task.class),
63 mock(ExecutionContext.class));
64
65
66 Assert.assertThat(breakResult, equalTo(true));
67 }
68
69 @Test
70 public void shouldNotBreakIfBothStrategiesDecidesNotToBreak() throws Exception {
71
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
80 final boolean breakResult = new DslOrStrategy(strategy1, strategy2).shouldBreak(mock(Task.class),
81 mock(ExecutionContext.class));
82
83
84 Assert.assertThat(breakResult, equalTo(false));
85 }
86
87 }