@@ -8,11 +8,13 @@ import { SpanStatusCode } from '@opentelemetry/api';
88import { ExportResultCode } from '@opentelemetry/core' ;
99import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc' ;
1010import * as opentelemetry from '@opentelemetry/sdk-node' ;
11+ import { BasicTracerProvider , InMemorySpanExporter , SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base' ;
1112import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions' ;
1213import test from 'ava' ;
1314import { v4 as uuid4 } from 'uuid' ;
1415import { Connection , WorkflowClient } from '@temporalio/client' ;
1516import { OpenTelemetryWorkflowClientInterceptor } from '@temporalio/interceptors-opentelemetry/lib/client' ;
17+ import { instrument } from '@temporalio/interceptors-opentelemetry/lib/instrumentation' ;
1618import {
1719 makeWorkflowExporter ,
1820 OpenTelemetryActivityInboundInterceptor ,
@@ -413,4 +415,37 @@ if (RUN_INTEGRATION_TESTS) {
413415 // Importing the otel workflow modules above should patch globalThis
414416 t . falsy ( ( globalThis as any ) . window ) ;
415417 } ) ;
418+
419+ test ( 'instrumentation: Error status includes message and records exception' , async ( t ) => {
420+ const memoryExporter = new InMemorySpanExporter ( ) ;
421+ const provider = new BasicTracerProvider ( ) ;
422+ provider . addSpanProcessor ( new SimpleSpanProcessor ( memoryExporter ) ) ;
423+ provider . register ( ) ;
424+ const tracer = provider . getTracer ( 'test-error-tracer' ) ;
425+
426+ const errorMessage = 'Test error message' ;
427+
428+ await t . throwsAsync (
429+ instrument ( {
430+ tracer,
431+ spanName : 'test-error-span' ,
432+ fn : async ( ) => {
433+ throw new Error ( errorMessage ) ;
434+ } ,
435+ } ) ,
436+ { message : errorMessage }
437+ ) ;
438+
439+ const spans = memoryExporter . getFinishedSpans ( ) ;
440+ t . is ( spans . length , 1 ) ;
441+
442+ const span = spans [ 0 ] ;
443+
444+ t . is ( span . status . code , SpanStatusCode . ERROR ) ;
445+
446+ t . is ( span . status . message , errorMessage ) ;
447+
448+ const exceptionEvents = span . events . filter ( ( event ) => event . name === 'exception' ) ;
449+ t . is ( exceptionEvents . length , 1 ) ;
450+ } ) ;
416451}
0 commit comments