@@ -31,6 +31,7 @@ func TestWorkflowRegistration(t *testing.T) {
3131 tests := []struct {
3232 msg string
3333 register func (r * registry )
34+ registerPanic bool
3435 workflowType string
3536 altWorkflowType string
3637 resolveByFunction interface {}
@@ -66,11 +67,41 @@ func TestWorkflowRegistration(t *testing.T) {
6667 altWorkflowType : "go.uber.org/cadence/internal.(*testWorkflowStruct).Method-fm" ,
6768 resolveByFunction : w .Method ,
6869 },
70+ {
71+ msg : "register duplicated workflow in one registry (should panic)" ,
72+ register : func (r * registry ) {
73+ r .RegisterWorkflow (testWorkflowFunction )
74+ r .RegisterWorkflow (testWorkflowFunction )
75+ },
76+ registerPanic : true ,
77+ },
78+ {
79+ msg : "register duplicated workflow with already registered check disabled" ,
80+ register : func (r * registry ) {
81+ r .RegisterWorkflow (testWorkflowFunction )
82+ r .RegisterWorkflowWithOptions (testWorkflowFunction , RegisterWorkflowOptions {DisableAlreadyRegisteredCheck : true })
83+ },
84+ workflowType : "go.uber.org/cadence/internal.testWorkflowFunction" ,
85+ resolveByFunction : testWorkflowFunction ,
86+ },
87+ {
88+ msg : "register duplicated workflow in chained registry (should panic)" ,
89+ register : func (r * registry ) {
90+ r .next .RegisterWorkflow (testWorkflowFunction )
91+ r .RegisterWorkflow (testWorkflowFunction )
92+ },
93+ registerPanic : true ,
94+ },
6995 }
7096
7197 for _ , tt := range tests {
7298 t .Run (tt .msg , func (t * testing.T ) {
7399 r := newRegistry ()
100+ if tt .registerPanic {
101+ require .Panics (t , func () { tt .register (r ) }, "register should panic" )
102+ return
103+ }
104+
74105 tt .register (r )
75106
76107 // Verify registered workflow type
@@ -104,6 +135,7 @@ func TestActivityRegistration(t *testing.T) {
104135 tests := []struct {
105136 msg string
106137 register func (r * registry )
138+ registerPanic bool
107139 activityType string
108140 altActivityType string
109141 resolveByFunction interface {}
@@ -156,10 +188,41 @@ func TestActivityRegistration(t *testing.T) {
156188 resolveByFunction : (& testActivityStruct {}).Method ,
157189 resolveByAlias : "prefix.Method" ,
158190 },
191+ {
192+ msg : "register duplicated activity function in one registry (should panic)" ,
193+ register : func (r * registry ) {
194+ duplicatedActivityAlias := "activity.alias"
195+ r .RegisterActivityWithOptions (testActivityFunction , RegisterActivityOptions {Name : duplicatedActivityAlias })
196+ r .RegisterActivityWithOptions (testActivityFunction , RegisterActivityOptions {Name : duplicatedActivityAlias })
197+ },
198+ registerPanic : true ,
199+ },
200+ {
201+ msg : "register duplicated activity struct with already registered check disabled" ,
202+ register : func (r * registry ) {
203+ r .RegisterActivity (& testActivityStruct {})
204+ r .RegisterActivityWithOptions (& testActivityStruct {}, RegisterActivityOptions {DisableAlreadyRegisteredCheck : true })
205+ },
206+ activityType : "go.uber.org/cadence/internal.(*testActivityStruct).Method" ,
207+ resolveByFunction : (& testActivityStruct {}).Method ,
208+ },
209+ {
210+ msg : "register duplicated activity function in chained registry (should panic)" ,
211+ register : func (r * registry ) {
212+ r .next .RegisterActivity (testActivityFunction )
213+ r .RegisterActivity (testActivityFunction )
214+ },
215+ registerPanic : true ,
216+ },
159217 }
160218 for _ , tt := range tests {
161219 t .Run (tt .msg , func (t * testing.T ) {
162220 r := newRegistry ()
221+ if tt .registerPanic {
222+ require .Panics (t , func () { tt .register (r ) }, "register should panic" )
223+ return
224+ }
225+
163226 tt .register (r )
164227
165228 // Verify registered activity type
0 commit comments