11import * as assert from 'node:assert' ;
2+ import {
3+ invocationPromises ,
4+ spans ,
5+ testTailHandler ,
6+ } from 'test:instumentation-tail' ;
27
3- let invocationPromises = [ ] ;
4- let spans = new Map ( ) ;
8+ // Use shared instrumentation test tail worker
9+ export default testTailHandler ;
510
6- export default {
11+ export const test = {
712 async test ( ctrl , env , ctx ) {
813 const expected = [
9- {
10- name : 'durable_object_storage_put' ,
11- closed : true ,
12- subrequests : [ { name : 'durable_object_subrequest' } ] ,
13- } ,
14+ { name : 'durable_object_storage_put' , closed : true } ,
1415 { name : 'durable_object_storage_put' , closed : true } ,
1516 { name : 'durable_object_storage_get' , closed : true } ,
1617 { name : 'durable_object_storage_get' , closed : true } ,
@@ -22,6 +23,7 @@ export default {
2223 { name : 'durable_object_storage_deleteAlarm' , closed : true } ,
2324 { name : 'durable_object_storage_transaction' , closed : true } ,
2425 { name : 'durable_object_storage_sync' , closed : true } ,
26+ { name : 'durable_object_subrequest' , closed : true } ,
2527 ] ;
2628
2729 await Promise . allSettled ( invocationPromises ) ;
@@ -31,49 +33,4 @@ export default {
3133 assert . deepStrictEqual ( received , expected ) ;
3234 return new Response ( '' ) ;
3335 } ,
34-
35- tailStream ( event , env , ctx ) {
36- let resolveFn ;
37-
38- invocationPromises . push (
39- new Promise ( ( resolve , reject ) => {
40- resolveFn = resolve ;
41- } )
42- ) ;
43-
44- return ( event ) => {
45- switch ( event . event . type ) {
46- case 'spanOpen' :
47- if ( event . event . name === 'durable_object_subrequest' ) {
48- let span = spans . get ( event . event . spanId ) ;
49- span [ 'subrequests' ] = span [ 'subrequests' ]
50- ? ( span [ 'subrequests' ] . push ( { name : { ...event . name } } ) ,
51- span [ 'subrequests' ] )
52- : [ { name : event . event . name } ] ;
53- } else {
54- // The span ids will change between tests, but Map preserves insertion order
55- spans . set ( event . event . spanId , { name : event . event . name } ) ;
56- }
57- break ;
58- case 'attributes' : {
59- let span = spans . get ( event . event . spanId ) ;
60- for ( let { name, value } of event . event . info ) {
61- span [ name ] = value ;
62- }
63- spans . set ( event . event . spanId , span ) ;
64- break ;
65- }
66- case 'spanClose' : {
67- const spanId = event . spanContext . spanId ;
68- let span = spans . get ( spanId ) ;
69- span [ 'closed' ] = true ;
70- spans . set ( spanId , span ) ;
71- break ;
72- }
73- case 'outcome' :
74- resolveFn ( ) ;
75- break ;
76- }
77- } ;
78- } ,
7936} ;
0 commit comments