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") } }