package model import "testing" func TestRecoveryDoesNotReopenTerminalOrUnknownWork(t *testing.T) { for _, state := range []TaskState{TaskSucceeded, TaskFailed, TaskCancelled, TaskNeedsReview, TaskState("new-future-state")} { if state.CanTransitionTo(TaskWaiting) || state.CanTransitionTo(TaskRunning) { t.Fatalf("unsafe automatic restart from %s", state) } } for _, safety := range []RecoverySafety{"", RecoveryReconcileOnly, "future"} { if safety.CanRecoverAutomatically() { t.Fatalf("unsafe default: %s", safety) } } if !TaskRunning.CanTransitionTo(TaskNeedsReview) { t.Fatal("unknown effects cannot be preserved") } } func TestRetryPolicyRejectsUnboundedOrOverflowingParameters(t *testing.T) { for _, p := range []RetryPolicy{{}, {MaxAttempts: 2, AttemptTimeoutMS: 1}, {MaxAttempts: 1, AttemptTimeoutMS: ^uint64(0)}, {MaxAttempts: 2, AttemptTimeoutMS: 1, InitialDelayMS: 100, MaxDelayMS: 1}} { if p.Validate() == nil { t.Fatalf("accepted unsafe policy: %+v", p) } } if err := (RetryPolicy{MaxAttempts: 3, AttemptTimeoutMS: 1000, InitialDelayMS: 100, MaxDelayMS: 5000}).Validate(); err != nil { t.Fatal(err) } }