@@ -482,6 +482,183 @@ describe('Zipkin Exporter - node', () => {
482482 } ) ;
483483 } ) ;
484484 } ) ;
485+
486+ it ( 'should set serviceName per-span if resource has one' , ( ) => {
487+ const resource_service_name = 'resource_service_name' ;
488+ const resource_service_name_prime = 'resource_service_name_prime' ;
489+
490+ let requestBody : zipkinTypes . Span [ ] ;
491+ const scope = nock ( 'http://localhost:9411' )
492+ . post ( '/api/v2/spans' , body => {
493+ requestBody = body ;
494+ return true ;
495+ } )
496+ . replyWithError ( new Error ( 'My Socket Error' ) ) ;
497+
498+ const parentSpanId = '5c1c63257de34c67' ;
499+ const startTime = 1566156729709 ;
500+ const duration = 2000 ;
501+
502+ const span1 : ReadableSpan = {
503+ name : 'my-span' ,
504+ kind : api . SpanKind . INTERNAL ,
505+ parentSpanId,
506+ spanContext : {
507+ traceId : 'd4cda95b652f4a1592b449d5929fda1b' ,
508+ spanId : '6e0c63257de34c92' ,
509+ traceFlags : TraceFlags . NONE ,
510+ } ,
511+ startTime : [ startTime , 0 ] ,
512+ endTime : [ startTime + duration , 0 ] ,
513+ ended : true ,
514+ duration : [ duration , 0 ] ,
515+ status : {
516+ code : api . StatusCode . OK ,
517+ } ,
518+ attributes : {
519+ key1 : 'value1' ,
520+ key2 : 'value2' ,
521+ } ,
522+ links : [ ] ,
523+ events : [
524+ {
525+ name : 'my-event' ,
526+ time : [ startTime + 10 , 0 ] ,
527+ attributes : { key3 : 'value3' } ,
528+ } ,
529+ ] ,
530+ resource : new Resource ( {
531+ [ SERVICE_RESOURCE . NAME ] : resource_service_name ,
532+ } ) ,
533+ instrumentationLibrary : { name : 'default' , version : '0.0.1' } ,
534+ } ;
535+ const span2 : ReadableSpan = {
536+ name : 'my-span' ,
537+ kind : api . SpanKind . SERVER ,
538+ spanContext : {
539+ traceId : 'd4cda95b652f4a1592b449d5929fda1b' ,
540+ spanId : '6e0c63257de34c92' ,
541+ traceFlags : TraceFlags . NONE ,
542+ } ,
543+ startTime : [ startTime , 0 ] ,
544+ endTime : [ startTime + duration , 0 ] ,
545+ ended : true ,
546+ duration : [ duration , 0 ] ,
547+ status : {
548+ code : api . StatusCode . OK ,
549+ } ,
550+ attributes : { } ,
551+ links : [ ] ,
552+ events : [ ] ,
553+ resource : new Resource ( {
554+ [ SERVICE_RESOURCE . NAME ] : resource_service_name_prime ,
555+ } ) ,
556+ instrumentationLibrary : { name : 'default' , version : '0.0.1' } ,
557+ } ;
558+
559+ const exporter = new ZipkinExporter ( { } ) ;
560+
561+ exporter . export ( [ span1 , span2 ] , ( result : ExportResult ) => {
562+ requestBody ;
563+ scope . done ( ) ;
564+ assert . equal (
565+ requestBody [ 0 ] . localEndpoint . serviceName ,
566+ resource_service_name
567+ ) ;
568+ assert . equal (
569+ requestBody [ 1 ] . localEndpoint . serviceName ,
570+ resource_service_name_prime
571+ ) ;
572+ } ) ;
573+ } ) ;
574+
575+ it ( 'should set serviceName per-span if span has attribute' , ( ) => {
576+ const span_service_name = 'span_service_name' ;
577+ const span_service_name_prime = 'span_service_name_prime' ;
578+
579+ let requestBody : any ;
580+ const scope = nock ( 'http://localhost:9411' )
581+ . post ( '/api/v2/spans' , body => {
582+ requestBody = body ;
583+ return true ;
584+ } )
585+ . replyWithError ( new Error ( 'My Socket Error' ) ) ;
586+
587+ const parentSpanId = '5c1c63257de34c67' ;
588+ const startTime = 1566156729709 ;
589+ const duration = 2000 ;
590+
591+ const span1 : ReadableSpan = {
592+ name : 'my-span' ,
593+ kind : api . SpanKind . INTERNAL ,
594+ parentSpanId,
595+ spanContext : {
596+ traceId : 'd4cda95b652f4a1592b449d5929fda1b' ,
597+ spanId : '6e0c63257de34c92' ,
598+ traceFlags : TraceFlags . NONE ,
599+ } ,
600+ startTime : [ startTime , 0 ] ,
601+ endTime : [ startTime + duration , 0 ] ,
602+ ended : true ,
603+ duration : [ duration , 0 ] ,
604+ status : {
605+ code : api . StatusCode . OK ,
606+ } ,
607+ attributes : {
608+ key1 : 'value1' ,
609+ key2 : 'value2' ,
610+ [ SERVICE_RESOURCE . NAME ] : span_service_name ,
611+ } ,
612+ links : [ ] ,
613+ events : [
614+ {
615+ name : 'my-event' ,
616+ time : [ startTime + 10 , 0 ] ,
617+ attributes : { key3 : 'value3' } ,
618+ } ,
619+ ] ,
620+ resource : Resource . empty ( ) ,
621+ instrumentationLibrary : { name : 'default' , version : '0.0.1' } ,
622+ } ;
623+ const span2 : ReadableSpan = {
624+ name : 'my-span' ,
625+ kind : api . SpanKind . SERVER ,
626+ spanContext : {
627+ traceId : 'd4cda95b652f4a1592b449d5929fda1b' ,
628+ spanId : '6e0c63257de34c92' ,
629+ traceFlags : TraceFlags . NONE ,
630+ } ,
631+ startTime : [ startTime , 0 ] ,
632+ endTime : [ startTime + duration , 0 ] ,
633+ ended : true ,
634+ duration : [ duration , 0 ] ,
635+ status : {
636+ code : api . StatusCode . OK ,
637+ } ,
638+ attributes : {
639+ [ SERVICE_RESOURCE . NAME ] : span_service_name_prime ,
640+ } ,
641+ links : [ ] ,
642+ events : [ ] ,
643+ resource : Resource . empty ( ) ,
644+ instrumentationLibrary : { name : 'default' , version : '0.0.1' } ,
645+ } ;
646+
647+ const exporter = new ZipkinExporter ( { } ) ;
648+
649+ exporter . export ( [ span1 , span2 ] , ( result : ExportResult ) => {
650+ requestBody ;
651+ scope . done ( ) ;
652+ assert . equal (
653+ requestBody [ 0 ] . localEndpoint . serviceName ,
654+ span_service_name
655+ ) ;
656+ assert . equal (
657+ requestBody [ 1 ] . localEndpoint . serviceName ,
658+ span_service_name_prime
659+ ) ;
660+ } ) ;
661+ } ) ;
485662 } ) ;
486663
487664 describe ( 'shutdown' , ( ) => {
0 commit comments