feat: establish Orbit models, migrations and development baseline
This commit is contained in:
29
pulse/model/state_test.go
Normal file
29
pulse/model/state_test.go
Normal file
@@ -0,0 +1,29 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user