@@ -8,11 +8,13 @@ import { SpanStatusCode } from '@opentelemetry/api';
8
8
import { ExportResultCode } from '@opentelemetry/core' ;
9
9
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc' ;
10
10
import * as opentelemetry from '@opentelemetry/sdk-node' ;
11
+ import { BasicTracerProvider , InMemorySpanExporter , SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base' ;
11
12
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions' ;
12
13
import test from 'ava' ;
13
14
import { v4 as uuid4 } from 'uuid' ;
14
15
import { Connection , WorkflowClient } from '@temporalio/client' ;
15
16
import { OpenTelemetryWorkflowClientInterceptor } from '@temporalio/interceptors-opentelemetry/lib/client' ;
17
+ import { instrument } from '@temporalio/interceptors-opentelemetry/lib/instrumentation' ;
16
18
import {
17
19
makeWorkflowExporter ,
18
20
OpenTelemetryActivityInboundInterceptor ,
@@ -413,4 +415,37 @@ if (RUN_INTEGRATION_TESTS) {
413
415
// Importing the otel workflow modules above should patch globalThis
414
416
t . falsy ( ( globalThis as any ) . window ) ;
415
417
} ) ;
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
+ } ) ;
416
451
}
0 commit comments