@@ -12,6 +12,38 @@ import (
12
12
// compensate for a few milliseconds of runtime.
13
13
const ONE_SECOND = 1 * time .Second + 10 * time .Millisecond
14
14
15
+ func TestFuncPanicRecovery (t * testing.T ) {
16
+ cron := New ()
17
+ cron .Start ()
18
+ defer cron .Stop ()
19
+ cron .AddFunc ("" , "* * * * * ?" , func () { panic ("YOLO" ) })
20
+
21
+ select {
22
+ case <- time .After (ONE_SECOND ):
23
+ return
24
+ }
25
+ }
26
+
27
+ type DummyJob struct {}
28
+
29
+ func (d DummyJob ) Run () {
30
+ panic ("YOLO" )
31
+ }
32
+
33
+ func TestJobPanicRecovery (t * testing.T ) {
34
+ var job DummyJob
35
+
36
+ cron := New ()
37
+ cron .Start ()
38
+ defer cron .Stop ()
39
+ cron .AddJob ("" , "* * * * * ?" , job )
40
+
41
+ select {
42
+ case <- time .After (ONE_SECOND ):
43
+ return
44
+ }
45
+ }
46
+
15
47
// Start and stop cron with no entries.
16
48
func TestNoEntries (t * testing.T ) {
17
49
cron := New ()
@@ -32,7 +64,7 @@ func TestStopCausesJobsToNotRun(t *testing.T) {
32
64
cron := New ()
33
65
cron .Start ()
34
66
cron .Stop ()
35
- cron .AddFunc ("* * * * * ?" , func () { wg .Done () })
67
+ cron .AddFunc ("" , " * * * * * ?" , func () { wg .Done () })
36
68
37
69
select {
38
70
case <- time .After (ONE_SECOND ):
@@ -48,7 +80,7 @@ func TestAddBeforeRunning(t *testing.T) {
48
80
wg .Add (1 )
49
81
50
82
cron := New ()
51
- cron .AddFunc ("* * * * * ?" , func () { wg .Done () })
83
+ cron .AddFunc ("" , " * * * * * ?" , func () { wg .Done () })
52
84
cron .Start ()
53
85
defer cron .Stop ()
54
86
@@ -68,7 +100,7 @@ func TestAddWhileRunning(t *testing.T) {
68
100
cron := New ()
69
101
cron .Start ()
70
102
defer cron .Stop ()
71
- cron .AddFunc ("* * * * * ?" , func () { wg .Done () })
103
+ cron .AddFunc ("" , " * * * * * ?" , func () { wg .Done () })
72
104
73
105
select {
74
106
case <- time .After (ONE_SECOND ):
@@ -77,13 +109,29 @@ func TestAddWhileRunning(t *testing.T) {
77
109
}
78
110
}
79
111
112
+ // Test for #34. Adding a job after calling start results in multiple job invocations
113
+ func TestAddWhileRunningWithDelay (t * testing.T ) {
114
+ cron := New ()
115
+ cron .Start ()
116
+ defer cron .Stop ()
117
+ time .Sleep (5 * time .Second )
118
+ var calls = 0
119
+ cron .AddFunc ("" , "* * * * * *" , func () { calls += 1 })
120
+
121
+ <- time .After (ONE_SECOND )
122
+ if calls != 1 {
123
+ fmt .Printf ("called %d times, expected 1\n " , calls )
124
+ t .Fail ()
125
+ }
126
+ }
127
+
80
128
// Test timing with Entries.
81
129
func TestSnapshotEntries (t * testing.T ) {
82
130
wg := & sync.WaitGroup {}
83
131
wg .Add (1 )
84
132
85
133
cron := New ()
86
- cron .AddFunc ("@every 2s" , func () { wg .Done () })
134
+ cron .AddFunc ("" , " @every 2s" , func () { wg .Done () })
87
135
cron .Start ()
88
136
defer cron .Stop ()
89
137
@@ -111,10 +159,10 @@ func TestMultipleEntries(t *testing.T) {
111
159
wg .Add (2 )
112
160
113
161
cron := New ()
114
- cron .AddFunc ("0 0 0 1 1 ?" , func () {})
115
- cron .AddFunc ("* * * * * ?" , func () { wg .Done () })
116
- cron .AddFunc ("0 0 0 31 12 ?" , func () {})
117
- cron .AddFunc ("* * * * * ?" , func () { wg .Done () })
162
+ cron .AddFunc ("" , " 0 0 0 1 1 ?" , func () {})
163
+ cron .AddFunc ("" , " * * * * * ?" , func () { wg .Done () })
164
+ cron .AddFunc ("" , " 0 0 0 31 12 ?" , func () {})
165
+ cron .AddFunc ("" , " * * * * * ?" , func () { wg .Done () })
118
166
119
167
cron .Start ()
120
168
defer cron .Stop ()
@@ -132,9 +180,9 @@ func TestRunningJobTwice(t *testing.T) {
132
180
wg .Add (2 )
133
181
134
182
cron := New ()
135
- cron .AddFunc ("0 0 0 1 1 ?" , func () {})
136
- cron .AddFunc ("0 0 0 31 12 ?" , func () {})
137
- cron .AddFunc ("* * * * * ?" , func () { wg .Done () })
183
+ cron .AddFunc ("" , " 0 0 0 1 1 ?" , func () {})
184
+ cron .AddFunc ("" , " 0 0 0 31 12 ?" , func () {})
185
+ cron .AddFunc ("" , " * * * * * ?" , func () { wg .Done () })
138
186
139
187
cron .Start ()
140
188
defer cron .Stop ()
@@ -151,12 +199,12 @@ func TestRunningMultipleSchedules(t *testing.T) {
151
199
wg .Add (2 )
152
200
153
201
cron := New ()
154
- cron .AddFunc ("0 0 0 1 1 ?" , func () {})
155
- cron .AddFunc ("0 0 0 31 12 ?" , func () {})
156
- cron .AddFunc ("* * * * * ?" , func () { wg .Done () })
157
- cron .Schedule (Every (time .Minute ), FuncJob (func () {}))
158
- cron .Schedule (Every (time .Second ), FuncJob (func () { wg .Done () }))
159
- cron .Schedule (Every (time .Hour ), FuncJob (func () {}))
202
+ cron .AddFunc ("" , " 0 0 0 1 1 ?" , func () {})
203
+ cron .AddFunc ("" , " 0 0 0 31 12 ?" , func () {})
204
+ cron .AddFunc ("" , " * * * * * ?" , func () { wg .Done () })
205
+ cron .Schedule ("" , "" , Every (time .Minute ), FuncJob (func () {}))
206
+ cron .Schedule ("" , "" , Every (time .Second ), FuncJob (func () { wg .Done () }))
207
+ cron .Schedule ("" , "" , Every (time .Hour ), FuncJob (func () {}))
160
208
161
209
cron .Start ()
162
210
defer cron .Stop ()
@@ -178,7 +226,7 @@ func TestLocalTimezone(t *testing.T) {
178
226
now .Second ()+ 1 , now .Minute (), now .Hour (), now .Day (), now .Month ())
179
227
180
228
cron := New ()
181
- cron .AddFunc (spec , func () { wg .Done () })
229
+ cron .AddFunc ("" , spec , func () { wg .Done () })
182
230
cron .Start ()
183
231
defer cron .Stop ()
184
232
@@ -211,12 +259,12 @@ func TestJob(t *testing.T) {
211
259
wg .Add (1 )
212
260
213
261
cron := New ()
214
- cron .AddJob ("0 0 0 30 Feb ?" , testJob {wg , "job0" })
215
- cron .AddJob ("0 0 0 1 1 ?" , testJob {wg , "job1" })
216
- cron .AddJob ("* * * * * ?" , testJob {wg , "job2" })
217
- cron .AddJob ("1 0 0 1 1 ?" , testJob {wg , "job3" })
218
- cron .Schedule (Every (5 * time .Second + 5 * time .Nanosecond ), testJob {wg , "job4" })
219
- cron .Schedule (Every (5 * time .Minute ), testJob {wg , "job5" })
262
+ cron .AddJob ("" , " 0 0 0 30 Feb ?" , testJob {wg , "job0" })
263
+ cron .AddJob ("" , " 0 0 0 1 1 ?" , testJob {wg , "job1" })
264
+ cron .AddJob ("" , " * * * * * ?" , testJob {wg , "job2" })
265
+ cron .AddJob ("" , " 1 0 0 1 1 ?" , testJob {wg , "job3" })
266
+ cron .Schedule ("" , "" , Every (5 * time .Second + 5 * time .Nanosecond ), testJob {wg , "job4" })
267
+ cron .Schedule ("" , "" , Every (5 * time .Minute ), testJob {wg , "job5" })
220
268
221
269
cron .Start ()
222
270
defer cron .Stop ()
0 commit comments