feat: T1016 dns_config probe + server-side drift detection + Crucible DNS DRIFT badge
This commit is contained in:
76
agent/config/schedule_test.go
Normal file
76
agent/config/schedule_test.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestMiningModeNormalized(t *testing.T) {
|
||||
c := RuntimeConfig{BuiltinConfig: BuiltinConfig{MiningMode: ""}}
|
||||
if c.MiningModeNormalized() != "always" {
|
||||
t.Fatal("empty -> always")
|
||||
}
|
||||
c.MiningMode = " SCHEDULE "
|
||||
if c.MiningModeNormalized() != "schedule" {
|
||||
t.Fatalf("got %q", c.MiningModeNormalized())
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseClockMinutes(t *testing.T) {
|
||||
if _, ok := parseClockMinutes(""); ok {
|
||||
t.Fatal("empty invalid")
|
||||
}
|
||||
if _, ok := parseClockMinutes("bad"); !ok {
|
||||
t.Fatal("bad invalid")
|
||||
}
|
||||
m, ok := parseClockMinutes("09:30")
|
||||
if !ok || m != 9*60+30 {
|
||||
t.Fatalf("09:30 = %d ok=%v", m, ok)
|
||||
}
|
||||
m, ok = parseClockMinutes("23:59:59")
|
||||
if !ok || m != 23*60+59 {
|
||||
t.Fatalf("23:59:59 = %d", m)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInScheduleWindowInvalidSchedule(t *testing.T) {
|
||||
c := RuntimeConfig{BuiltinConfig: BuiltinConfig{ScheduleStart: "bad", ScheduleEnd: "10:00"}}
|
||||
if !c.InScheduleWindow(time.Now()) {
|
||||
t.Fatal("invalid schedule should allow mining (true)")
|
||||
}
|
||||
}
|
||||
|
||||
func TestInScheduleWindowSameStartEnd(t *testing.T) {
|
||||
c := RuntimeConfig{BuiltinConfig: BuiltinConfig{ScheduleStart: "08:00", ScheduleEnd: "08:00"}}
|
||||
if !c.InScheduleWindow(time.Date(2026, 1, 1, 12, 0, 0, 0, time.UTC)) {
|
||||
t.Fatal("same start/end = always in window")
|
||||
}
|
||||
}
|
||||
|
||||
func TestInScheduleWindowDaytime(t *testing.T) {
|
||||
c := RuntimeConfig{BuiltinConfig: BuiltinConfig{ScheduleStart: "09:00", ScheduleEnd: "17:00"}}
|
||||
inside := time.Date(2026, 1, 1, 10, 0, 0, 0, time.UTC)
|
||||
outside := time.Date(2026, 1, 1, 20, 0, 0, 0, time.UTC)
|
||||
if !c.InScheduleWindow(inside) {
|
||||
t.Fatal("10:00 should be inside 09-17")
|
||||
}
|
||||
if c.InScheduleWindow(outside) {
|
||||
t.Fatal("20:00 should be outside 09-17")
|
||||
}
|
||||
}
|
||||
|
||||
func TestInScheduleWindowOvernight(t *testing.T) {
|
||||
c := RuntimeConfig{BuiltinConfig: BuiltinConfig{ScheduleStart: "22:00", ScheduleEnd: "06:00"}}
|
||||
late := time.Date(2026, 1, 1, 23, 0, 0, 0, time.UTC)
|
||||
mid := time.Date(2026, 1, 1, 12, 0, 0, 0, time.UTC)
|
||||
early := time.Date(2026, 1, 1, 3, 0, 0, 0, time.UTC)
|
||||
if !c.InScheduleWindow(late) {
|
||||
t.Fatal("23:00 in overnight window")
|
||||
}
|
||||
if c.InScheduleWindow(mid) {
|
||||
t.Fatal("12:00 outside overnight window")
|
||||
}
|
||||
if !c.InScheduleWindow(early) {
|
||||
t.Fatal("03:00 in overnight window")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user