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.

47 lines
1.5 KiB

package main
import (
"context"
"fmt"
"tera-clone/services/tera-api/internal/serial"
"testing"
"time"
)
type observedPorts struct {
serial.MockController
observations []serial.CRProbeState
}
func (p observedPorts) CRProbeStates(context.Context) ([]serial.CRProbeState, error) {
return p.observations, nil
}
func TestInitialObservationWaitsForEveryChannel(t *testing.T) {
now := time.Now()
p := observedPorts{}
for i := 1; i <= 48; i++ {
p.observations = append(p.observations, serial.CRProbeState{Channel: fmt.Sprintf("CH%02d", i), Enabled: true, State: serial.CRProbeStateNoResponse, LastProbeAt: &now})
}
if err := verifyStartupPortObservation(context.Background(), p, true); err != nil {
t.Fatal(err)
}
for _, state := range []string{serial.CRProbeStatePending, serial.CRProbeStateConfirming, serial.CRProbeStateError, serial.CRProbeStateBusy, serial.CRProbeStateSuppressed} {
p.observations[47].State = state
if err := verifyStartupPortObservation(context.Background(), p, true); err == nil {
t.Fatalf("accepted incomplete last channel %s", state)
}
}
p.observations[47].State = serial.CRProbeStateResponded
if err := verifyStartupPortObservation(context.Background(), p, true); err != nil {
t.Fatal(err)
}
if err := verifyStartupPortObservation(context.Background(), p, true, now.Add(time.Second)); err == nil {
t.Fatal("stale observation accepted")
}
p.observations[47].Channel = "CH01"
if err := verifyStartupPortObservation(context.Background(), p, true); err == nil {
t.Fatal("duplicate accepted")
}
}