/
delayed_limited_strategy_test.go
129 lines (88 loc) · 3.39 KB
/
delayed_limited_strategy_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package retoil
import (
"testing"
"github.com/reiver/go-toil/toiltest"
"sync"
)
func TestRetoilWithDelayedLimitedStrategy(t *testing.T) {
toiler := toiltest.NewRecorder()
numToiled := 0
var toiledWaitGroup sync.WaitGroup
toiledWaitGroup.Add(1)
toiler.ToilFunc(func(){
numToiled++
toiledWaitGroup.Done()
})
numPanicked := 0
var panickedWaitGroup sync.WaitGroup
toiler.PanickedNoticeFunc(func(panicValue interface{}){
numPanicked++
panickedWaitGroup.Done()
})
retoiler := New(toiler, DelayedLimitedStrategy(2, 0)) // NOTE that the 2 means we can only panic() this toiler 2 times before panic()s get through!
if expected, actual := 0, numToiled; expected != actual {
t.Errorf("Expected number of times toiled to be %d, but actually was %d.", expected, actual)
}
if expected, actual := 0, numPanicked; expected != actual {
t.Errorf("Expected number of times panicked to be %d, but actually was %d.", expected, actual)
}
var finalPanicValue interface{} = nil
go func() {
defer func() {
if expected, actual := 3, numToiled; expected != actual {
t.Errorf("Expected number of times toiled to be %d, but actually was %d.", expected, actual)
}
if panicValue := recover(); nil != panicValue {
if expected, actual := panicValue, finalPanicValue; expected != actual {
t.Errorf("Expected caught panic value to be [%v], but actually was [%v].", expected, actual)
}
} else {
t.Errorf("This should NOT get to this part of the code either!!")
}
}()
retoiler.Toil()
}()
toiledWaitGroup.Wait()
if expected, actual := 1, numToiled; expected != actual {
t.Errorf("Expected number of times toiled to be %d, but actually was %d.", expected, actual)
}
if expected, actual := 0, numPanicked; expected != actual {
t.Errorf("Expected number of times panicked to be %d, but actually was %d.", expected, actual)
}
toiledWaitGroup.Add(1)
panickedWaitGroup.Add(1)
panicValue1 := "Panic panic, panic!!!! [1]"
toiler.Panic(panicValue1)
toiledWaitGroup.Wait()
panickedWaitGroup.Wait()
if expected, actual := 2, numToiled; expected != actual {
t.Errorf("Expected number of times toiled to be %d, but actually was %d.", expected, actual)
}
if expected, actual := 1, numPanicked; expected != actual {
t.Errorf("Expected number of times panicked to be %d, but actually was %d.", expected, actual)
}
toiledWaitGroup.Add(1)
panickedWaitGroup.Add(1)
panicValue2 := "Panic panic, panic!!!! [2]"
toiler.Panic(panicValue2)
toiledWaitGroup.Wait()
panickedWaitGroup.Wait()
if expected, actual := 3, numToiled; expected != actual {
t.Errorf("Expected number of times toiled to be %d, but actually was %d.", expected, actual)
}
if expected, actual := 2, numPanicked; expected != actual {
t.Errorf("Expected number of times panicked to be %d, but actually was %d.", expected, actual)
}
panickedWaitGroup.Add(1)
panicValue3 := "Panic panic, panic!!!! [3]"
finalPanicValue = panicValue3 // <----------------- NOTE we set the finalPanicValue
toiler.Panic(panicValue3)
panickedWaitGroup.Wait()
// V---------- NOTE that sayed as 3.
if expected, actual := 3, numToiled; expected != actual {
t.Errorf("Expected number of times toiled to be %d, but actually was %d.", expected, actual)
}
if expected, actual := 3, numPanicked; expected != actual {
t.Errorf("Expected number of times panicked to be %d, but actually was %d.", expected, actual)
}
}