mirror of
https://github.com/warmbly/warmbly.git
synced 2026-09-06 00:01:24 +00:00
72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
package models
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestSendsCold(t *testing.T) {
|
|
if !SendLifecycleActive.SendsCold() {
|
|
t.Error("active must send cold")
|
|
}
|
|
// A row written before the column existed reads as empty. Treating that as
|
|
// "not sending" would silently stop every existing mailbox on deploy.
|
|
if !SendLifecycle("").SendsCold() {
|
|
t.Error("an unset lifecycle must send cold")
|
|
}
|
|
for _, l := range []SendLifecycle{SendLifecycleResting, SendLifecycleReserve} {
|
|
if l.SendsCold() {
|
|
t.Errorf("%q must not be offered cold traffic", l)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAutoManaged(t *testing.T) {
|
|
// Reserve is the owner's decision; the rebalancer must never take a
|
|
// mailbox out of it.
|
|
if SendLifecycleReserve.AutoManaged() {
|
|
t.Error("reserve must not be automatically managed")
|
|
}
|
|
for _, l := range []SendLifecycle{SendLifecycleActive, SendLifecycleResting, ""} {
|
|
if !l.AutoManaged() {
|
|
t.Errorf("%q should be automatically managed", l)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestReadyToResume(t *testing.T) {
|
|
now := time.Date(2026, 3, 10, 12, 0, 0, 0, time.UTC)
|
|
since := now.Add(-RestProbation)
|
|
|
|
rested := SendLifecycleState{State: SendLifecycleResting, Since: &since}
|
|
if !rested.ReadyToResume(now) {
|
|
t.Error("a mailbox that served its full probation should be ready")
|
|
}
|
|
|
|
fresh := now.Add(-time.Hour)
|
|
if (SendLifecycleState{State: SendLifecycleResting, Since: &fresh}).ReadyToResume(now) {
|
|
t.Error("an hour of rest is not a probation")
|
|
}
|
|
// No timestamp means nothing to measure, so it is not ready: promoting on a
|
|
// missing clock would defeat the probation entirely.
|
|
if (SendLifecycleState{State: SendLifecycleResting}).ReadyToResume(now) {
|
|
t.Error("a resting mailbox with no start time must not resume")
|
|
}
|
|
if (SendLifecycleState{State: SendLifecycleActive, Since: &since}).ReadyToResume(now) {
|
|
t.Error("only a resting mailbox resumes")
|
|
}
|
|
}
|
|
|
|
func TestValid(t *testing.T) {
|
|
for _, l := range []SendLifecycle{SendLifecycleActive, SendLifecycleResting, SendLifecycleReserve} {
|
|
if !l.Valid() {
|
|
t.Errorf("%q should be valid", l)
|
|
}
|
|
}
|
|
for _, l := range []SendLifecycle{"", "warming", "paused", "nonsense"} {
|
|
if l.Valid() {
|
|
t.Errorf("%q should not be valid", l)
|
|
}
|
|
}
|
|
}
|