add test for task
Showing
3 changed files
with
77 additions
and
18 deletions
| ... | @@ -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 | } | ... | ... |
-
Please register or sign in to post a comment