github.com/simpleiot/simpleiot@v0.18.3/client/schedule_test.go (about) 1 package client 2 3 import ( 4 "testing" 5 "time" 6 ) 7 8 type testTime struct { 9 t time.Time 10 expected bool 11 } 12 13 type testTable []testTime 14 15 func (tt *testTable) run(t *testing.T, sched *schedule) { 16 for _, test := range *tt { 17 active, err := sched.activeForTime(test.t) 18 19 if err != nil { 20 t.Errorf("got err: %v for time %v", err, test.t) 21 } 22 23 if active != test.expected { 24 t.Errorf("expected %v for time %v", test.expected, test.t) 25 } 26 } 27 } 28 29 func TestScheduleAllDays(t *testing.T) { 30 sched := newSchedule("2:00", "5:00", []time.Weekday{}, nil) 31 32 tests := testTable{ 33 {time.Date(2021, time.February, 10, 4, 0, 0, 0, time.UTC), true}, 34 {time.Date(2021, time.February, 10, 5, 0, 0, 0, time.UTC), false}, 35 } 36 37 tests.run(t, sched) 38 } 39 40 func TestScheduleWeekdays(t *testing.T) { 41 sched := newSchedule("2:00", "5:00", []time.Weekday{0, 6}, nil) 42 43 // 2021-08-09 is a Monday 44 tests := testTable{ 45 {time.Date(2021, time.August, 8, 4, 0, 0, 0, time.UTC), true}, 46 {time.Date(2021, time.August, 10, 4, 0, 0, 0, time.UTC), false}, 47 } 48 49 tests.run(t, sched) 50 } 51 52 func TestScheduleWrapDay(t *testing.T) { 53 sched := newSchedule("20:00", "2:00", []time.Weekday{}, nil) 54 55 // 2021-08-09 is a Monday 56 tests := testTable{ 57 {time.Date(2021, time.August, 9, 21, 0, 0, 0, time.UTC), true}, 58 {time.Date(2021, time.August, 9, 1, 0, 0, 0, time.UTC), true}, 59 } 60 61 tests.run(t, sched) 62 } 63 64 func TestScheduleWrapDayWeekday(t *testing.T) { 65 sched := newSchedule("20:00", "2:00", []time.Weekday{1}, nil) 66 67 // 2021-08-09 is a Monday 68 tests := testTable{ 69 {time.Date(2021, time.August, 9, 21, 0, 0, 0, time.UTC), true}, 70 // the following should is not true as sched starts on previous 71 // weekday 72 {time.Date(2021, time.August, 9, 1, 0, 0, 0, time.UTC), false}, 73 {time.Date(2021, time.August, 10, 1, 0, 0, 0, time.UTC), true}, 74 } 75 76 tests.run(t, sched) 77 } 78 79 func TestScheduleDates(t *testing.T) { 80 sched := newSchedule("2:00", "5:00", nil, []string{"2021-08-01", "2021-08-09", "2021-08-15"}) 81 82 // 2021-08-09 is a Monday 83 tests := testTable{ 84 {time.Date(2021, time.August, 1, 4, 0, 0, 0, time.UTC), true}, 85 {time.Date(2021, time.August, 9, 4, 0, 0, 0, time.UTC), true}, 86 {time.Date(2021, time.August, 10, 4, 0, 0, 0, time.UTC), false}, 87 {time.Date(2021, time.August, 15, 4, 0, 0, 0, time.UTC), true}, 88 {time.Date(2023, time.August, 15, 4, 0, 0, 0, time.UTC), false}, 89 } 90 91 tests.run(t, sched) 92 } 93 94 func TestScheduleWrapDates(t *testing.T) { 95 sched := newSchedule("20:00", "6:00", nil, []string{"2021-08-01", "2021-08-09", "2021-08-15"}) 96 97 // 2021-08-09 is a Monday 98 tests := testTable{ 99 {time.Date(2021, time.August, 1, 21, 0, 0, 0, time.UTC), true}, 100 {time.Date(2021, time.August, 2, 4, 0, 0, 0, time.UTC), true}, 101 {time.Date(2021, time.August, 10, 4, 0, 0, 0, time.UTC), true}, 102 {time.Date(2021, time.August, 9, 4, 0, 0, 0, time.UTC), false}, 103 {time.Date(2021, time.August, 16, 4, 0, 0, 0, time.UTC), true}, 104 {time.Date(2023, time.August, 15, 4, 0, 0, 0, time.UTC), false}, 105 } 106 107 tests.run(t, sched) 108 }