@@ -8,6 +8,8 @@ import { startCollector, startWorker } from './utils/worker';
88let devWorker : UnstableDevWorker ;
99let collectorWorker : UnstableDevWorker ;
1010
11+ const SCRIPT_PATH = 'test/scripts/zipkin' ;
12+
1113describe ( 'Test Zipkin Exporter' , ( ) => {
1214 beforeAll ( async ( ) => {
1315 collectorWorker = await startCollector ( { port : 9411 } ) ;
@@ -27,7 +29,7 @@ describe('Test Zipkin Exporter', () => {
2729 }
2830 } ) ;
2931
30- test ( 'Basic trace should transform correctly' , async ( ) => {
32+ test . skip ( 'Basic trace should transform correctly' , async ( ) => {
3133 devWorker = await startWorker ( 'test/scripts/zipkin/basic.ts' ) ;
3234
3335 const res = await devWorker . fetch ( 'http://worker/test' ) ;
@@ -48,7 +50,7 @@ describe('Test Zipkin Exporter', () => {
4850 expect ( span . localEndpoint . serviceName ) . toBe ( 'zipkin-basic' ) ;
4951 } ) ;
5052
51- describe ( 'Root span' , ( ) => {
53+ describe . skip ( 'Root span' , ( ) => {
5254 test ( 'Default attributes are put on root span' , async ( ) => {
5355 devWorker = await startWorker ( 'test/scripts/zipkin/basic.ts' ) ;
5456
@@ -109,7 +111,7 @@ describe('Test Zipkin Exporter', () => {
109111 } ) ;
110112 } ) ;
111113
112- describe ( 'Single span' , ( ) => {
114+ describe . skip ( 'Single span' , ( ) => {
113115 test ( 'You can add a single span' , async ( ) => {
114116 devWorker = await startWorker ( 'test/scripts/zipkin/single-span.ts' ) ;
115117
@@ -255,7 +257,7 @@ describe('Test Zipkin Exporter', () => {
255257 } ) ;
256258 } ) ;
257259
258- describe ( 'Multiple spans' , ( ) => {
260+ describe . skip ( 'Multiple spans' , ( ) => {
259261 test ( 'You can add multiple spans' , async ( ) => {
260262 devWorker = await startWorker ( 'test/scripts/zipkin/multiple-spans.ts' , {
261263 kv : [ { binding : 'KV' , id : '' } ] ,
@@ -449,7 +451,7 @@ describe('Test Zipkin Exporter', () => {
449451 } ) ;
450452 } ) ;
451453
452- describe ( 'Child of child span' , ( ) => {
454+ describe . skip ( 'Child of child span' , ( ) => {
453455 test ( 'You can add a child to a child span' , async ( ) => {
454456 devWorker = await startWorker ( 'test/scripts/zipkin/span-span.ts' , {
455457 kv : [ { binding : 'KV' , id : '' } ] ,
@@ -646,4 +648,118 @@ describe('Test Zipkin Exporter', () => {
646648 expect ( secondChildSpan . annotations ?. [ 0 ] . timestamp ) . not . toBe ( 0 ) ;
647649 } ) ;
648650 } ) ;
651+
652+ describe ( 'Propagation' , ( ) => {
653+ test ( 'Can pass context in fetch' , async ( ) => {
654+ devWorker = await startWorker ( `${ SCRIPT_PATH } /propagation/test-id.ts` ) ;
655+
656+ const worker = await startWorker ( `${ SCRIPT_PATH } /propagation/basic-fetch.ts` ) ;
657+
658+ const res = await worker . fetch ( `http://worker/?address=${ devWorker . address } &port=${ devWorker . port } ` ) ;
659+
660+ expect ( res . status ) . toBe ( 200 ) ;
661+
662+ const traceId = res . headers . get ( 'trace-id' ) ;
663+ if ( traceId === null ) {
664+ expect ( traceId ) . not . toBeNull ( ) ;
665+ return ;
666+ }
667+ const spanId = res . headers . get ( 'span-id' ) ;
668+ if ( spanId === null ) {
669+ expect ( spanId ) . not . toBeNull ( ) ;
670+ return ;
671+ }
672+ const fetchedTraceId = res . headers . get ( 'fetched-trace-id' ) ;
673+ if ( fetchedTraceId === null ) {
674+ expect ( fetchedTraceId ) . not . toBeNull ( ) ;
675+ return ;
676+ }
677+ const fetchedParentId = res . headers . get ( 'fetched-parent-id' ) ;
678+ if ( fetchedParentId === null ) {
679+ expect ( fetchedParentId ) . not . toBeNull ( ) ;
680+ return ;
681+ }
682+
683+ const trace = await getTrace < ZipkinJson > ( collectorWorker , traceId ) ;
684+
685+ // Validate the context was passed down
686+ expect ( fetchedTraceId ) . toBe ( traceId ) ;
687+ expect ( fetchedParentId ) . toBe ( spanId ) ;
688+
689+ // Root + 1 child
690+ expect ( trace . length ) . toBe ( 2 ) ;
691+
692+ // Root span
693+ const rootSpan = trace [ 0 ] ;
694+ expect ( rootSpan . traceId ) . toBe ( traceId ) ;
695+ expect ( rootSpan . name ) . toBe ( 'Request' ) ;
696+ expect ( rootSpan . localEndpoint . serviceName ) . toBe ( 'basic-fetch' ) ;
697+
698+ // First child span
699+ const firstChildSpan = trace [ 1 ] ;
700+ expect ( firstChildSpan . traceId ) . toBe ( traceId ) ;
701+ expect ( firstChildSpan . parentId ) . toBe ( rootSpan . id ) ;
702+ expect ( firstChildSpan . name ) . toBe ( SPAN_NAME . FETCH ) ;
703+ expect ( firstChildSpan . duration ) . not . toBe ( 0 ) ;
704+
705+ await worker . stop ( ) ;
706+ } ) ;
707+
708+ test ( 'Context is passed in tracedFetch' , async ( ) => {
709+ devWorker = await startWorker ( `${ SCRIPT_PATH } /propagation/test-id.ts` ) ;
710+
711+ const worker = await startWorker ( `${ SCRIPT_PATH } /propagation/traced-fetch.ts` ) ;
712+
713+ const res = await worker . fetch ( `http://worker/?address=${ devWorker . address } &port=${ devWorker . port } ` ) ;
714+
715+ expect ( res . status ) . toBe ( 200 ) ;
716+
717+ const traceId = res . headers . get ( 'trace-id' ) ;
718+ if ( traceId === null ) {
719+ expect ( traceId ) . not . toBeNull ( ) ;
720+ return ;
721+ }
722+ const spanId = res . headers . get ( 'span-id' ) ;
723+ if ( spanId === null ) {
724+ expect ( spanId ) . not . toBeNull ( ) ;
725+ return ;
726+ }
727+ const fetchedTraceId = res . headers . get ( 'fetched-trace-id' ) ;
728+ if ( fetchedTraceId === null ) {
729+ expect ( fetchedTraceId ) . not . toBeNull ( ) ;
730+ return ;
731+ }
732+ const fetchedParentId = res . headers . get ( 'fetched-parent-id' ) ;
733+ if ( fetchedParentId === null ) {
734+ expect ( fetchedParentId ) . not . toBeNull ( ) ;
735+ return ;
736+ }
737+
738+ const trace = await getTrace < ZipkinJson > ( collectorWorker , traceId ) ;
739+
740+ // Validate the context was passed down
741+ expect ( fetchedTraceId ) . toBe ( traceId ) ;
742+ expect ( fetchedParentId ) . toBe ( spanId ) ;
743+
744+ // Root + 1 child
745+ expect ( trace . length ) . toBe ( 2 ) ;
746+
747+ // Root span
748+ const rootSpan = trace [ 0 ] ;
749+ expect ( rootSpan . traceId ) . toBe ( traceId ) ;
750+ expect ( rootSpan . name ) . toBe ( 'Request' ) ;
751+ expect ( rootSpan . localEndpoint . serviceName ) . toBe ( 'traced-fetch' ) ;
752+
753+ // First child span
754+ const firstChildSpan = trace [ 1 ] ;
755+ expect ( firstChildSpan . traceId ) . toBe ( traceId ) ;
756+ expect ( firstChildSpan . parentId ) . toBe ( rootSpan . id ) ;
757+ expect ( firstChildSpan . name ) . toBe ( SPAN_NAME . FETCH ) ;
758+ expect ( firstChildSpan . duration ) . not . toBe ( 0 ) ;
759+
760+ await worker . stop ( ) ;
761+ } ) ;
762+
763+ test . todo ( 'Can pass context in service binding' ) ;
764+ } ) ;
649765} ) ;
0 commit comments