Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions go-sandbox/activities/dynamic/activity.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dynamic

import (
"context"
"fmt"

"go.temporal.io/sdk/activity"
"go.temporal.io/sdk/converter"
)

// @@@SNIPSTART go-dynamic-activity-definition
func DynamicActivity(ctx context.Context, args converter.EncodedValues) (string, error) {
var arg1, arg2 string
err := args.Get(&arg1, &arg2)
if err != nil {
return "", fmt.Errorf("failed to decode arguments: %w", err)
}

info := activity.GetInfo(ctx)
result := fmt.Sprintf("%s - %s - %s", info.WorkflowType.Name, arg1, arg2)

return result, nil
}
// @@@SNIPEND
34 changes: 34 additions & 0 deletions go-sandbox/activities/dynamic/dynamic_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package dynamic_test

import (
"testing"

"github.com/stretchr/testify/suite"
"go.temporal.io/sdk/activity"
"go.temporal.io/sdk/testsuite"

"my-org/quickstart/activities/dynamic"
)

type DynamicActivityTestSuite struct {
suite.Suite
testsuite.WorkflowTestSuite
}

func TestDynamicActivityTestSuite(t *testing.T) {
suite.Run(t, new(DynamicActivityTestSuite))
}

func (s *DynamicActivityTestSuite) Test_UnregisteredActivityRunsDynamicActivity() {
env := s.NewTestWorkflowEnvironment()
env.RegisterWorkflow(dynamic.CallUnregisteredActivityWorkflow)
env.RegisterDynamicActivity(dynamic.DynamicActivity, activity.DynamicRegisterOptions{})

env.ExecuteWorkflow(dynamic.CallUnregisteredActivityWorkflow, "first", "second")
s.True(env.IsWorkflowCompleted())
s.NoError(env.GetWorkflowError())

var result string
s.NoError(env.GetWorkflowResult(&result))
s.Equal("CallUnregisteredActivityWorkflow - first - second", result)
}
29 changes: 29 additions & 0 deletions go-sandbox/activities/dynamic/worker/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package main

import (
"log"

"go.temporal.io/sdk/activity"
"go.temporal.io/sdk/client"
"go.temporal.io/sdk/worker"

"my-org/quickstart/activities/dynamic"
)

func main() {
temporalClient, err := client.Dial(client.Options{})
if err != nil {
log.Fatalln("Unable to create client", err)
}
defer temporalClient.Close()

w := worker.New(temporalClient, dynamic.TaskQueue, worker.Options{})
w.RegisterWorkflow(dynamic.CallUnregisteredActivityWorkflow)
// @@@SNIPSTART go-dynamic-activity-register
w.RegisterDynamicActivity(dynamic.DynamicActivity, activity.DynamicRegisterOptions{})
// @@@SNIPEND

if err := w.Run(worker.InterruptCh()); err != nil {
log.Fatalln("Unable to start Worker", err)
}
}
21 changes: 21 additions & 0 deletions go-sandbox/activities/dynamic/workflow.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package dynamic

import (
"time"

"go.temporal.io/sdk/workflow"
)

const TaskQueue = "dynamic-activity"

// CallUnregisteredActivityWorkflow calls an Activity Type that no Activity is
// registered under, so the Worker runs the Dynamic Activity instead.
func CallUnregisteredActivityWorkflow(ctx workflow.Context, arg1, arg2 string) (string, error) {
ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{
StartToCloseTimeout: 10 * time.Second,
})

var result string
err := workflow.ExecuteActivity(ctx, "UnregisteredActivityType", arg1, arg2).Get(ctx, &result)
return result, err
}
Loading