feat(tasks): implement atomic claims and leases
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package domain
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestLifecycleStatusPredicates(t *testing.T) {
|
||||
statuses := []TaskStatus{
|
||||
TaskStatusPending,
|
||||
TaskStatusClaimed,
|
||||
TaskStatusRunning,
|
||||
TaskStatusWaitingConfirmation,
|
||||
TaskStatusSucceeded,
|
||||
TaskStatusFailed,
|
||||
TaskStatusCanceled,
|
||||
}
|
||||
for _, status := range statuses {
|
||||
t.Run(string(status), func(t *testing.T) {
|
||||
active := status == TaskStatusClaimed ||
|
||||
status == TaskStatusRunning ||
|
||||
status == TaskStatusWaitingConfirmation
|
||||
if IsActiveTaskStatus(status) != active {
|
||||
t.Fatalf("IsActiveTaskStatus(%s) = %v", status, !active)
|
||||
}
|
||||
if CanStart(status) != (status == TaskStatusClaimed) {
|
||||
t.Fatalf("CanStart(%s) mismatch", status)
|
||||
}
|
||||
heartbeat := status == TaskStatusRunning ||
|
||||
status == TaskStatusWaitingConfirmation
|
||||
if CanHeartbeat(status) != heartbeat {
|
||||
t.Fatalf("CanHeartbeat(%s) mismatch", status)
|
||||
}
|
||||
if CanRelease(status) != (status == TaskStatusClaimed) {
|
||||
t.Fatalf("CanRelease(%s) mismatch", status)
|
||||
}
|
||||
immediateCancel := status == TaskStatusPending ||
|
||||
status == TaskStatusClaimed
|
||||
if CanAdminCancelImmediately(status) != immediateCancel {
|
||||
t.Fatalf("CanAdminCancelImmediately(%s) mismatch", status)
|
||||
}
|
||||
if CanRequestCancel(status) != heartbeat ||
|
||||
CanAcknowledgeCancel(status) != heartbeat {
|
||||
t.Fatalf("cancel predicates for %s mismatch", status)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user