Files
hatchet/pkg/repository/workflow_checksum_test.go
T
Gabe Ruttner 2fdc47a6af feat: multiple slot types (#2927)
* feat: adds support for multiple slot types, primarily motivated by durable slots

---------

Co-authored-by: mrkaye97 <mrkaye97@gmail.com>
2026-02-17 05:43:47 -08:00

158 lines
3.6 KiB
Go

package repository
import (
"testing"
)
func TestChecksumV1_BackwardsCompatibility(t *testing.T) {
// Compute a baseline checksum with no IsDurable or SlotRequests fields set
// (simulating a pre-feature workflow registration).
baselineOpts := &CreateWorkflowVersionOpts{
Name: "test-workflow",
Tasks: []CreateStepOpts{
{
ReadableId: "step1",
Action: "default:step1",
},
},
}
baselineChecksum, _, err := checksumV1(baselineOpts)
if err != nil {
t.Fatalf("unexpected error computing baseline checksum: %v", err)
}
t.Run("IsDurable false does not change hash", func(t *testing.T) {
opts := &CreateWorkflowVersionOpts{
Name: "test-workflow",
Tasks: []CreateStepOpts{
{
ReadableId: "step1",
Action: "default:step1",
IsDurable: false,
},
},
}
cs, _, err := checksumV1(opts)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cs != baselineChecksum {
t.Errorf("IsDurable=false changed the hash\n baseline: %s\n got: %s", baselineChecksum, cs)
}
})
t.Run("SlotRequests default:1 does not change hash", func(t *testing.T) {
opts := &CreateWorkflowVersionOpts{
Name: "test-workflow",
Tasks: []CreateStepOpts{
{
ReadableId: "step1",
Action: "default:step1",
SlotRequests: map[string]int32{SlotTypeDefault: 1},
},
},
}
cs, _, err := checksumV1(opts)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cs != baselineChecksum {
t.Errorf("SlotRequests={default:1} changed the hash\n baseline: %s\n got: %s", baselineChecksum, cs)
}
})
t.Run("IsDurable false and SlotRequests default:1 together do not change hash", func(t *testing.T) {
opts := &CreateWorkflowVersionOpts{
Name: "test-workflow",
Tasks: []CreateStepOpts{
{
ReadableId: "step1",
Action: "default:step1",
IsDurable: false,
SlotRequests: map[string]int32{SlotTypeDefault: 1},
},
},
}
cs, _, err := checksumV1(opts)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cs != baselineChecksum {
t.Errorf("IsDurable=false + SlotRequests={default:1} changed the hash\n baseline: %s\n got: %s", baselineChecksum, cs)
}
})
t.Run("IsDurable true changes hash", func(t *testing.T) {
opts := &CreateWorkflowVersionOpts{
Name: "test-workflow",
Tasks: []CreateStepOpts{
{
ReadableId: "step1",
Action: "default:step1",
IsDurable: true,
},
},
}
cs, _, err := checksumV1(opts)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cs == baselineChecksum {
t.Error("IsDurable=true should change the hash, but it did not")
}
})
t.Run("custom SlotRequests changes hash", func(t *testing.T) {
opts := &CreateWorkflowVersionOpts{
Name: "test-workflow",
Tasks: []CreateStepOpts{
{
ReadableId: "step1",
Action: "default:step1",
SlotRequests: map[string]int32{"gpu": 2},
},
},
}
cs, _, err := checksumV1(opts)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cs == baselineChecksum {
t.Error("SlotRequests={gpu:2} should change the hash, but it did not")
}
})
t.Run("SlotRequests default:2 changes hash", func(t *testing.T) {
opts := &CreateWorkflowVersionOpts{
Name: "test-workflow",
Tasks: []CreateStepOpts{
{
ReadableId: "step1",
Action: "default:step1",
SlotRequests: map[string]int32{SlotTypeDefault: 2},
},
},
}
cs, _, err := checksumV1(opts)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cs == baselineChecksum {
t.Error("SlotRequests={default:2} should change the hash, but it did not")
}
})
}