Skip to content

Commit 0643747

Browse files
test: add tests with different timezones
1 parent 668dbaa commit 0643747

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

coderd/prebuilds/preset_snapshot.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package prebuilds
22

33
import (
4+
"fmt"
45
"github.com/coder/coder/v2/coderd/schedule/cron"
56
"golang.org/x/xerrors"
67
"slices"
@@ -102,16 +103,15 @@ func (p PresetSnapshot) CalculateDesiredInstances(at time.Time) (int32, error) {
102103
return p.Preset.DesiredInstances.Int32, nil
103104
}
104105

105-
loc, err := time.LoadLocation(p.Preset.AutoscalingTimezone)
106+
_, err := time.LoadLocation(p.Preset.AutoscalingTimezone)
106107
if err != nil {
107108
return 0, xerrors.Errorf("can't parse location %v: %w", p.Preset.AutoscalingTimezone, err)
108109
}
109110

110-
at = at.In(loc)
111-
112111
// Check each schedule
113112
for _, schedule := range p.PrebuildSchedules {
114-
matches, err := MatchesCron(schedule.CronExpression, at)
113+
cronExprWithTimezone := fmt.Sprintf("CRON_TZ=%s %s", p.Preset.AutoscalingTimezone, schedule.CronExpression)
114+
matches, err := MatchesCron(cronExprWithTimezone, at)
115115
if err != nil {
116116
return 0, xerrors.Errorf("failed to match cron expression: %w", err)
117117
}

coderd/prebuilds/preset_snapshot_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,6 +1178,53 @@ func TestCalculateDesiredInstances(t *testing.T) {
11781178
at: mustParseTime(t, time.RFC1123, "Sat, 07 Jun 2025 14:00:00 UTC"),
11791179
expectedCalculatedInstances: 1,
11801180
},
1181+
1182+
// Test different timezones
1183+
{
1184+
name: "3PM UTC - 8AM America/Los_Angeles; An hour before the start of the time range",
1185+
snapshot: mkSnapshot(
1186+
mkPreset(1, "America/Los_Angeles"),
1187+
mkSchedule("* 9-13 * * 1-5", 3),
1188+
),
1189+
at: mustParseTime(t, time.RFC1123, "Mon, 02 Jun 2025 15:00:00 UTC"),
1190+
expectedCalculatedInstances: 1,
1191+
},
1192+
{
1193+
name: "4PM UTC - 9AM America/Los_Angeles; Start of the time range",
1194+
snapshot: mkSnapshot(
1195+
mkPreset(1, "America/Los_Angeles"),
1196+
mkSchedule("* 9-13 * * 1-5", 3),
1197+
),
1198+
at: mustParseTime(t, time.RFC1123, "Mon, 02 Jun 2025 16:00:00 UTC"),
1199+
expectedCalculatedInstances: 3,
1200+
},
1201+
{
1202+
name: "8:58PM UTC - 1:58PM America/Los_Angeles; Right before the end of the time range",
1203+
snapshot: mkSnapshot(
1204+
mkPreset(1, "America/Los_Angeles"),
1205+
mkSchedule("* 9-13 * * 1-5", 3),
1206+
),
1207+
at: mustParseTime(t, time.RFC1123, "Mon, 02 Jun 2025 20:58:00 UTC"),
1208+
expectedCalculatedInstances: 3,
1209+
},
1210+
{
1211+
name: "9PM UTC - 2PM America/Los_Angeles; Right after the end of the time range",
1212+
snapshot: mkSnapshot(
1213+
mkPreset(1, "America/Los_Angeles"),
1214+
mkSchedule("* 9-13 * * 1-5", 3),
1215+
),
1216+
at: mustParseTime(t, time.RFC1123, "Mon, 02 Jun 2025 21:00:00 UTC"),
1217+
expectedCalculatedInstances: 1,
1218+
},
1219+
{
1220+
name: "11PM UTC - 4PM America/Los_Angeles; Outside the time range",
1221+
snapshot: mkSnapshot(
1222+
mkPreset(1, "America/Los_Angeles"),
1223+
mkSchedule("* 9-13 * * 1-5", 3),
1224+
),
1225+
at: mustParseTime(t, time.RFC1123, "Mon, 02 Jun 2025 23:00:00 UTC"),
1226+
expectedCalculatedInstances: 1,
1227+
},
11811228
}
11821229

11831230
for _, tc := range testCases {

0 commit comments

Comments
 (0)