You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

70 lines
2.5 KiB

package status
import (
"reflect"
"testing"
)
func TestEvaluate(t *testing.T) {
valid := func(power float64) Sample { return Sample{Power: power, Valid: true} }
for _, tt := range []struct {
name string
samples []Sample
state string
message string
}{
{"no samples", nil, "waiting", "Waiting for data..."},
{"one sample", []Sample{valid(10)}, "waiting", "Waiting for data..."},
{"two samples with gap", []Sample{valid(10), {}}, "waiting", "Waiting for data..."},
{"all zero", []Sample{valid(0), valid(0), valid(0)}, "done", "Laundry done"},
{"below threshold", []Sample{valid(2.99), valid(2.99), valid(2.99)}, "done", "Laundry done"},
{"at threshold", []Sample{valid(0), valid(3), valid(0)}, "running", "Laundry not yet done"},
{"mixed", []Sample{valid(47.7), valid(0), valid(2.99)}, "running", "Laundry not yet done"},
{"gap overrides active", []Sample{valid(47.7), {}, valid(0)}, "incomplete", "Incomplete data"},
{"all missing", []Sample{{}, {}, {}}, "incomplete", "Incomplete data"},
} {
t.Run(tt.name, func(t *testing.T) {
got := Evaluate(tt.samples)
if got.State != tt.state || got.Message != tt.message {
t.Fatalf("Evaluate() = %q, %q; want %q, %q", got.State, got.Message, tt.state, tt.message)
}
if len(got.Readings) != len(tt.samples) || got.Readings == nil {
t.Fatalf("readings = %#v; want non-nil slice of length %d", got.Readings, len(tt.samples))
}
for i, sample := range tt.samples {
if got.Readings[i] != sample {
t.Errorf("readings[%d] = %+v; want %+v", i, got.Readings[i], sample)
}
}
})
}
}
func TestWindowKeepsLastThreeOldestFirst(t *testing.T) {
var window Window
if got := window.Readings(); len(got) != 0 {
t.Fatalf("new window = %v", got)
}
for i := range 7 {
window.Add(Sample{Power: float64(i), Valid: true})
}
want := []Sample{{Power: 4, Valid: true}, {Power: 5, Valid: true}, {Power: 6, Valid: true}}
if got := window.Readings(); !reflect.DeepEqual(got, want) {
t.Fatalf("Readings() = %v; want %v", got, want)
}
snapshot := window.Readings()
snapshot[0].Power = 999
if got := window.Readings(); !reflect.DeepEqual(got, want) {
t.Fatal("mutating a snapshot changed the window")
}
for range 3 {
window.Add(Sample{Valid: true})
}
if got := Evaluate(window.Readings()); got.State != "done" {
t.Fatalf("old active samples did not age out: %+v", got)
}
window.Add(Sample{})
if got := Evaluate(window.Readings()); got.State != "incomplete" {
t.Fatalf("missing sample was not recorded: %+v", got)
}
}