1616
1717import Tracer from '../../src/tracer' ;
1818import * as opentracing from 'opentracing' ;
19- import SpanContext from '../../src/span_context' ;
2019import * as kafka from 'kafka-node' ;
2120import { expect } from 'chai' ;
2221import { Logger } from '../../src/logger'
22+ const messages = require ( '../../src/proto_idl_codegen/span_pb' ) ;
2323
2424class ConsoleLogger implements Logger {
2525 log ( msg ) { console . log ( msg ) ; }
@@ -29,28 +29,24 @@ class ConsoleLogger implements Logger {
2929 error ( msg : string ) : void { this . log ( msg ) ; }
3030}
3131
32- describe ( 'Haystack Integration Tests' , ( ) => {
33- describe ( 'Tracer Test' , ( ) => {
34- return it ( "should generate spans and push to haystack-agent" , function ( done ) {
35- this . timeout ( 6000 ) ;
36- const TraceId = '1848fadd-fa16-4b3e-8ad1-6d73339bbee7'
37- const tracer = Tracer . initTracer ( {
38- serviceName : 'my-service' ,
39- commonTags : {
40- 'my-service-version' : '0.1.0'
41- } ,
42- dispatcher : {
43- type : 'haystack_agent' ,
44- agentHost : 'haystack_agent'
45- } ,
46- logger : new ConsoleLogger ( ) ,
47- } ) ;
32+ const TraceId = '1848fadd-fa16-4b3e-8ad1-6d73339bbee7' ;
33+ const SpanId = '7a7cc5bf-796e-4527-9b42-13ae5766c6fd' ;
34+ const ParentSpanId = 'e96de653-ad6e-4ad5-b437-e81fd9d2d61d' ;
35+
36+ const options = {
37+ groupId : 'integration-test' ,
38+ kafkaHost : 'kafkasvc:9092' ,
39+ fromOffset : 'earliest' as ( "earliest" | "latest" | "none" ) ,
40+ encoding : 'buffer' ,
41+ keyEncoding : 'utf8'
42+ } ;
4843
44+ const consumer = new kafka . ConsumerGroup ( options , 'proto-spans' ) ;
45+
46+ const executeTest = ( consumer : kafka . ConsumerGroup , tracer : opentracing . Tracer , done ) => {
47+ const carrier = { 'Trace-ID' : TraceId , 'Span-ID' : SpanId , 'Parent-ID' : ParentSpanId , 'Baggage-myKey' : 'myVal' } ;
4948 const serverSpan = tracer . startSpan ( 'my-operation' , {
50- childOf : new SpanContext (
51- TraceId ,
52- '7a7cc5bf-796e-4527-9b42-13ae5766c6fd' ,
53- 'e96de653-ad6e-4ad5-b437-e81fd9d2d61d' )
49+ childOf : tracer . extract ( opentracing . FORMAT_TEXT_MAP , carrier )
5450 } )
5551 . setTag ( opentracing . Tags . SPAN_KIND , 'server' )
5652 . setTag ( opentracing . Tags . HTTP_METHOD , 'GET' ) ;
@@ -70,30 +66,75 @@ describe('Haystack Integration Tests', () => {
7066
7167 var serverSpanReceived = 0 ;
7268 var clientSpanReceived = 0 ;
73-
74- const options = {
75- groupId : 'integration-test' ,
76- kafkaHost : 'kafkasvc:9092' ,
77- fromOffset : 'earliest' as ( "earliest" | "latest" | "none" )
78- } ;
79- const consumer = new kafka . ConsumerGroup ( options , 'proto-spans' ) ;
69+
8070 consumer . on ( 'message' , ( kafkaMessage ) => {
8171 expect ( kafkaMessage . key ) . eq ( TraceId ) ;
8272
8373 const spanBuffer = kafkaMessage . value as Buffer ;
84- //TODO: figure out why Buffer is failing to deserialize into a proto object
85- if ( spanBuffer . includes ( '7a7cc5bf-796e-4527-9b42-13ae5766c6fd' ) ) {
74+ const protoSpan = messages . Span . deserializeBinary ( spanBuffer ) ;
75+
76+ var isServerSpan = false ;
77+ protoSpan . getTagsList ( ) . forEach ( ( tag ) => {
78+ if ( tag . getKey ( ) === 'span.kind' && tag . getVstr ( ) === 'server' ) {
79+ isServerSpan = true ;
80+ }
81+ } ) ;
82+ if ( isServerSpan ) {
8683 serverSpanReceived = serverSpanReceived + 1 ;
84+ expect ( protoSpan . getTraceid ( ) ) . eq ( TraceId ) ;
85+ expect ( protoSpan . getSpanid ( ) ) . eq ( SpanId ) ;
86+ expect ( protoSpan . getParentspanid ( ) ) . eq ( ParentSpanId ) ;
8787 } else {
8888 clientSpanReceived = clientSpanReceived + 1 ;
89- }
89+ expect ( protoSpan . getTraceid ( ) ) . eq ( TraceId ) ;
90+ expect ( protoSpan . getSpanid ( ) === SpanId ) . eq ( false ) ;
91+ expect ( protoSpan . getParentspanid ( ) ) . eq ( SpanId ) ;
92+ }
9093 } ) ;
9194
9295 setTimeout ( ( ) => {
9396 expect ( serverSpanReceived ) . eq ( 1 ) ;
9497 expect ( clientSpanReceived ) . eq ( 1 ) ;
9598 done ( ) ;
9699 } , 5000 ) ;
100+ }
101+
102+ describe ( 'Haystack Integration Tests' , ( ) => {
103+ describe ( 'Tracer Test with haystack agent' , ( ) => {
104+ return it ( "should generate spans and push to haystack-agent" , function ( done ) {
105+ this . timeout ( 6000 ) ;
106+
107+ const tracer = Tracer . initTracer ( {
108+ serviceName : 'my-service' ,
109+ commonTags : {
110+ 'my-service-version' : '0.1.0'
111+ } ,
112+ dispatcher : {
113+ type : 'haystack_agent' ,
114+ agentHost : 'haystack_agent'
115+ } ,
116+ logger : new ConsoleLogger ( ) ,
117+ } ) ;
118+ executeTest ( consumer , tracer , done ) ;
119+
120+ } ) ;
121+ } ) ;
122+
123+ describe ( 'Tracer Test with haystack collector' , ( ) => {
124+ return it ( "should generate spans and push to haystack-collector" , function ( done ) {
125+ this . timeout ( 6000 ) ;
126+ const tracer = Tracer . initTracer ( {
127+ serviceName : 'my-service' ,
128+ commonTags : {
129+ 'my-service-version' : '0.1.0'
130+ } ,
131+ dispatcher : {
132+ type : 'http_collector' ,
133+ collectorUrl : 'http://haystack_collector:8080/span'
134+ } ,
135+ logger : new ConsoleLogger ( ) ,
97136 } ) ;
137+ executeTest ( consumer , tracer , done ) ;
138+ } ) ;
98139 } ) ;
99140} ) ;
0 commit comments