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
47 lines
1.5 KiB
|
2 months ago
|
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")
|
||
|
|
}
|
||
|
|
}
|