11package io .temporal .client ;
22
3+ import static org .junit .Assert .*;
34import static org .mockito .ArgumentMatchers .any ;
45import static org .mockito .Mockito .*;
56
67import com .uber .m3 .tally .Scope ;
78import io .temporal .activity .ActivityInterface ;
89import io .temporal .activity .ActivityMethod ;
10+ import io .temporal .api .common .v1 .Payload ;
11+ import io .temporal .common .context .ContextPropagator ;
12+ import io .temporal .common .interceptors .ActivityClientCallsInterceptor ;
13+ import io .temporal .common .interceptors .ActivityClientCallsInterceptorBase ;
14+ import io .temporal .common .interceptors .ActivityClientInterceptor ;
15+ import io .temporal .common .interceptors .Header ;
916import io .temporal .serviceclient .WorkflowServiceStubs ;
1017import io .temporal .serviceclient .WorkflowServiceStubsOptions ;
1118import io .temporal .workflow .Functions ;
1219import java .time .Duration ;
20+ import java .util .Collections ;
21+ import java .util .concurrent .atomic .AtomicReference ;
1322import org .junit .Before ;
1423import org .junit .Test ;
1524
@@ -27,12 +36,13 @@ public interface WrongActivity {
2736 void doWrong ();
2837 }
2938
39+ private WorkflowServiceStubs stubs ;
3040 private ActivityClient client ;
3141 private StartActivityOptions options ;
3242
3343 @ Before
3444 public void setUp () {
35- WorkflowServiceStubs stubs = mock (WorkflowServiceStubs .class );
45+ stubs = mock (WorkflowServiceStubs .class );
3646 WorkflowServiceStubsOptions stubsOptions = mock (WorkflowServiceStubsOptions .class );
3747 Scope scope = mock (Scope .class );
3848 when (stubs .getOptions ()).thenReturn (stubsOptions );
@@ -48,6 +58,39 @@ public void setUp() {
4858 .build ();
4959 }
5060
61+ @ Test
62+ public void testContextPropagatorHeaderIsIncluded () {
63+ Payload payload = Payload .newBuilder ().build ();
64+ ContextPropagator propagator = mock (ContextPropagator .class );
65+ when (propagator .getCurrentContext ()).thenReturn ("ctx" );
66+ when (propagator .serializeContext ("ctx" ))
67+ .thenReturn (Collections .singletonMap ("my-key" , payload ));
68+
69+ AtomicReference <Header > capturedHeader = new AtomicReference <>();
70+ ActivityClientInterceptor capturingInterceptor =
71+ next ->
72+ new ActivityClientCallsInterceptorBase (next ) {
73+ @ Override
74+ public ActivityClientCallsInterceptor .StartActivityOutput startActivity (
75+ ActivityClientCallsInterceptor .StartActivityInput input ) {
76+ capturedHeader .set (input .getHeader ());
77+ return new ActivityClientCallsInterceptor .StartActivityOutput ("fake-id" , null );
78+ }
79+ };
80+
81+ ActivityClientOptions opts =
82+ ActivityClientOptions .newBuilder ()
83+ .setContextPropagators (Collections .singletonList (propagator ))
84+ .setInterceptors (Collections .singletonList (capturingInterceptor ))
85+ .build ();
86+
87+ ActivityClient clientWithPropagators = ActivityClient .newInstance (stubs , opts );
88+ clientWithPropagators .start (ProbedActivity .class , ProbedActivity ::doIt , options );
89+
90+ assertNotNull (capturedHeader .get ());
91+ assertEquals (payload , capturedHeader .get ().getValues ().get ("my-key" ));
92+ }
93+
5194 @ Test (expected = NoSuchMethodError .class )
5295 @ SuppressWarnings ("unchecked" )
5396 public void testStartWithMethodFromWrongClass () {
0 commit comments