231 lines
6.4 KiB
Go
231 lines
6.4 KiB
Go
package rules
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestShouldSkipMaintenance(t *testing.T) {
|
|
|
|
cases := []struct {
|
|
name string
|
|
maintenance *PlannedMaintenance
|
|
ts time.Time
|
|
expected bool
|
|
}{
|
|
{
|
|
name: "fixed planned maintenance start <= ts <= end",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
StartTime: time.Now().UTC().Add(-time.Hour),
|
|
EndTime: time.Now().UTC().Add(time.Hour * 2),
|
|
},
|
|
},
|
|
ts: time.Now().UTC(),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "fixed planned maintenance start >= ts",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
StartTime: time.Now().UTC().Add(time.Hour),
|
|
EndTime: time.Now().UTC().Add(time.Hour * 2),
|
|
},
|
|
},
|
|
ts: time.Now().UTC(),
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "fixed planned maintenance ts < start",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
StartTime: time.Now().UTC().Add(time.Hour),
|
|
EndTime: time.Now().UTC().Add(time.Hour * 2),
|
|
},
|
|
},
|
|
ts: time.Now().UTC().Add(-time.Hour),
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat daily from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 1, 1, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeDaily,
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 1, 1, 12, 10, 0, 0, time.UTC),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat daily from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 1, 1, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeDaily,
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 1, 1, 14, 0, 0, 0, time.UTC),
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat daily from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 1, 1, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeDaily,
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 04, 1, 12, 10, 0, 0, time.UTC),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat weekly on monday from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 04, 01, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeWeekly,
|
|
RepeatOn: []RepeatOn{RepeatOnMonday},
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 04, 15, 12, 10, 0, 0, time.UTC),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat weekly on monday from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 04, 01, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeWeekly,
|
|
RepeatOn: []RepeatOn{RepeatOnMonday},
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 04, 14, 12, 10, 0, 0, time.UTC), // 14th 04 is sunday
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat weekly on monday from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 04, 01, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeWeekly,
|
|
RepeatOn: []RepeatOn{RepeatOnMonday},
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 04, 16, 12, 10, 0, 0, time.UTC), // 16th 04 is tuesday
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat weekly on monday from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 04, 01, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeWeekly,
|
|
RepeatOn: []RepeatOn{RepeatOnMonday},
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 05, 06, 12, 10, 0, 0, time.UTC),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat weekly on monday from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 04, 01, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeWeekly,
|
|
RepeatOn: []RepeatOn{RepeatOnMonday},
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 05, 06, 14, 00, 0, 0, time.UTC),
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat monthly on 4th from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 04, 04, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeMonthly,
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 04, 04, 12, 10, 0, 0, time.UTC),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat monthly on 4th from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 04, 04, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeMonthly,
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 04, 04, 14, 10, 0, 0, time.UTC),
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "recurring maintenance, repeat monthly on 4th from 12:00 to 14:00",
|
|
maintenance: &PlannedMaintenance{
|
|
Schedule: &Schedule{
|
|
Timezone: "UTC",
|
|
Recurrence: &Recurrence{
|
|
StartTime: time.Date(2024, 04, 04, 12, 0, 0, 0, time.UTC),
|
|
Duration: Duration(time.Hour * 2),
|
|
RepeatType: RepeatTypeMonthly,
|
|
},
|
|
},
|
|
},
|
|
ts: time.Date(2024, 05, 04, 12, 10, 0, 0, time.UTC),
|
|
expected: true,
|
|
},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
result := c.maintenance.shouldSkip(c.name, c.ts)
|
|
if result != c.expected {
|
|
t.Errorf("expected %v, got %v", c.expected, result)
|
|
}
|
|
}
|
|
}
|