github.com/m-lab/locate@v0.17.6/limits/cron_test.go (about)

     1  package limits
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  )
     7  
     8  func TestSchedule_IsLimited(t *testing.T) {
     9  	tests := []struct {
    10  		name     string
    11  		schedule string
    12  		duration time.Duration
    13  		t        time.Time
    14  		want     bool
    15  	}{
    16  		{
    17  			name:     "within-limit",
    18  			schedule: "15,45 5-11 * * *",
    19  			duration: time.Minute,                                                // At minute 15 and 45, every hour from 5 to 11.
    20  			t:        time.Date(2023, time.November, 16, 10, 15, 0, 0, time.UTC), // At minute 15.
    21  			want:     true,
    22  		},
    23  		{
    24  			name:     "always",
    25  			schedule: "* * * * *", // Every minute.
    26  			duration: time.Minute,
    27  			t:        time.Now().UTC(),
    28  			want:     true,
    29  		},
    30  		{
    31  			name:     "duration-zero",
    32  			schedule: "* * * * *", // Every minute.
    33  			duration: 0,
    34  			t:        time.Now().UTC(),
    35  			want:     false,
    36  		},
    37  		{
    38  			name:     "outside-limit",
    39  			schedule: "15,45 5-11 * * *", // At minute 15 and 45, every hour from 5 to 11.
    40  			duration: time.Minute,
    41  			t:        time.Date(2023, time.November, 16, 10, 25, 0, 0, time.UTC), // At minute 25.
    42  			want:     false,
    43  		},
    44  	}
    45  	for _, tt := range tests {
    46  		t.Run(tt.name, func(t *testing.T) {
    47  			c := NewCron(tt.schedule, tt.duration)
    48  			if got := c.IsLimited(tt.t); got != tt.want {
    49  				t.Errorf("Cron.IsLimited() = %v, want %v", got, tt.want)
    50  			}
    51  		})
    52  	}
    53  }