8000 fix: bug related to DOM and DOW interpretation · coder/coder@3fa98b2 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3fa98b2

Browse files
fix: bug related to DOM and DOW interpretation
1 parent 12dba6c commit 3fa98b2

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

coderd/schedule/cron/schedule_validation.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,20 @@ func DowOverlap(dow1, dow2 string) (bool, error) {
8686
}
8787

8888
// DaysOverlap checks if two day ranges overlap, considering both DOM and DOW.
89-
// Returns true if either DOM ranges overlap OR DOW ranges overlap.
89+
// Returns true if both DOM and DOW overlap, or if one is * and the other overlaps.
9090
func DaysOverlap(dom1, dow1, dom2, dow2 string) (bool, error) {
91-
// Check if either DOM or DOW overlaps
91+
// If either DOM is *, we only need to check DOW overlap
92+
if dom1 == "*" || dom2 == "*" {
93+
return DowOverlap(dow1, dow2)
94+
}
95+
96+
// If either DOW is *, we only need to check DOM overlap
97+
if dow1 == "*" || dow2 == "*" {
98+
return DomOverlap(dom1, dom2)
99+
}
100+
101+
// If both DOM and DOW are specified, we need to check both
102+
// because the schedule runs when either matches
92103
domOverlap, err := DomOverlap(dom1, dom2)
93104
if err != nil {
94105
return false, err
@@ -98,6 +109,7 @@ func DaysOverlap(dom1, dow1, dom2, dow2 string) (bool, error) {
98109
return false, err
99110
}
100111

112+
// If either DOM or DOW overlaps, the schedules overlap
101113
return domOverlap || dowOverlap, nil
102114
}
103115

coderd/schedule/cron/schedule_validation_test.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -377,15 +377,15 @@ func TestSchedulesOverlap(t *testing.T) {
377377
// Day of week overlap cases (with wildcard DOM)
378378
{
379379
name: "Different DOW with wildcard DOM",
380-
s1: "* 9-18 * * 1,3,5",
381-
s2: "* 9-18 * * 2,4,6",
382-
overlap: true, // Overlaps because of wildcard DOM
380+
s1: "* 9-18 * * 1,3,5", // Mon,Wed,Fri
381+
s2: "* 9-18 * * 2,4,6", // Tue,Thu,Sat
382+
overlap: false, // No overlap because DOW ranges don't overlap
383383
},
384384
{
385385
name: "Different DOW with wildcard DOM - complex ranges",
386-
s1: "* 9-18 * * 1-3",
387-
s2: "* 9-18 * * 4-5",
388-
overlap: true, // Overlaps because of wildcard DOM
386+
s1: "* 9-18 * * 1-3", // Mon-Wed
387+
s2: "* 9-18 * * 4-5", // Thu-Fri
388+
overlap: false, // No overlap because DOW ranges don't overlap
389389
},
390390

391391
// Day of week overlap cases (with specific DOM)
@@ -499,6 +499,8 @@ func TestValidateSchedules(t *testing.T) {
499499
},
500500
expectErr: false,
501501
},
502+
503+
// Non-overlapping schedules
502504
{
503505
name: "Multiple valid non-overlapping schedules",
504506
schedules: []string{
@@ -507,6 +509,14 @@ func TestValidateSchedules(t *testing.T) {
507509
},
508510
expectErr: false,
509511
},
512+
{
513+
name: "Multiple valid non-overlapping schedules",
514+
schedules: []string{
515+
"* 9-18 * * 1-5",
516+
"* 9-13 * * 6,0",
517+
},
518+
expectErr: false,
519+
},
510520

511521
// Overlapping schedules
512522
{

0 commit comments

Comments
 (0)
0