
If there is no status change queued for the Worker, the sleep schedule should determine its initial status.
118 lines
4.7 KiB
Go
118 lines
4.7 KiB
Go
package sleep_scheduler
|
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"git.blender.org/flamenco/internal/manager/persistence"
|
|
"git.blender.org/flamenco/pkg/api"
|
|
)
|
|
|
|
func TestCalculateNextCheck(t *testing.T) {
|
|
_, mocks, _ := testFixtures(t)
|
|
|
|
var sched persistence.SleepSchedule
|
|
empty := persistence.EmptyTimeOfDay()
|
|
|
|
// Below, S, N, and E respectively mean Start, Now, and End times.
|
|
// Their order shows their relation to "Now". Lower-case letters mean "no value".
|
|
// Note that N can never be before 's' or after 'e'.
|
|
|
|
// S N E -> E
|
|
sched = persistence.SleepSchedule{StartTime: mkToD(9, 0), EndTime: mkToD(18, 0)}
|
|
assert.Equal(t, mocks.todayAt(18, 0), calculateNextCheck(mocks.todayAt(11, 16), &sched))
|
|
|
|
// S E N -> end of day
|
|
sched = persistence.SleepSchedule{StartTime: mkToD(9, 0), EndTime: mkToD(18, 0)}
|
|
assert.Equal(t, mocks.endOfDay(), calculateNextCheck(mocks.todayAt(19, 16), &sched))
|
|
|
|
// N S E -> S
|
|
sched = persistence.SleepSchedule{StartTime: mkToD(9, 0), EndTime: mkToD(18, 0)}
|
|
assert.Equal(t, mocks.todayAt(9, 0), calculateNextCheck(mocks.todayAt(8, 47), &sched))
|
|
|
|
// s N e -> end of day
|
|
sched = persistence.SleepSchedule{StartTime: empty, EndTime: empty}
|
|
assert.Equal(t, mocks.endOfDay(), calculateNextCheck(mocks.todayAt(7, 47), &sched))
|
|
|
|
// S N e -> end of day
|
|
sched = persistence.SleepSchedule{StartTime: mkToD(9, 0), EndTime: empty}
|
|
assert.Equal(t, mocks.endOfDay(), calculateNextCheck(mocks.todayAt(10, 47), &sched))
|
|
|
|
// s N E -> E
|
|
sched = persistence.SleepSchedule{StartTime: empty, EndTime: mkToD(18, 0)}
|
|
assert.Equal(t, mocks.todayAt(18, 0), calculateNextCheck(mocks.todayAt(7, 47), &sched))
|
|
}
|
|
|
|
func TestScheduledWorkerStatus(t *testing.T) {
|
|
_, mocks, _ := testFixtures(t)
|
|
|
|
var sched persistence.SleepSchedule
|
|
empty := persistence.EmptyTimeOfDay()
|
|
|
|
// No schedule means 'awake'.
|
|
assert.Equal(t, api.WorkerStatusAwake, scheduledWorkerStatus(mocks.todayAt(11, 16), nil))
|
|
|
|
// Below, S, N, and E respectively mean Start, Now, and End times.
|
|
// Their order shows their relation to "Now". Lower-case letters mean "no value".
|
|
// Note that N can never be before 's' or after 'e'.
|
|
|
|
// Test time logic without any DaysOfWeek set, i.e. the scheduled times apply
|
|
// to each day.
|
|
|
|
// S N E -> asleep
|
|
sched = persistence.SleepSchedule{StartTime: mkToD(9, 0), EndTime: mkToD(18, 0), IsActive: true}
|
|
assert.Equal(t, api.WorkerStatusAsleep, scheduledWorkerStatus(mocks.todayAt(11, 16), &sched))
|
|
|
|
// S E N -> awake
|
|
assert.Equal(t, api.WorkerStatusAwake, scheduledWorkerStatus(mocks.todayAt(19, 16), &sched))
|
|
|
|
// N S E -> awake
|
|
assert.Equal(t, api.WorkerStatusAwake, scheduledWorkerStatus(mocks.todayAt(8, 47), &sched))
|
|
|
|
// s N e -> asleep
|
|
sched = persistence.SleepSchedule{StartTime: empty, EndTime: empty, IsActive: true}
|
|
assert.Equal(t, api.WorkerStatusAsleep, scheduledWorkerStatus(mocks.todayAt(7, 47), &sched))
|
|
|
|
// S N e -> asleep
|
|
sched = persistence.SleepSchedule{StartTime: mkToD(9, 0), EndTime: empty, IsActive: true}
|
|
assert.Equal(t, api.WorkerStatusAsleep, scheduledWorkerStatus(mocks.todayAt(10, 47), &sched))
|
|
|
|
// s N E -> asleep
|
|
sched = persistence.SleepSchedule{StartTime: empty, EndTime: mkToD(18, 0), IsActive: true}
|
|
assert.Equal(t, api.WorkerStatusAsleep, scheduledWorkerStatus(mocks.todayAt(7, 47), &sched))
|
|
|
|
// Test DaysOfWeek logic, but only with explicit start & end times. The logic
|
|
// for missing start/end is already covered above.
|
|
// The mocked "today" is a Tuesday.
|
|
|
|
// S N E unmentioned day -> awake
|
|
sched = persistence.SleepSchedule{DaysOfWeek: "mo we", StartTime: mkToD(9, 0), EndTime: mkToD(18, 0), IsActive: true}
|
|
assert.Equal(t, api.WorkerStatusAwake, scheduledWorkerStatus(mocks.todayAt(11, 16), &sched))
|
|
|
|
// S E N unmentioned day -> awake
|
|
assert.Equal(t, api.WorkerStatusAwake, scheduledWorkerStatus(mocks.todayAt(19, 16), &sched))
|
|
|
|
// N S E unmentioned day -> awake
|
|
assert.Equal(t, api.WorkerStatusAwake, scheduledWorkerStatus(mocks.todayAt(8, 47), &sched))
|
|
|
|
// S N E mentioned day -> asleep
|
|
sched = persistence.SleepSchedule{DaysOfWeek: "tu th fr", StartTime: mkToD(9, 0), EndTime: mkToD(18, 0), IsActive: true}
|
|
assert.Equal(t, api.WorkerStatusAsleep, scheduledWorkerStatus(mocks.todayAt(11, 16), &sched))
|
|
|
|
// S E N mentioned day -> awake
|
|
assert.Equal(t, api.WorkerStatusAwake, scheduledWorkerStatus(mocks.todayAt(19, 16), &sched))
|
|
|
|
// N S E mentioned day -> awake
|
|
assert.Equal(t, api.WorkerStatusAwake, scheduledWorkerStatus(mocks.todayAt(8, 47), &sched))
|
|
}
|
|
|
|
func TestCleanupDaysOfWeek(t *testing.T) {
|
|
assert.Equal(t, "", cleanupDaysOfWeek(""))
|
|
assert.Equal(t, "mo tu we", cleanupDaysOfWeek("mo tu we"))
|
|
assert.Equal(t, "mo tu we", cleanupDaysOfWeek(" mo tu we \n"))
|
|
assert.Equal(t, "mo tu we", cleanupDaysOfWeek("monday tuesday wed"))
|
|
}
|