Files
Assistant/tests/work_recovery/liveness_test.go
2026-08-22 11:56:18 +03:00

34 lines
1.3 KiB
Go

package work_recovery_test
import (
"testing"
"time"
"git.cin.su/m/Assistant/contracts/work"
workdomain "git.cin.su/m/Assistant/modules/work/domain"
)
func TestAssessRunLivenessClassifiesDurableHeartbeat(t *testing.T) {
now := time.UnixMilli(10000)
run := work.AgentRun{ID: "run-1", DelegationID: "delegation-1", ImplementationID: "agent-1", ImplementationRevision: 1, Protocol: work.AgentExecutionProtocol("v1"), State: work.AgentRunRunning, StartedAtUnixMillis: 9000, UpdatedAtUnixMillis: 9000}
if got := workdomain.AssessRunLiveness(run, now.Add(100*time.Millisecond), time.Second); got.State != workdomain.RunLivenessStale || got.Age != 1100*time.Millisecond {
t.Fatalf("stale = %#v", got)
}
run.UpdatedAtUnixMillis = 9500
if got := workdomain.AssessRunLiveness(run, now, time.Second); got.State != workdomain.RunLivenessLive {
t.Fatalf("live = %#v", got)
}
}
func TestAssessRunLivenessDoesNotTreatCompletedAsStale(t *testing.T) {
run := work.AgentRun{State: work.AgentRunCompleted, UpdatedAtUnixMillis: 1}
got := workdomain.AssessRunLiveness(run, time.UnixMilli(10000), time.Second)
if got.State != workdomain.RunLivenessNotRun {
t.Fatalf("completed = %#v", got)
}
invalid := workdomain.AssessRunLiveness(run, time.Time{}, time.Second)
if invalid.State != workdomain.RunLivenessInvalid {
t.Fatalf("invalid = %#v", invalid)
}
}