@@ -14,8 +14,10 @@ import (
1414 "go.opentelemetry.io/otel/sdk/trace/tracetest"
1515 "go.opentelemetry.io/otel/trace"
1616
17+ "go.temporal.io/sdk/client"
1718 "go.temporal.io/sdk/contrib/opentelemetry"
1819 "go.temporal.io/sdk/interceptor"
20+ "go.temporal.io/sdk/internal"
1921 "go.temporal.io/sdk/internal/interceptortest"
2022 "go.temporal.io/sdk/temporal"
2123 "go.temporal.io/sdk/testsuite"
@@ -35,6 +37,34 @@ func TestSpanPropagation(t *testing.T) {
3537 interceptortest .AssertSpanPropagation (t , testTracer )
3638}
3739
40+ func TestStandaloneActivitySpanCreation (t * testing.T ) {
41+ rec := tracetest .NewSpanRecorder ()
42+ tracer , err := opentelemetry .NewTracer (opentelemetry.TracerOptions {
43+ Tracer : sdktrace .NewTracerProvider (sdktrace .WithSpanProcessor (rec )).Tracer ("" ),
44+ })
45+ require .NoError (t , err )
46+
47+ ctx := internal .NewHeaderContext (context .Background ())
48+ outbound := interceptor .NewTracingInterceptor (tracer ).InterceptClient (& testNoopClientOutbound {})
49+ _ , _ = outbound .ExecuteActivity (ctx , & interceptor.ClientExecuteActivityInput {
50+ ActivityType : "test-saa" ,
51+ Options : & client.StartActivityOptions {ID : "test-saa-123" },
52+ })
53+
54+ spans := rec .Ended ()
55+ require .Len (t , spans , 1 )
56+ assert .Equal (t , "StartActivity:test-saa" , spans [0 ].Name ())
57+
58+ var foundActivityID bool
59+ for _ , attr := range spans [0 ].Attributes () {
60+ if string (attr .Key ) == "temporalActivityID" {
61+ foundActivityID = true
62+ assert .Equal (t , "test-saa-123" , attr .Value .AsString ())
63+ }
64+ }
65+ require .True (t , foundActivityID , "expected activity ID span attribute" )
66+ }
67+
3868type testTracer struct {
3969 interceptor.Tracer
4070 rec * tracetest.SpanRecorder
@@ -235,3 +265,11 @@ func TestSpanFromWorkflowContextNoOpSpan(t *testing.T) {
235265 require .True (t , env .IsWorkflowCompleted ())
236266 require .NoError (t , env .GetWorkflowError ())
237267}
268+
269+ type testNoopClientOutbound struct {
270+ interceptor.ClientOutboundInterceptorBase
271+ }
272+
273+ func (n * testNoopClientOutbound ) ExecuteActivity (_ context.Context , _ * interceptor.ClientExecuteActivityInput ) (client.ActivityHandle , error ) {
274+ return nil , nil
275+ }
0 commit comments