Skip to content

Commit

Permalink
Fix bug in updateWorkflowByID (temporalio#1548)
Browse files Browse the repository at this point in the history
updateWorkflowByID was not targeting the correct workflow handle.
  • Loading branch information
Quinn-With-Two-Ns committed Jul 17, 2024
1 parent cd5ddeb commit 81a76b1
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 2 deletions.
4 changes: 2 additions & 2 deletions internal/internal_workflow_testsuite.go
Original file line number Diff line number Diff line change
Expand Up @@ -2539,8 +2539,8 @@ func (env *testWorkflowEnvironmentImpl) updateWorkflowByID(workflowID, name, id
if err != nil {
panic(err)
}
env.postCallback(func() {
env.updateHandler(name, id, data, nil, uc)
workflowHandle.env.postCallback(func() {
workflowHandle.env.updateHandler(name, id, data, nil, uc)
}, true)
return nil
}
Expand Down
61 changes: 61 additions & 0 deletions internal/workflow_testsuite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,67 @@ func TestWorkflowIDUpdateWorkflowByID(t *testing.T) {
require.Equal(t, "input", str)
}

func TestChildWorkflowUpdate(t *testing.T) {
var suite WorkflowTestSuite
env := suite.NewTestWorkflowEnvironment()
wfID := "fake_workflow_id"
env.SetStartWorkflowOptions(StartWorkflowOptions{
ID: wfID,
})
env.RegisterDelayedCallback(func() {
err := env.UpdateWorkflowByID("child-workflow", "child-handler", "1", &updateCallback{
accept: func() {
},
reject: func(err error) {
require.Fail(t, "update failed", err)
},
complete: func(result interface{}, err error) {
if err != nil {
require.Fail(t, "update failed", err)
}
},
}, nil)
assert.NoError(t, err)
}, time.Second*5)

env.RegisterWorkflow(updateChildWf)
env.RegisterWorkflow(updateParentWf)

env.ExecuteWorkflow(updateParentWf)
assert.NoError(t, env.GetWorkflowErrorByID(wfID))
}

func updateParentWf(ctx Context) error {
if err := SetUpdateHandler(ctx, "parent-handler", func(ctx Context, input interface{}) error {
return nil
}, UpdateHandlerOptions{}); err != nil {
return err
}

var childErr error
if err := ExecuteChildWorkflow(WithChildWorkflowOptions(ctx, ChildWorkflowOptions{
WorkflowID: "child-workflow",
}), updateChildWf).Get(ctx, &childErr); err != nil {
return err
}
return childErr
}

func updateChildWf(ctx Context) error {
var done bool
err := SetUpdateHandler(ctx, "child-handler", func(ctx Context, input interface{}) error {
done = true
return nil
}, UpdateHandlerOptions{})
if err != nil {
return err
}

return Await(ctx, func() bool {
return done
})
}

func TestWorkflowUpdateOrder(t *testing.T) {
var suite WorkflowTestSuite
// Test UpdateWorkflowByID works with custom ID
Expand Down

0 comments on commit 81a76b1

Please sign in to comment.