mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-11-01 02:38:12 +00:00
refine the test case for time drift, calculate next schedule with math
This commit is contained in:
@@ -302,7 +302,7 @@ func TestGroupJobsByParent(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetLatestUnmetScheduleTimes(t *testing.T) {
|
||||
func TestGetNextScheduleTime(t *testing.T) {
|
||||
// schedule is hourly on the hour
|
||||
schedule := "0 * * * ?"
|
||||
|
||||
@@ -344,9 +344,9 @@ func TestGetLatestUnmetScheduleTimes(t *testing.T) {
|
||||
cj.ObjectMeta.CreationTimestamp = metav1.Time{Time: T1.Add(-10 * time.Minute)}
|
||||
// Current time is more than creation time, but less than T1.
|
||||
now := T1.Add(-7 * time.Minute)
|
||||
times := getUnmetScheduleTimes(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if len(times) != 0 {
|
||||
t.Errorf("expected no start times, got: %v", times)
|
||||
schedule := getNextScheduleTime(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if schedule != nil {
|
||||
t.Errorf("expected no start time, got: %v", schedule)
|
||||
}
|
||||
}
|
||||
{
|
||||
@@ -355,11 +355,11 @@ func TestGetLatestUnmetScheduleTimes(t *testing.T) {
|
||||
cj.ObjectMeta.CreationTimestamp = metav1.Time{Time: T1.Add(-10 * time.Minute)}
|
||||
// Current time is after T1
|
||||
now := T1.Add(2 * time.Second)
|
||||
times := getUnmetScheduleTimes(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if len(times) != 1 {
|
||||
t.Errorf("expected 1 start time, got: %v", times)
|
||||
} else if !times[0].Equal(T1) {
|
||||
t.Errorf("expected: %v, got: %v", T1, times[0])
|
||||
schedule := getNextScheduleTime(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if schedule == nil {
|
||||
t.Errorf("expected 1 start time, got nil")
|
||||
} else if !schedule.Equal(T1) {
|
||||
t.Errorf("expected: %v, got: %v", T1, schedule)
|
||||
}
|
||||
}
|
||||
{
|
||||
@@ -370,9 +370,9 @@ func TestGetLatestUnmetScheduleTimes(t *testing.T) {
|
||||
cj.Status.LastScheduleTime = &metav1.Time{Time: T1}
|
||||
// Current time is after T1
|
||||
now := T1.Add(2 * time.Minute)
|
||||
times := getUnmetScheduleTimes(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if len(times) != 0 {
|
||||
t.Errorf("expected 0 start times, got: %v", times)
|
||||
schedule := getNextScheduleTime(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if schedule != nil {
|
||||
t.Errorf("expected 0 start times, got: %v", schedule)
|
||||
}
|
||||
}
|
||||
{
|
||||
@@ -383,11 +383,11 @@ func TestGetLatestUnmetScheduleTimes(t *testing.T) {
|
||||
cj.Status.LastScheduleTime = &metav1.Time{Time: T1}
|
||||
// Current time is after T1 and after T2
|
||||
now := T2.Add(5 * time.Minute)
|
||||
times := getUnmetScheduleTimes(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if len(times) != 1 {
|
||||
t.Errorf("expected 1 start times, got: %v", times)
|
||||
} else if !times[0].Equal(T2) {
|
||||
t.Errorf("expected: %v, got: %v", T1, times[0])
|
||||
schedule := getNextScheduleTime(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if schedule == nil {
|
||||
t.Errorf("expected 1 start times, got nil")
|
||||
} else if !schedule.Equal(T2) {
|
||||
t.Errorf("expected: %v, got: %v", T2, schedule)
|
||||
}
|
||||
}
|
||||
{
|
||||
@@ -396,16 +396,11 @@ func TestGetLatestUnmetScheduleTimes(t *testing.T) {
|
||||
cj.Status.LastScheduleTime = &metav1.Time{Time: T1.Add(-1 * time.Hour)}
|
||||
// Current time is after T1 and after T2
|
||||
now := T2.Add(5 * time.Minute)
|
||||
times := getUnmetScheduleTimes(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if len(times) != 2 {
|
||||
t.Errorf("expected 2 start times, got: %v", times)
|
||||
} else {
|
||||
if !times[0].Equal(T1) {
|
||||
t.Errorf("expected: %v, got: %v", T1, times[0])
|
||||
}
|
||||
if !times[1].Equal(T2) {
|
||||
t.Errorf("expected: %v, got: %v", T2, times[1])
|
||||
}
|
||||
schedule := getNextScheduleTime(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if schedule == nil {
|
||||
t.Errorf("expected 1 start times, got nil")
|
||||
} else if !schedule.Equal(T2) {
|
||||
t.Errorf("expected: %v, got: %v", T2, schedule)
|
||||
}
|
||||
}
|
||||
{
|
||||
@@ -413,8 +408,8 @@ func TestGetLatestUnmetScheduleTimes(t *testing.T) {
|
||||
cj.ObjectMeta.CreationTimestamp = metav1.Time{Time: T1.Add(-2 * time.Hour)}
|
||||
cj.Status.LastScheduleTime = &metav1.Time{Time: T1.Add(-1 * time.Hour)}
|
||||
now := T2.Add(10 * 24 * time.Hour)
|
||||
times := getUnmetScheduleTimes(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if len(times) == 0 {
|
||||
schedule := getNextScheduleTime(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if schedule == nil {
|
||||
t.Errorf("expected more than 0 missed times")
|
||||
}
|
||||
}
|
||||
@@ -426,8 +421,8 @@ func TestGetLatestUnmetScheduleTimes(t *testing.T) {
|
||||
// Deadline is short
|
||||
deadline := int64(2 * 60 * 60)
|
||||
cj.Spec.StartingDeadlineSeconds = &deadline
|
||||
times := getUnmetScheduleTimes(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if len(times) == 0 {
|
||||
schedule := getNextScheduleTime(cj, now, PraseSchedule(cj.Spec.Schedule), recorder)
|
||||
if schedule == nil {
|
||||
t.Errorf("expected more than 0 missed times")
|
||||
}
|
||||
}
|
||||
@@ -631,3 +626,65 @@ func TestByJobStartTime(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetMostRecentScheduleTime(t *testing.T) {
|
||||
type args struct {
|
||||
earliestTime *time.Time
|
||||
now time.Time
|
||||
schedule string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
expectedTime *time.Time
|
||||
expectedNumberOfMisses int64
|
||||
}{
|
||||
{
|
||||
name: "now before next schedule",
|
||||
args: args{
|
||||
earliestTime: topOfTheHour(),
|
||||
now: topOfTheHour().Add(time.Second * 30),
|
||||
schedule: "0 * * * *",
|
||||
},
|
||||
expectedTime: nil,
|
||||
},
|
||||
{
|
||||
name: "now just after next schedule",
|
||||
args: args{
|
||||
earliestTime: topOfTheHour(),
|
||||
now: topOfTheHour().Add(time.Second * 61),
|
||||
schedule: "0 * * * *",
|
||||
},
|
||||
expectedTime: justAfterTheHour(),
|
||||
expectedNumberOfMisses: 1,
|
||||
},
|
||||
{
|
||||
name: "missed 5 schedules",
|
||||
args: args{
|
||||
earliestTime: deltaTimeAfterTopOfTheHour(time.Second * 10),
|
||||
now: *deltaTimeAfterTopOfTheHour(time.Minute * 5),
|
||||
schedule: "0 * * * *",
|
||||
},
|
||||
expectedTime: deltaTimeAfterTopOfTheHour(time.Minute * 5),
|
||||
expectedNumberOfMisses: 5,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
sched, err := cron.Parse(tt.args.schedule)
|
||||
if err != nil {
|
||||
t.Errorf("error setting up the test")
|
||||
}
|
||||
gotTime, gotNumberOfMisses := getMostRecentScheduleTime(*tt.args.earliestTime, tt.args.now, sched)
|
||||
if gotTime == nil && tt.expectedTime != nil {
|
||||
t.Errorf("getMostRecentScheduleTime() got nil, want %v", tt.expectedTime)
|
||||
}
|
||||
if gotTime != nil && tt.expectedTime != nil && !gotTime.Equal(*tt.expectedTime) {
|
||||
t.Errorf("getMostRecentScheduleTime() got = %v, want %v", gotTime, tt.expectedTime)
|
||||
}
|
||||
if gotNumberOfMisses != tt.expectedNumberOfMisses {
|
||||
t.Errorf("getMostRecentScheduleTime() got1 = %v, want %v", gotNumberOfMisses, tt.expectedNumberOfMisses)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user