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  }