@@ -23,6 +23,14 @@ runNThreads :: Int -> Int -> Scheduler -> IO ()
23
23
runNThreads n delay sched = do threads <- replicateM n (forkIO $ run sched)
24
24
threadDelay delay
25
25
mapM_ killThread threads
26
+
27
+ createSch :: T. Text -> IO Scheduler
28
+ createSch n = createSch' n print
29
+
30
+ createSch' :: T. Text -> Logger -> IO Scheduler
31
+ createSch' n l = do rconn <- R. connect R. defaultConnectInfo
32
+ create (Name n) rconn (CheckInterval (Seconds 1 )) (LockTimeout (Seconds 1000 )) l
33
+
26
34
main :: IO ()
27
35
main = hspec $
28
36
do describe " shouldRun" $
@@ -39,8 +47,7 @@ main = hspec $
39
47
describe " simple job" $
40
48
do it " should run " $
41
49
do mvar <- newMVar 0
42
- rconn <- R. connect R. defaultConnectInfo
43
- scheduler <- create (Name " simple-1" ) rconn (CheckInterval (Seconds 1 )) (LockTimeout (Seconds 1000 ))
50
+ scheduler <- createSch " simple-1"
44
51
addTask scheduler " job" (Every (Seconds 100 )) (modifyMVarMasked_ mvar (return . (+ 1 )))
45
52
46
53
runNThreads 1 30000 scheduler
@@ -50,17 +57,15 @@ main = hspec $
50
57
1 `shouldBe` v
51
58
it " should only run once per scheduled time" $
52
59
do mvar <- newMVar 0
53
- rconn <- R. connect R. defaultConnectInfo
54
- scheduler <- create (Name " simple-2" ) rconn (CheckInterval (Seconds 1 )) (LockTimeout (Seconds 1000 ))
60
+ scheduler <- createSch " simple-2"
55
61
addTask scheduler " job" (Every (Seconds 100 )) (modifyMVarMasked_ mvar (return . (+ 1 )))
56
62
runNThreads 3 100000 scheduler
57
63
destroy scheduler
58
64
v <- takeMVar mvar
59
65
v `shouldBe` 1
60
66
it " should run at each time point" $
61
67
do mvar <- newMVar 0
62
- rconn <- R. connect R. defaultConnectInfo
63
- scheduler <- create (Name " simple-3" ) rconn (CheckInterval (Seconds 1 )) (LockTimeout (Seconds 1000 ))
68
+ scheduler <- createSch " simple-3"
64
69
addTask scheduler " job" (Every (Seconds 2 )) (modifyMVarMasked_ mvar (return . (+ 1 )))
65
70
runNThreads 3 4000000 scheduler
66
71
destroy scheduler
@@ -70,8 +75,7 @@ main = hspec $
70
75
(v == 3 || v == 2 ) `shouldBe` True
71
76
it " should run at scheduled time" $
72
77
do mvar <- newMVar 0
73
- rconn <- R. connect R. defaultConnectInfo
74
- scheduler <- create (Name " simple-4" ) rconn (CheckInterval (Seconds 1 )) (LockTimeout (Seconds 1000 ))
78
+ scheduler <- createSch " simple-4"
75
79
seconds <- utctDayTime <$> getCurrentTime
76
80
addTask scheduler " job" (Daily (Time seconds)) (modifyMVarMasked_ mvar (return . (+ 1 )))
77
81
runNThreads 1 4000000 scheduler
@@ -80,8 +84,7 @@ main = hspec $
80
84
v `shouldBe` 1
81
85
it " should not run at an unscheduled time" $
82
86
do mvar <- newMVar 0
83
- rconn <- R. connect R. defaultConnectInfo
84
- scheduler <- create (Name " simple-4" ) rconn (CheckInterval (Seconds 1 )) (LockTimeout (Seconds 1000 ))
87
+ scheduler <- createSch " simple-4"
85
88
now <- getCurrentTime
86
89
let seconds = utctDayTime $ addUTCTime 3600 now
87
90
addTask scheduler " job" (Daily (Time seconds)) (modifyMVarMasked_ mvar (return . (+ 1 )))
@@ -92,8 +95,7 @@ main = hspec $
92
95
describe " error handling" $
93
96
do it " should keep running jobs if one throws an exception" $
94
97
do mvar <- newMVar 0
95
- rconn <- R. connect R. defaultConnectInfo
96
- scheduler <- create (Name " error-1" ) rconn (CheckInterval (Seconds 1 )) (LockTimeout (Seconds 1000 ))
98
+ scheduler <- createSch' " error-1" (const $ return () )
97
99
addTask scheduler " job-error" (Every (Seconds 100 )) (error " blowing up" )
98
100
thread <- forkIO $ run scheduler
99
101
threadDelay 300000
@@ -103,3 +105,13 @@ main = hspec $
103
105
destroy scheduler
104
106
v <- takeMVar mvar
105
107
1 `shouldBe` v
108
+ it " should send exception to logger" $
109
+ do mvar <- newMVar []
110
+ scheduler <- createSch' " error-1" (\ t -> modifyMVarMasked_ mvar (return . (t: )))
111
+ addTask scheduler " job-error" (Every (Seconds 100 )) (error " blowing up" )
112
+ thread <- forkIO $ run scheduler
113
+ threadDelay 500000
114
+ killThread thread
115
+ destroy scheduler
116
+ v <- takeMVar mvar
117
+ length v `shouldBe` 1
0 commit comments