gitee.com/h79/goutils@v1.22.10/common/scheduler/cron_test.go (about) 1 package scheduler 2 3 import ( 4 "fmt" 5 "reflect" 6 "testing" 7 "time" 8 ) 9 10 func assertEqual(t *testing.T, a interface{}, b interface{}) { 11 if !reflect.DeepEqual(a, b) { 12 t.Fatalf("%v != %v", a, b) 13 } 14 } 15 16 func TestCronExpression1(t *testing.T) { 17 prev := int64(1555351200000000000) 18 result := "" 19 cronTrigger, err := NewCronTrigger("10/20 15 14 5-10 ? *") 20 cronTrigger.WithLocation(time.UTC).Description() 21 if err != nil { 22 t.Fatal(err) 23 } else { 24 result, _ = iterate(prev, cronTrigger, 1000) 25 } 26 assertEqual(t, result, "Fri Dec 8 14:15:10 2023") 27 } 28 29 func TestCronExpression2(t *testing.T) { 30 prev := int64(1555351200000000000) 31 result := "" 32 cronTrigger, err := NewCronTrigger("* 5,7,9 14-16 * * ?") 33 if err != nil { 34 t.Fatal(err) 35 } else { 36 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 1000) 37 } 38 assertEqual(t, result, "Mon Aug 5 14:05:00 2019") 39 } 40 41 func TestCronExpression3(t *testing.T) { 42 prev := int64(1555351200000000000) 43 result := "" 44 cronTrigger, err := NewCronTrigger("* 5,7,9 14/2 * * Wed,Sat") 45 if err != nil { 46 t.Fatal(err) 47 } else { 48 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 1000) 49 } 50 t.Log(result) 51 } 52 53 func TestCronExpression4(t *testing.T) { 54 expression := "0 5,7 14 1 * Sun" 55 _, err := NewCronTrigger(expression) 56 if err != nil { 57 t.Fatalf("%s should fail", expression) 58 } 59 } 60 61 func TestCronExpression5(t *testing.T) { 62 prev := int64(1555351200000000000) 63 result := "" 64 cronTrigger, err := NewCronTrigger("* * * * * ?") 65 if err != nil { 66 t.Fatal(err) 67 } else { 68 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 1000) 69 } 70 assertEqual(t, result, "Mon Apr 15 18:16:40 2019") 71 } 72 73 func TestCronExpression6(t *testing.T) { 74 prev := int64(1555351200000000000) 75 result := "" 76 cronTrigger, err := NewCronTrigger("* * 14/2 * * mon/3") 77 if err != nil { 78 t.Fatal(err) 79 } else { 80 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 1000) 81 } 82 assertEqual(t, result, "Mon Mar 15 18:00:00 2021") 83 } 84 85 func TestCronExpression7(t *testing.T) { 86 prev := int64(1555351200000000000) 87 result := "" 88 cronTrigger, err := NewCronTrigger("* 5-9 14/2 * * 1-3") 89 if err != nil { 90 t.Fatal(err) 91 } else { 92 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 1000) 93 } 94 assertEqual(t, result, "Tue Jul 16 16:09:00 2019") 95 } 96 97 func TestCronExpression8(t *testing.T) { 98 prev := int64(1555351200000000000) 99 t.Log(time.Unix(0, prev).In(time.UTC)) 100 result := "" 101 cronTrigger, err := NewCronTrigger("*/3 */51 */12 */2 */4 ?") 102 if err != nil { 103 t.Fatal(err) 104 } else { 105 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 1000) 106 } 107 assertEqual(t, result, "Sat Sep 7 12:00:00 2019") 108 } 109 110 func TestCronYearly(t *testing.T) { 111 prev := int64(1555351200000000000) 112 result := "" 113 cronTrigger, err := NewCronTrigger("@yearly") 114 if err != nil { 115 t.Fatal(err) 116 } else { 117 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 100) 118 } 119 assertEqual(t, result, "Sun Jan 1 00:00:00 2119") 120 } 121 122 func TestCronMonthly(t *testing.T) { 123 prev := int64(1555351200000000000) 124 result := "" 125 cronTrigger, err := NewCronTrigger("@monthly") 126 if err != nil { 127 t.Fatal(err) 128 } else { 129 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 100) 130 } 131 assertEqual(t, result, "Sun Aug 1 00:00:00 2027") 132 } 133 134 func TestCronWeekly(t *testing.T) { 135 prev := int64(1555351200000000000) 136 result := "" 137 cronTrigger, err := NewCronTrigger("@weekly") 138 if err != nil { 139 t.Fatal(err) 140 } else { 141 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 100) 142 } 143 assertEqual(t, result, "Sun Mar 14 00:00:00 2021") 144 } 145 146 func TestCronDaily(t *testing.T) { 147 prev := int64(1555351200000000000) 148 result := "" 149 cronTrigger, err := NewCronTrigger("@daily") 150 if err != nil { 151 t.Fatal(err) 152 } else { 153 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 1000) 154 } 155 assertEqual(t, result, "Sun Jan 9 00:00:00 2022") 156 } 157 158 func TestCronHourly(t *testing.T) { 159 prev := int64(1555351200000000000) 160 result := "" 161 cronTrigger, err := NewCronTrigger("@hourly") 162 if err != nil { 163 t.Fatal(err) 164 } else { 165 result, _ = iterate(prev, cronTrigger.WithLocation(time.UTC), 1000) 166 } 167 assertEqual(t, result, "Mon May 27 10:00:00 2019") 168 } 169 170 var readDateLayout = "Mon Jan 2 15:04:05 2006" 171 172 func iterate(prev int64, cronTrigger *CronTrigger, iterations int) (string, error) { 173 var err error 174 for i := 0; i < iterations; i++ { 175 prev, err = cronTrigger.NextFireTime(prev) 176 if err != nil { 177 fmt.Println(err) 178 return "", err 179 } 180 } 181 return time.Unix(prev/int64(time.Second), 0).In(time.UTC).Format(readDateLayout), nil 182 }