sorcery-go/pkg/warding/warding_test.go

62 lines
1.5 KiB
Go
Executable File

package warding
import (
"errors"
"testing"
"time"
"dcos.net/sorcery-go/pkg/eventbus"
)
// stubTomb satisfies the TombReader interface for tests.
type stubTomb struct{ shouldFail bool }
func (s stubTomb) VerifyRoot(essenceID string) error {
if s.shouldFail {
return errors.New("simulated taint")
}
return nil
}
func (s stubTomb) VerifyBlobs(essenceID string) error {
if s.shouldFail {
return errors.New("simulated bit-rot")
}
return nil
}
func TestInspectPassesOnCleanEssence(t *testing.T) {
bus := eventbus.New()
w := New(stubTomb{shouldFail: false}, bus)
if err := w.Inspect("essence-1"); err != nil {
t.Fatalf("expected clean inspect, got %v", err)
}
if len(w.Alarms) != 0 {
t.Fatalf("expected no alarms, got %d", len(w.Alarms))
}
}
func TestInspectRaisesAlarmOnTaint(t *testing.T) {
bus := eventbus.New()
w := New(stubTomb{shouldFail: true}, bus)
if err := w.Inspect("essence-tainted"); err == nil {
t.Fatalf("expected inspect to fail on taint")
}
if len(w.Alarms) != 1 || w.Alarms[0].Severity != "taint" {
t.Fatalf("expected one taint alarm, got %+v", w.Alarms)
}
}
func TestAlarmsSinceFiltersByTime(t *testing.T) {
bus := eventbus.New()
w := New(stubTomb{}, bus)
w.Alarms = append(w.Alarms,
Alarm{Time: time.Now().Add(-2 * time.Hour), Severity: "taint"},
Alarm{Time: time.Now().Add(-5 * time.Minute), Severity: "taint"},
)
recent := w.AlarmsSince(time.Now().Add(-1 * time.Hour))
if len(recent) != 1 {
t.Fatalf("expected 1 recent alarm, got %d", len(recent))
}
}