Skip to content

Commit 35dafdd

Browse files
committed
revert how workflow and activity name is determined
1 parent 8a0e831 commit 35dafdd

File tree

12 files changed

+38
-100
lines changed

12 files changed

+38
-100
lines changed

backend/test/e2e.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func EndToEndBackendTest(t *testing.T, setup func(options ...backend.BackendOpti
7575
output, err := runWorkflowWithResult[string](t, ctx, c, wf, "hello")
7676

7777
require.Zero(t, output)
78-
require.ErrorContains(t, err, "workflow github.com/cschleiden/go-workflows/backend/test.EndToEndBackendTest.func3.1 not found")
78+
require.ErrorContains(t, err, "workflow 1 not found")
7979
},
8080
},
8181
{

client/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (c *client) CreateWorkflowInstance(ctx context.Context, options WorkflowIns
7070
wfi := core.NewWorkflowInstance(options.InstanceID, uuid.NewString())
7171
metadata := &workflow.Metadata{}
7272

73-
workflowName := fn.FuncName(wf)
73+
workflowName := fn.Name(wf)
7474

7575
// Start new span for the workflow instance
7676
ctx, span := c.backend.Tracer().Start(ctx, fmt.Sprintf("CreateWorkflowInstance: %s", workflowName), trace.WithAttributes(

internal/activity/executor_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func TestExecutor_ExecuteActivity(t *testing.T) {
4747
require.NoError(t, r.RegisterActivity(a))
4848

4949
return &history.ActivityScheduledAttributes{
50-
Name: fn.FuncName(a),
50+
Name: fn.Name(a),
5151
}
5252
},
5353
result: func(t *testing.T, result payload.Payload, err error) {
@@ -67,7 +67,7 @@ func TestExecutor_ExecuteActivity(t *testing.T) {
6767
inputs, _ := args.ArgsToInputs(converter.DefaultConverter, 42)
6868

6969
return &history.ActivityScheduledAttributes{
70-
Name: fn.FuncName(a),
70+
Name: fn.Name(a),
7171
Inputs: inputs,
7272
}
7373
},
@@ -90,7 +90,7 @@ func TestExecutor_ExecuteActivity(t *testing.T) {
9090
inputs, _ := args.ArgsToInputs(converter.DefaultConverter, 42)
9191

9292
return &history.ActivityScheduledAttributes{
93-
Name: fn.FuncName(a),
93+
Name: fn.Name(a),
9494
Inputs: inputs,
9595
}
9696
},

internal/fn/fn.go

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,17 @@
11
package fn
22

33
import (
4-
"fmt"
54
"reflect"
65
"runtime"
76
"strings"
87
)
98

10-
func FuncName(i any) string {
9+
func Name(i interface{}) string {
1110
// Adapted from https://stackoverflow.com/a/7053871
1211
fnName := runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
13-
return strings.TrimSuffix(fnName, "-fm")
14-
}
15-
16-
func StructName(v any) string {
17-
t := reflect.TypeOf(v)
1812

19-
tt := t
20-
pkgPath := tt.PkgPath()
21-
for pkgPath == "" && tt.Kind() == reflect.Pointer {
22-
tt = tt.Elem()
23-
pkgPath = tt.PkgPath()
24-
}
25-
if pkgPath != "" {
26-
pkgPath += "."
27-
}
13+
s := strings.Split(fnName, ".")
14+
fnName = s[len(s)-1]
2815

29-
tokens := strings.Split(t.String(), ".")
30-
typeName := strings.TrimPrefix(tokens[len(tokens)-1], "*")
31-
if t.Kind() == reflect.Pointer {
32-
typeName = fmt.Sprintf("*%v", typeName)
33-
if pkgPath != "" {
34-
typeName = fmt.Sprintf("(%v)", typeName)
35-
}
36-
}
37-
38-
return pkgPath + typeName
16+
return strings.TrimSuffix(fnName, "-fm")
3917
}

internal/fn/fn_test.go

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -31,62 +31,27 @@ func Test_FuncName(t *testing.T) {
3131
{
3232
name: "function",
3333
i: bar,
34-
want: "github.com/cschleiden/go-workflows/internal/fn.bar",
34+
want: "bar",
3535
},
3636
{
3737
name: "struct method",
3838
i: f.bar,
39-
want: "github.com/cschleiden/go-workflows/internal/fn.(*foo).bar",
39+
want: "bar",
4040
},
4141
{
4242
name: "exported struct method",
4343
i: f.DoSomething,
44-
want: "github.com/cschleiden/go-workflows/internal/fn.(*foo).DoSomething",
44+
want: "DoSomething",
4545
},
4646
{
4747
name: "anonymous function",
4848
i: func() {},
49-
want: "github.com/cschleiden/go-workflows/internal/fn.Test_FuncName.func1",
49+
want: "func1",
5050
},
5151
}
5252
for _, tt := range tests {
5353
t.Run(tt.name, func(t *testing.T) {
54-
got := FuncName(tt.i)
55-
require.Equal(t, tt.want, got)
56-
})
57-
}
58-
}
59-
60-
func Test_StructName(t *testing.T) {
61-
tests := []struct {
62-
name string
63-
i interface{}
64-
want string
65-
}{
66-
{
67-
name: "value",
68-
i: foo{},
69-
want: "github.com/cschleiden/go-workflows/internal/fn.foo",
70-
},
71-
{
72-
name: "pointer",
73-
i: &foo{},
74-
want: "github.com/cschleiden/go-workflows/internal/fn.(*foo)",
75-
},
76-
{
77-
name: "inline value",
78-
i: struct{ foo int }{},
79-
want: "struct { foo int }",
80-
},
81-
{
82-
name: "inline pointer",
83-
i: &struct{ foo int }{},
84-
want: "*struct { foo int }",
85-
},
86-
}
87-
for _, tt := range tests {
88-
t.Run(tt.name, func(t *testing.T) {
89-
got := StructName(tt.i)
54+
got := Name(tt.i)
9055
require.Equal(t, tt.want, got)
9156
})
9257
}

internal/workflow/executor_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func Test_Executor(t *testing.T) {
9999
time.Now(),
100100
history.EventType_WorkflowExecutionStarted,
101101
&history.ExecutionStartedAttributes{
102-
Name: fn.FuncName(workflowWithActivity),
102+
Name: fn.Name(workflowWithActivity),
103103
Inputs: []payload.Payload{},
104104
},
105105
),
@@ -115,7 +115,7 @@ func Test_Executor(t *testing.T) {
115115
inputs, _ := converter.DefaultConverter.To(42)
116116
require.IsType(t, &command.ScheduleActivityCommand{}, e.workflowState.Commands()[0])
117117
require.Equal(t, command.CommandState_Committed, e.workflowState.Commands()[0].State())
118-
require.Equal(t, "github.com/cschleiden/go-workflows/internal/workflow.activity1", e.workflowState.Commands()[0].(*command.ScheduleActivityCommand).Name)
118+
require.Equal(t, "activity1", e.workflowState.Commands()[0].(*command.ScheduleActivityCommand).Name)
119119
require.Equal(t, []payload.Payload{inputs}, e.workflowState.Commands()[0].(*command.ScheduleActivityCommand).Inputs)
120120
},
121121
},
@@ -151,7 +151,7 @@ func Test_Executor(t *testing.T) {
151151
time.Now(),
152152
history.EventType_WorkflowExecutionStarted,
153153
&history.ExecutionStartedAttributes{
154-
Name: fn.FuncName(workflowWithActivity),
154+
Name: fn.Name(workflowWithActivity),
155155
Inputs: []payload.Payload{},
156156
},
157157
),
@@ -160,7 +160,7 @@ func Test_Executor(t *testing.T) {
160160
time.Now(),
161161
history.EventType_ActivityScheduled,
162162
&history.ActivityScheduledAttributes{
163-
Name: "github.com/cschleiden/go-workflows/internal/workflow.activity1",
163+
Name: "activity1",
164164
Inputs: []payload.Payload{inputs},
165165
},
166166
history.ScheduleEventID(1),
@@ -212,15 +212,15 @@ func Test_Executor(t *testing.T) {
212212
time.Now(),
213213
history.EventType_WorkflowExecutionStarted,
214214
&history.ExecutionStartedAttributes{
215-
Name: fn.FuncName(workflowWithActivity),
215+
Name: fn.Name(workflowWithActivity),
216216
Inputs: []payload.Payload{},
217217
},
218218
),
219219
history.NewPendingEvent(
220220
time.Now(),
221221
history.EventType_ActivityScheduled,
222222
&history.ActivityScheduledAttributes{
223-
Name: "github.com/cschleiden/go-workflows/internal/workflow.activity1",
223+
Name: "activity1",
224224
Inputs: []payload.Payload{inputs},
225225
},
226226
history.ScheduleEventID(1),
@@ -305,7 +305,7 @@ func Test_Executor(t *testing.T) {
305305
time.Now(),
306306
history.EventType_WorkflowExecutionStarted,
307307
&history.ExecutionStartedAttributes{
308-
Name: fn.FuncName(workflowWithSelector),
308+
Name: fn.Name(workflowWithSelector),
309309
Inputs: []payload.Payload{},
310310
},
311311
),
@@ -351,7 +351,7 @@ func Test_Executor(t *testing.T) {
351351
time.Now(),
352352
history.EventType_WorkflowExecutionStarted,
353353
&history.ExecutionStartedAttributes{
354-
Name: fn.FuncName(workflowWithTimer),
354+
Name: fn.Name(workflowWithTimer),
355355
Inputs: []payload.Payload{},
356356
},
357357
),
@@ -432,7 +432,7 @@ func Test_Executor(t *testing.T) {
432432
time.Now(),
433433
history.EventType_WorkflowExecutionStarted,
434434
&history.ExecutionStartedAttributes{
435-
Name: fn.FuncName(workflowWithSignal),
435+
Name: fn.Name(workflowWithSignal),
436436
Inputs: []payload.Payload{},
437437
},
438438
),
@@ -473,7 +473,7 @@ func Test_Executor(t *testing.T) {
473473
time.Now(),
474474
history.EventType_WorkflowExecutionStarted,
475475
&history.ExecutionStartedAttributes{
476-
Name: fn.FuncName(workflowPanic),
476+
Name: fn.Name(workflowPanic),
477477
Inputs: []payload.Payload{},
478478
},
479479
),
@@ -613,7 +613,7 @@ func startWorkflowTask(instanceID string, workflow interface{}, workflowArgs ...
613613
time.Now(),
614614
history.EventType_WorkflowExecutionStarted,
615615
&history.ExecutionStartedAttributes{
616-
Name: fn.FuncName(workflow),
616+
Name: fn.Name(workflow),
617617
Inputs: inputs,
618618
},
619619
),

internal/workflow/registry.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func (r *Registry) RegisterWorkflow(workflow Workflow, opts ...RegisterOption) e
6767
cfg := registerOptions(opts).applyRegisterOptions(RegisterConfig{})
6868
name := cfg.Name
6969
if name == "" {
70-
name = fn.FuncName(workflow)
70+
name = fn.Name(workflow)
7171
}
7272

7373
wfType := reflect.TypeOf(workflow)
@@ -121,7 +121,7 @@ func (r *Registry) RegisterActivity(activity interface{}, opts ...RegisterOption
121121
// Activity as function
122122
name := cfg.Name
123123
if name == "" {
124-
name = fn.FuncName(activity)
124+
name = fn.Name(activity)
125125
}
126126

127127
if err := checkActivity(reflect.TypeOf(activity)); err != nil {
@@ -144,8 +144,6 @@ func (r *Registry) registerActivitiesFromStruct(a interface{}) error {
144144
v := reflect.ValueOf(a)
145145
t := v.Type()
146146

147-
structName := fn.StructName(a)
148-
149147
r.Lock()
150148
defer r.Unlock()
151149

@@ -162,10 +160,7 @@ func (r *Registry) registerActivitiesFromStruct(a interface{}) error {
162160
return err
163161
}
164162

165-
name := structName + "." + mt.Name
166-
if _, ok := r.activityMap[name]; ok {
167-
return &ErrActivityAlreadyRegistered{fmt.Sprintf("activity with name %q already registered", name)}
168-
}
163+
name := mt.Name
169164
r.activityMap[name] = mv.Interface()
170165
}
171166

internal/workflow/registry_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func TestRegistry_RegisterWorkflow(t *testing.T) {
2929
args: args{
3030
workflow: reg_workflow1,
3131
},
32-
wantName: "github.com/cschleiden/go-workflows/internal/workflow.reg_workflow1",
32+
wantName: "reg_workflow1",
3333
},
3434
{
3535
name: "valid workflow by name",
@@ -130,7 +130,7 @@ func Test_ActivityRegistration(t *testing.T) {
130130
err := r.RegisterActivity(reg_activity)
131131
require.NoError(t, err)
132132

133-
x, err := r.GetActivity("github.com/cschleiden/go-workflows/internal/workflow.reg_activity")
133+
x, err := r.GetActivity("reg_activity")
134134
require.NoError(t, err)
135135

136136
fn, ok := x.(func(context context.Context) error)
@@ -181,11 +181,11 @@ func Test_ActivityRegistrationOnStruct(t *testing.T) {
181181
require.NoError(t, err)
182182

183183
b := &reg_activities{}
184-
x, err := r.GetActivity(fn.FuncName(b.Activity1))
184+
x, err := r.GetActivity(fn.Name(b.Activity1))
185185
require.NoError(t, err)
186186

187187
// Ignore private methods
188-
y, err := r.GetActivity(fn.FuncName(b.privateActivity))
188+
y, err := r.GetActivity(fn.Name(b.privateActivity))
189189
require.Error(t, err)
190190
require.Nil(t, y)
191191

tester/tester.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ func (wt *workflowTester[TResult]) OnActivity(activity workflow.Activity, args .
262262
// Register activity so that we can correctly identify its arguments later
263263
wt.registry.RegisterActivity(activity)
264264

265-
name := fn.FuncName(activity)
265+
name := fn.Name(activity)
266266
wt.mockedActivities[name] = true
267267
return wt.ma.On(name, args...)
268268
}
@@ -279,7 +279,7 @@ func (wt *workflowTester[TResult]) OnSubWorkflow(workflow workflow.Workflow, arg
279279
// Register workflow so that we can correctly identify its arguments later
280280
wt.registry.RegisterWorkflow(workflow)
281281

282-
name := fn.FuncName(workflow)
282+
name := fn.Name(workflow)
283283
wt.mockedWorkflows[name] = true
284284
return wt.mw.On(name, args...)
285285
}
@@ -796,7 +796,7 @@ func (wt *workflowTester[TResult]) scheduleSubWorkflow(event history.WorkflowEve
796796
}
797797

798798
func (wt *workflowTester[TResult]) getInitialEvent(wf interface{}, args []interface{}) *history.Event {
799-
name := fn.FuncName(wf)
799+
name := fn.Name(wf)
800800

801801
inputs, err := margs.ArgsToInputs(wt.converter, args...)
802802
if err != nil {

tester/tester_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func Test_Activity(t *testing.T) {
5959
func Test_OverrideActivity(t *testing.T) {
6060
tester := NewWorkflowTester[int](workflowWithActivity)
6161

62-
tester.OnActivityByName("github.com/cschleiden/go-workflows/tester.activity1", activity1, mock.Anything).Return(23, nil)
62+
tester.OnActivityByName("activity1", activity1, mock.Anything).Return(23, nil)
6363

6464
tester.Execute(context.Background())
6565

0 commit comments

Comments
 (0)