mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed? Fix setting of default reuse + conflict policy. ## Why? Currently when the frontend request is retried, the request can suddenly be in a bad state that doesn't pass validation if the conflict policy was originally unset and the reuse policy was terminate-if-running because setting the defaults will set a conflict policy - which is not allowed when reuse policy terminate-if-running is used. ## How did you test it? - [ ] built - [ ] run locally and tested manually - [ ] covered by existing tests - [x] added new unit test(s) - [ ] added new functional test(s)
81 lines
2.9 KiB
Go
81 lines
2.9 KiB
Go
package enums
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
enumspb "go.temporal.io/api/enums/v1"
|
|
)
|
|
|
|
func TestSetDefaultWorkflowIdPolicies(t *testing.T) {
|
|
type policies struct {
|
|
reuse enumspb.WorkflowIdReusePolicy
|
|
conflict enumspb.WorkflowIdConflictPolicy
|
|
}
|
|
|
|
for _, tc := range []struct {
|
|
name string
|
|
input policies
|
|
defaultConflictPolicy enumspb.WorkflowIdConflictPolicy
|
|
want policies
|
|
}{
|
|
{
|
|
name: "unspecified policies get defaults",
|
|
input: policies{
|
|
reuse: enumspb.WORKFLOW_ID_REUSE_POLICY_UNSPECIFIED,
|
|
conflict: enumspb.WORKFLOW_ID_CONFLICT_POLICY_UNSPECIFIED,
|
|
},
|
|
defaultConflictPolicy: enumspb.WORKFLOW_ID_CONFLICT_POLICY_FAIL,
|
|
want: policies{
|
|
reuse: enumspb.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE,
|
|
conflict: enumspb.WORKFLOW_ID_CONFLICT_POLICY_FAIL,
|
|
},
|
|
},
|
|
{
|
|
name: "explicitly set policies are not overridden",
|
|
input: policies{
|
|
reuse: enumspb.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE,
|
|
conflict: enumspb.WORKFLOW_ID_CONFLICT_POLICY_USE_EXISTING,
|
|
},
|
|
defaultConflictPolicy: enumspb.WORKFLOW_ID_CONFLICT_POLICY_FAIL,
|
|
want: policies{
|
|
reuse: enumspb.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE,
|
|
conflict: enumspb.WORKFLOW_ID_CONFLICT_POLICY_USE_EXISTING,
|
|
},
|
|
},
|
|
{
|
|
name: "terminate-if-running reuse policy is migrated to terminate-existing conflict policy",
|
|
input: policies{
|
|
reuse: enumspb.WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING, //nolint:staticcheck // SA1019: intentional migration coverage for deprecated policy
|
|
conflict: enumspb.WORKFLOW_ID_CONFLICT_POLICY_UNSPECIFIED,
|
|
},
|
|
defaultConflictPolicy: enumspb.WORKFLOW_ID_CONFLICT_POLICY_FAIL,
|
|
want: policies{
|
|
reuse: enumspb.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE,
|
|
conflict: enumspb.WORKFLOW_ID_CONFLICT_POLICY_TERMINATE_EXISTING,
|
|
},
|
|
},
|
|
{
|
|
name: "terminate-if-running reuse policy with an explicit conflict policy is not migrated",
|
|
input: policies{
|
|
reuse: enumspb.WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING, //nolint:staticcheck // SA1019: intentional migration coverage for deprecated policy
|
|
conflict: enumspb.WORKFLOW_ID_CONFLICT_POLICY_USE_EXISTING,
|
|
},
|
|
defaultConflictPolicy: enumspb.WORKFLOW_ID_CONFLICT_POLICY_FAIL,
|
|
want: policies{
|
|
reuse: enumspb.WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING, //nolint:staticcheck // SA1019: intentional migration coverage for deprecated policy
|
|
conflict: enumspb.WORKFLOW_ID_CONFLICT_POLICY_USE_EXISTING, // same as before!
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
SetDefaultWorkflowIDPolicies(&tc.input.reuse, &tc.input.conflict, tc.defaultConflictPolicy)
|
|
require.Equal(t, tc.want, tc.input)
|
|
|
|
// check idempotency
|
|
SetDefaultWorkflowIDPolicies(&tc.input.reuse, &tc.input.conflict, tc.defaultConflictPolicy)
|
|
require.Equal(t, tc.want, tc.input)
|
|
})
|
|
}
|
|
}
|