Skip to content

Commit 0d6a2e4

Browse files
committed
Sample utilizing workflow registration by name
1 parent a004357 commit 0d6a2e4

File tree

3 files changed

+128
-0
lines changed

3 files changed

+128
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package main
2+
3+
import (
4+
"context"
5+
6+
"github.com/cschleiden/go-workflows/activity"
7+
"github.com/cschleiden/go-workflows/workflow"
8+
)
9+
10+
func Workflow1(ctx workflow.Context, msg string) (int, error) {
11+
logger := workflow.Logger(ctx)
12+
logger.Debug("Entering Workflow1", "msg", msg)
13+
defer logger.Debug("Leaving Workflow1")
14+
15+
r1, err := workflow.ExecuteActivity[int](ctx, workflow.DefaultActivityOptions, Activity1, 35, 12).Get(ctx)
16+
if err != nil {
17+
panic("error getting activity 1 result")
18+
}
19+
logger.Debug("R1 result", "r1", r1)
20+
21+
return r1, nil
22+
}
23+
24+
func SubWorkflow1(ctx workflow.Context, msg string) (int, error) {
25+
return 42, nil
26+
}
27+
28+
func Activity1(ctx context.Context, a, b int) (int, error) {
29+
logger := activity.Logger(ctx)
30+
logger.Debug("Entering Activity1")
31+
defer logger.Debug("Leaving Activity1")
32+
33+
return a + b, nil
34+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"log"
6+
"time"
7+
8+
"github.com/cschleiden/go-workflows/backend"
9+
"github.com/cschleiden/go-workflows/client"
10+
"github.com/cschleiden/go-workflows/internal/workflow"
11+
"github.com/cschleiden/go-workflows/samples"
12+
"github.com/cschleiden/go-workflows/worker"
13+
14+
"github.com/google/uuid"
15+
)
16+
17+
func main() {
18+
ctx, cancel := context.WithCancel(context.Background())
19+
20+
b := samples.GetBackend("simple")
21+
22+
// Run worker
23+
w := RunWorker(ctx, b)
24+
25+
// Start workflow via client
26+
c := client.New(b)
27+
28+
runWorkflow(ctx, c)
29+
30+
cancel()
31+
32+
if err := w.WaitForCompletion(); err != nil {
33+
panic("could not stop worker" + err.Error())
34+
}
35+
}
36+
37+
func runWorkflow(ctx context.Context, c *client.Client) {
38+
wf, err := c.CreateWorkflowInstance(ctx, client.WorkflowInstanceOptions{
39+
InstanceID: uuid.NewString(),
40+
}, "WorkflowName", "Hello world")
41+
if err != nil {
42+
log.Fatal(err)
43+
panic("could not start workflow")
44+
}
45+
46+
result, err := client.GetWorkflowResult[int](ctx, c, wf, time.Second*10)
47+
if err != nil {
48+
log.Fatal(err)
49+
}
50+
51+
log.Println("Workflow finished. Result:", result)
52+
}
53+
54+
func RunWorker(ctx context.Context, mb backend.Backend) *worker.Worker {
55+
w := worker.New(mb, nil)
56+
57+
w.RegisterWorkflow(Workflow1, workflow.WithName("WorkflowName"))
58+
w.RegisterWorkflow(SubWorkflow1, workflow.WithName("SubWorkflowName"))
59+
60+
w.RegisterActivity(Activity1)
61+
62+
if err := w.Start(ctx); err != nil {
63+
panic("could not start worker")
64+
}
65+
66+
return w
67+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/cschleiden/go-workflows/tester"
8+
"github.com/stretchr/testify/mock"
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func Test_Workflow(t *testing.T) {
13+
tester := tester.NewWorkflowTester[int](Workflow1)
14+
15+
tester.OnSubWorkflowByName("SubWorkflowName", mock.Anything, "Hello world").Return(42, nil)
16+
17+
tester.OnActivity(Activity1, mock.Anything, 35, 12).Return(47, nil)
18+
19+
tester.Execute(context.Background(), "Hello world")
20+
21+
require.True(t, tester.WorkflowFinished())
22+
23+
wr, werr := tester.WorkflowResult()
24+
require.Equal(t, 47, wr)
25+
require.Empty(t, werr)
26+
tester.AssertExpectations(t)
27+
}

0 commit comments

Comments
 (0)