@@ -20,6 +20,10 @@ import {
2020 Span ,
2121 SpanEventListener ,
2222 SpanKind ,
23+ HeaderGetter ,
24+ HeaderSetter ,
25+ Propagation ,
26+ SpanContext ,
2327} from '@opencensus/core' ;
2428import * as assert from 'assert' ;
2529import * as fs from 'fs' ;
@@ -57,6 +61,27 @@ function customAttributeFunction(
5761
5862type RequestFunction = typeof https . request | typeof https . get ;
5963
64+ class DummyPropagation implements Propagation {
65+ extract ( getter : HeaderGetter ) : SpanContext {
66+ return {
67+ traceId : 'dummy-trace-id' ,
68+ spanId : 'dummy-span-id' ,
69+ } as SpanContext ;
70+ }
71+
72+ inject ( setter : HeaderSetter , spanContext : SpanContext ) : void {
73+ setter . setHeader ( 'x-dummy-trace-id' , spanContext . traceId || 'undefined' ) ;
74+ setter . setHeader ( 'x-dummy-span-id' , spanContext . spanId || 'undefined' ) ;
75+ }
76+
77+ generate ( ) : SpanContext {
78+ return {
79+ traceId : 'dummy-trace-id' ,
80+ spanId : 'dummy-span-id' ,
81+ } as SpanContext ;
82+ }
83+ }
84+
6085const httpRequest = {
6186 request : ( options : { } | string ) => {
6287 return httpRequest . make ( options , https . request ) ;
@@ -150,7 +175,11 @@ describe('HttpsPlugin', () => {
150175 const log = logger . logger ( ) ;
151176 const tracer = new CoreTracer ( ) ;
152177 const spanVerifier = new SpanVerifier ( ) ;
153- tracer . start ( { samplingRate : 1 , logger : log } ) ;
178+ tracer . start ( {
179+ samplingRate : 1 ,
180+ logger : log ,
181+ propagation : new DummyPropagation ( ) ,
182+ } ) ;
154183
155184 it ( 'should return a plugin' , ( ) => {
156185 assert . ok ( plugin instanceof HttpsPlugin ) ;
@@ -369,6 +398,19 @@ describe('HttpsPlugin', () => {
369398 }
370399 } ) ;
371400 } ) ;
401+
402+ it ( 'should create a rootSpan for GET requests and add propagation headers' , async ( ) => {
403+ nock . enableNetConnect ( ) ;
404+ assert . strictEqual ( spanVerifier . endedSpans . length , 0 ) ;
405+ await httpRequest . get ( `https://google.fr/` ) . then ( result => {
406+ assert . strictEqual ( spanVerifier . endedSpans . length , 1 ) ;
407+ assert . ok ( spanVerifier . endedSpans [ 0 ] . name . indexOf ( 'GET /' ) >= 0 ) ;
408+
409+ const span = spanVerifier . endedSpans [ 0 ] ;
410+ assertSpanAttributes ( span , 301 , 'GET' , 'google.fr' , '/' ) ;
411+ } ) ;
412+ nock . disableNetConnect ( ) ;
413+ } ) ;
372414 } ) ;
373415
374416 /** Should intercept incoming requests */
0 commit comments