@@ -33,6 +33,30 @@ func TestExtract(t *testing.T) {
3333 taskTokenBytes , err := serializer .Serialize (& taskToken )
3434 assert .NoError (t , err )
3535
36+ activityTaskToken := tokenspb.Task {
37+ WorkflowId : tv .WorkflowID (),
38+ RunId : tv .RunID (),
39+ ActivityId : "workflow-activity-id" ,
40+ }
41+ activityTaskTokenBytes , err := serializer .Serialize (& activityTaskToken )
42+ assert .NoError (t , err )
43+
44+ chasmTaskToken := tokenspb.Task {
45+ WorkflowId : tv .WorkflowID (),
46+ RunId : tv .RunID (),
47+ ActivityId : "activity-id" ,
48+ ComponentRef : []byte ("component-ref" ),
49+ }
50+ chasmTaskTokenBytes , err := serializer .Serialize (& chasmTaskToken )
51+ assert .NoError (t , err )
52+
53+ chasmTaskTokenNoActivityID := tokenspb.Task {
54+ RunId : tv .RunID (),
55+ ComponentRef : []byte ("component-ref" ),
56+ }
57+ chasmTaskTokenNoActivityIDBytes , err := serializer .Serialize (& chasmTaskTokenNoActivityID )
58+ assert .NoError (t , err )
59+
3660 testCases := []struct {
3761 name string
3862 req any
@@ -86,6 +110,32 @@ func TestExtract(t *testing.T) {
86110 workflowID : tv .WorkflowID (),
87111 runID : tv .RunID (),
88112 },
113+ {
114+ name : "Frontend RespondActivityTaskCompletedRequest with workflow activity task_token" ,
115+ req : & workflowservice.RespondActivityTaskCompletedRequest {
116+ TaskToken : activityTaskTokenBytes ,
117+ },
118+ fullMethod : "/temporal.api.workflowservice.v1.WorkflowService/RespondActivityTaskCompleted" ,
119+ workflowID : tv .WorkflowID (),
120+ runID : tv .RunID (),
121+ },
122+ {
123+ name : "Frontend RespondActivityTaskCompletedRequest with CHASM task_token" ,
124+ req : & workflowservice.RespondActivityTaskCompletedRequest {
125+ TaskToken : chasmTaskTokenBytes ,
126+ },
127+ fullMethod : "/temporal.api.workflowservice.v1.WorkflowService/RespondActivityTaskCompleted" ,
128+ workflowID : tv .WorkflowID (),
129+ runID : tv .RunID (),
130+ },
131+ {
132+ name : "Frontend RespondActivityTaskCompletedRequest with CHASM task_token and empty activity_id" ,
133+ req : & workflowservice.RespondActivityTaskCompletedRequest {
134+ TaskToken : chasmTaskTokenNoActivityIDBytes ,
135+ },
136+ fullMethod : "/temporal.api.workflowservice.v1.WorkflowService/RespondActivityTaskCompleted" ,
137+ runID : tv .RunID (),
138+ },
89139 {
90140 name : "Frontend RespondQueryTaskCompletedRequest (task_token is ignored)" ,
91141 req : & workflowservice.RespondQueryTaskCompletedRequest {
@@ -152,12 +202,16 @@ func TestExtract(t *testing.T) {
152202 tags := wt .Extract (tt .req , tt .fullMethod )
153203 var (
154204 workflowIDTag tag.Tag
205+ activityIDTag tag.Tag
155206 runIDTag tag.Tag
156207 )
157208 for _ , tg := range tags {
158209 if tg .Key () == tag .WorkflowID ("" ).Key () {
159210 workflowIDTag = tg
160211 }
212+ if tg .Key () == tag .ActivityID ("" ).Key () && tg .Value () != "" {
213+ activityIDTag = tg
214+ }
161215 if tg .Key () == tag .WorkflowRunID ("" ).Key () {
162216 runIDTag = tg
163217 }
@@ -169,6 +223,12 @@ func TestExtract(t *testing.T) {
169223 } else {
170224 assert .Nil (t , workflowIDTag )
171225 }
226+ if tt .name == "Frontend RespondActivityTaskCompletedRequest with CHASM task_token" {
227+ assert .NotNil (t , activityIDTag )
228+ assert .Equal (t , "activity-id" , activityIDTag .Value ())
229+ } else {
230+ assert .Nil (t , activityIDTag )
231+ }
172232 if tt .runID != "" {
173233 assert .NotNil (t , runIDTag )
174234 assert .Equal (t , runIDTag .Value (), tt .runID )
0 commit comments