62 lines
1.5 KiB
Go
Executable File
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))
|
|
}
|
|
}
|