-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschedule_test.go
125 lines (116 loc) · 2.82 KB
/
schedule_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
package schedly
import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
"time"
)
func TestConstrainedSchedule_Aligned(t *testing.T) {
assert.True(t, (&schedule{aligned: true}).Aligned())
assert.False(t, (&schedule{aligned: false}).Aligned())
}
func mkTime(v string) time.Time {
tm, err := time.Parse(time.RFC3339, v)
if err != nil {
panic(fmt.Sprintf("Wrong time format: %s", v))
}
return tm
}
func TestConstrainedSchedule_CanRun(t *testing.T) {
type fields struct {
tick time.Duration
every time.Duration
aligned bool
constraintFunc func(time.Time) bool
}
type args struct {
moment time.Time
j *job
}
tests := []struct {
name string
fields fields
args args
want bool
}{
{
name: "Wait for alignment",
fields: fields{
tick: time.Second,
every: time.Minute,
aligned: true,
constraintFunc: nil,
},
args: args{
moment: mkTime("2006-01-02T15:04:05Z"),
j : &job{},
},
want: false,
},
{
name: "AlignmentPass",
fields: fields{
tick: time.Second,
every: time.Minute,
aligned: true,
constraintFunc: nil,
},
args: args{
moment: mkTime("2006-01-02T15:04:00Z"),
j : &job{},
},
want: true,
},
{
name: "ConstraintFuncEvenMinute",
fields: fields{
tick: time.Second,
every: time.Minute,
aligned: false,
constraintFunc: func(tm time.Time) bool { return tm.Minute()%2 == 0 },
},
args: args{
moment: mkTime("2006-01-02T15:04:00Z"),
j : &job{},
},
want: true,
},
{
name: "ConstraintFuncOddMinute",
fields: fields{
tick: time.Second,
every: time.Minute,
aligned: false,
constraintFunc: func(tm time.Time) bool { return tm.Minute()%2 == 0 },
},
args: args{
moment: mkTime("2006-01-02T15:05:00Z"),
j : &job{},
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := &schedule{
tick: tt.fields.tick,
every: tt.fields.every,
aligned: tt.fields.aligned,
constraintFunc: tt.fields.constraintFunc,
}
if got := s.CanRun(tt.args.moment, tt.args.j); got != tt.want {
t.Errorf("CanRun() = %v, want %v", got, tt.want)
}
})
}
}
func TestConstrainedSchedule_ConstraintFunc(t *testing.T) {
constraintFunc := func(tm time.Time) bool { return tm.IsZero() }
gotFunc := (&schedule{constraintFunc: constraintFunc}).ConstraintFunc()
assert.Equal(t, gotFunc(time.Time{}), true)
assert.Equal(t, gotFunc(time.Now()), false)
}
func TestConstrainedSchedule_Every(t *testing.T) {
assert.Equal(t, (&schedule{}).SetEvery(time.Minute).Every(), time.Minute)
assert.Equal(t, (&schedule{every: time.Millisecond}).SetEvery(time.Second).Every(), time.Second)
}