test('#inject(span, http, {})', setup(function (t) { const tracer = new Tracer(getAgent()) const span = tracer.startSpan('foo') const carrier = {} tracer.inject(span, opentracing.FORMAT_HTTP_HEADERS, carrier) t.equal(carrier['elastic-apm-traceparent'], span.context().toString()) t.end() }))
_extract (format, carrier) { if (typeof carrier !== 'object') return null let ctx switch (format) { case opentracing.FORMAT_TEXT_MAP: case opentracing.FORMAT_HTTP_HEADERS: ctx = carrier['elastic-apm-traceparent'] break } return ctx ? new SpanContext(ctx) : null }
test('#inject(noop, http, {})', setup(function (t) { const agent = getAgent() agent._conf.transactionSampleRate = 0 const tracer = new Tracer(agent) const span1 = tracer.startSpan('foo') t.equal(span1._isTransaction, true) t.equal(span1._span.sampled, false) const span2 = tracer.startSpan('foo') t.ok(span2 instanceof UnsampledSpan) const carrier = {} tracer.inject(span2, opentracing.FORMAT_HTTP_HEADERS, carrier) t.equal(carrier['elastic-apm-traceparent'], span1.context().toString()) agent._conf.transactionSampleRate = 1 t.end() }))
// TODO: Currently the header string isn't validated. This might not be an issue though test.skip('#extract(http, {elastic-apm-traceparent: invalid})', setup(function (t) { const tracer = new Tracer(getAgent()) const context = tracer.extract(opentracing.FORMAT_HTTP_HEADERS, { 'elastic-apm-traceparent': 'invalid' }) t.equal(context, null) t.end() }))
const spanContext = tracer.extract(opentracing.FORMAT_HTTP_HEADERS, carrier); expect(spanContext.samplingPriority).to.equal(0.5); span = tracer.startSpan('oauth', { const spanContext = tracer.extract(opentracing.FORMAT_HTTP_HEADERS, carrier); expect(spanContext.samplingPriority).to.equal(0); }); const spanContext = tracer.extract(opentracing.FORMAT_HTTP_HEADERS, carrier); expect(spanContext.t).to.equal(null); expect(spanContext.s).to.equal(null);
tracer.inject(span, opentracing.FORMAT_HTTP_HEADERS, carrier); expect(carrier).to.deep.equal({ 'x-instana-t': span.span.t,
_inject (spanContext, format, carrier) { switch (format) { case opentracing.FORMAT_TEXT_MAP: case opentracing.FORMAT_HTTP_HEADERS: carrier['elastic-apm-traceparent'] = spanContext.toString() break } }
test('#inject(span, http, undefined)', setup(function (t) { const tracer = new Tracer(getAgent()) const span = tracer.startSpan('foo') // TODO: Is this expected? t.throws(function () { tracer.inject(span, opentracing.FORMAT_HTTP_HEADERS) }) t.end() }))
test('#inject(context, http, {})', setup(function (t) { const tracer = new Tracer(getAgent()) const span = tracer.startSpan('foo') const carrier = {} tracer.inject(span.context(), opentracing.FORMAT_HTTP_HEADERS, carrier) t.equal(carrier['elastic-apm-traceparent'], span.context().toString()) t.end() }))
test('#extract(http, {elastic-apm-traceparent: valid})', setup(function (t) { const tracer = new Tracer(getAgent()) const context = tracer.extract(opentracing.FORMAT_HTTP_HEADERS, { 'elastic-apm-traceparent': '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' }) t.ok(context instanceof SpanContext) t.equal(context.toString(), '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01') t.end() }))
test('#extract(http, undefined)', setup(function (t) { const tracer = new Tracer(getAgent()) const context = tracer.extract(opentracing.FORMAT_HTTP_HEADERS) t.equal(context, null) t.end() }))
test('#extract(http, {})', setup(function (t) { const tracer = new Tracer(getAgent()) const context = tracer.extract(opentracing.FORMAT_HTTP_HEADERS, {}) t.equal(context, null) t.end() }))
test('#extract(http, {elastic-apm-traceparent: null})', setup(function (t) { const tracer = new Tracer(getAgent()) const context = tracer.extract(opentracing.FORMAT_HTTP_HEADERS, { 'elastic-apm-traceparent': null }) t.equal(context, null) t.end() }))