1+ import { describe , expect , test } from "vitest" ;
2+ import { wrap } from '../src/index' ;
3+ import { NodeTracerProvider , ReadableSpan } from "@opentelemetry/sdk-trace-node" ;
4+ import { Resource } from "@opentelemetry/resources" ;
5+
6+ let spans : ReadableSpan [ ] = [ ] ;
7+
8+ function setupOtelTestHarness ( ) {
9+ const provider = new NodeTracerProvider ( {
10+ resource : new Resource ( {
11+ "testing" : true ,
12+ } ) ,
13+ } ) ;
14+
15+ provider . register ( ) ;
16+
17+ provider . addSpanProcessor ( {
18+ forceFlush : async ( ) => console . log ( 'im called' ) ,
19+ onStart : ( span , context ) => { } ,
20+ onEnd : ( span ) => { spans . push ( span ) ; } ,
21+ shutdown : async ( ) => console . log ( 'im called' ) ,
22+ } )
23+
24+ return {
25+ getSpan ( ) {
26+ return spans . pop ( ) ;
27+ }
28+ }
29+ }
30+
31+
32+ async function asyncHandler ( event , context ) {
33+ return "async lambda go brrr"
34+ } ;
35+
36+ function callbackHandler ( event , context , callback ) {
37+ callback ( null , "callback lambda go brrr" ) ;
38+ }
39+
40+ const context = {
41+ functionName : "test" ,
42+ awsRequestId : "1234" ,
43+ invokedFunctionArn : "arn:aws:lambda:us-east-1:123456789012:function:test" ,
44+ callbackWaitsForEmptyEventLoop : false ,
45+ memoryLimitInMB : "128" ,
46+ logGroupName : "test" ,
47+ logStreamName : "test" ,
48+ getRemainingTimeInMillis : ( ) => 1000 ,
49+ functionVersion : "1" ,
50+ invokedFunctionUniqueIdentifier : "1" ,
51+ done : ( ) => { } ,
52+ fail : ( ) => { } ,
53+ succeed : ( ) => { }
54+
55+ }
56+ describe ( "wrap" , ( ) => {
57+ const { getSpan } = setupOtelTestHarness ( )
58+ test ( "should wrap a callback lambda handler and not error" , async ( ) => {
59+ const wrapped = wrap ( callbackHandler ) ;
60+ await wrapped ( { } , context , ( err , result ) => {
61+ expect ( result ) . toBe ( "callback lambda go brrr" ) ;
62+
63+ } ) ;
64+
65+ const span = getSpan ( ) ;
66+ expect ( span ) . toBeDefined ( ) ;
67+ expect ( span ?. name ) . toBe ( "test" ) ;
68+ expect ( span ?. attributes . result ) . toBe ( "callback lambda go brrr" ) ;
69+
70+
71+ } ) ;
72+ test ( "should wrap a async lambda handler and not error" , async ( ) => {
73+ const wrapped = wrap ( asyncHandler ) ;
74+ const result = await wrapped ( { } , context ) ;
75+ const span = getSpan ( ) ;
76+ expect ( span ) . toBeDefined ( ) ;
77+ expect ( span ?. name ) . toBe ( "test" ) ;
78+ expect ( span ?. attributes . result ) . toBe ( "async lambda go brrr" ) ;
79+
80+ expect ( result ) . toBe ( "async lambda go brrr" ) ;
81+ } ) ;
82+
83+
84+ } ) ;
0 commit comments