b9fb88f5 by astaxie

add test for task

1 parent 54185df4
...@@ -65,6 +65,9 @@ func (admin *AdminApp) Route(pattern string, f http.HandlerFunc) { ...@@ -65,6 +65,9 @@ func (admin *AdminApp) Route(pattern string, f http.HandlerFunc) {
65 } 65 }
66 66
67 func (admin *AdminApp) Run() { 67 func (admin *AdminApp) Run() {
68 if len(toolbox.AdminTaskList) > 0 {
69 toolbox.StartTask()
70 }
68 addr := AdminHttpAddr 71 addr := AdminHttpAddr
69 72
70 if AdminHttpPort != 0 { 73 if AdminHttpPort != 0 {
......
...@@ -126,6 +126,13 @@ func (tk *Task) SetNext(now time.Time) { ...@@ -126,6 +126,13 @@ func (tk *Task) SetNext(now time.Time) {
126 func (tk *Task) GetNext() time.Time { 126 func (tk *Task) GetNext() time.Time {
127 return tk.Next 127 return tk.Next
128 } 128 }
129 func (tk *Task) SetPrev(now time.Time) {
130 tk.Prev = now
131 }
132
133 func (tk *Task) GetPrev() time.Time {
134 return tk.Prev
135 }
129 136
130 //前6个字段分别表示: 137 //前6个字段分别表示:
131 // 秒钟:0-59 138 // 秒钟:0-59
...@@ -141,24 +148,24 @@ func (tk *Task) GetNext() time.Time { ...@@ -141,24 +148,24 @@ func (tk *Task) GetNext() time.Time {
141 //   -:表示一个段,如第三端里: 1-5,就表示1到5点 148 //   -:表示一个段,如第三端里: 1-5,就表示1到5点
142 // /n : 表示每个n的单位执行一次,如第三段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1. 149 // /n : 表示每个n的单位执行一次,如第三段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.
143 ///////////////////////////////////////////////////////// 150 /////////////////////////////////////////////////////////
144 // */30 * * * * * 每30秒 执行 151 // 0/30 * * * * * 每30秒 执行
145 // * 43 21 * * * 21:43 执行 152 // 0 43 21 * * * 21:43 执行
146 // * 15 05 * * *    05:15 执行 153 // 0 15 05 * * *    05:15 执行
147 // * 0 17 * * * 17:00 执行 154 // 0 0 17 * * * 17:00 执行
148 // * 0 17 * * 1 每周一的 17:00 执行 155 // 0 0 17 * * 1 每周一的 17:00 执行
149 // * 0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行 156 // 0 0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行
150 // * 0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行 157 // 0 0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行
151 // * 0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行 158 // 0 0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行
152 // * 42 4 1 * *     毎月1日的 4:42分 执行 159 // 0 42 4 1 * *     毎月1日的 4:42分 执行
153 // * 0 21 * * 1-6   周一到周六 21:00 执行 160 // 0 0 21 * * 1-6   周一到周六 21:00 执行
154 // * 0,10,20,30,40,50 * * * *  每隔10分 执行 161 // 0 0,10,20,30,40,50 * * * *  每隔10分 执行
155 // * */10 * * * *        每隔10分 执行 162 // 0 */10 * * * *        每隔10分 执行
156 // * * 1 * * *         从1:0到1:59 每隔1分钟 执行 163 // 0 * 1 * * *         从1:0到1:59 每隔1分钟 执行
157 // * 0 1 * * *         1:00 执行 164 // 0 0 1 * * *         1:00 执行
158 // * 0 */1 * * *        毎时0分 每隔1小时 执行 165 // 0 0 */1 * * *        毎时0分 每隔1小时 执行
159 // * 0 * * * *         毎时0分 每隔1小时 执行 166 // 0 0 * * * *         毎时0分 每隔1小时 执行
160 // * 2 8-20/3 * * *       8:02,11:02,14:02,17:02,20:02 执行 167 // 0 2 8-20/3 * * *       8:02,11:02,14:02,17:02,20:02 执行
161 // * 30 5 1,15 * *       1日 和 15日的 5:30 执行 168 // 0 30 5 1,15 * *       1日 和 15日的 5:30 执行
162 func (t *Task) SetCron(spec string) { 169 func (t *Task) SetCron(spec string) {
163 t.Spec = t.parse(spec) 170 t.Spec = t.parse(spec)
164 } 171 }
...@@ -561,4 +568,5 @@ func all(r bounds) uint64 { ...@@ -561,4 +568,5 @@ func all(r bounds) uint64 {
561 568
562 func init() { 569 func init() {
563 AdminTaskList = make(map[string]Tasker) 570 AdminTaskList = make(map[string]Tasker)
571 stop = make(chan bool)
564 } 572 }
......
1 package toolbox 1 package toolbox
2
3 import (
4 "fmt"
5 "sync"
6 "testing"
7 "time"
8 )
9
10 func TestParse(t *testing.T) {
11 tk := NewTask("taska", "0/30 * * * * *", func() error { fmt.Println("hello world"); return nil })
12 err := tk.Run()
13 if err != nil {
14 t.Fatal(err)
15 }
16 AddTask("taska", tk)
17 StartTask()
18 time.Sleep(6 * time.Second)
19 StopTask()
20 }
21
22 func TestSpec(t *testing.T) {
23 wg := &sync.WaitGroup{}
24 wg.Add(2)
25 tk1 := NewTask("tk1", "0 12 * * * *", func() error { fmt.Println("tk1"); return nil })
26 tk2 := NewTask("tk2", "0,10,20 * * * * *", func() error { fmt.Println("tk2"); wg.Done(); return nil })
27 tk3 := NewTask("tk3", "0 10 * * * *", func() error { fmt.Println("tk3"); wg.Done(); return nil })
28
29 AddTask("tk1", tk1)
30 AddTask("tk2", tk2)
31 AddTask("tk3", tk3)
32 StartTask()
33 defer StopTask()
34
35 select {
36 case <-time.After(200 * time.Second):
37 t.FailNow()
38 case <-wait(wg):
39 }
40 }
41
42 func wait(wg *sync.WaitGroup) chan bool {
43 ch := make(chan bool)
44 go func() {
45 wg.Wait()
46 ch <- true
47 }()
48 return ch
49 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!