UNPKG

lightstep-tracer

Version:

> ❗ **This instrumentation is no longer recommended**. Please review [documentation on setting up and configuring the OpenTelemetry Node.js Launcher](https://github.com/lightstep/otel-launcher-node) or [OpenTelemetry JS (Browser)](https://github.com/open-

227 lines (192 loc) 9.51 kB
describe("Tracer", function() { describe("Tracer#startSpan", function() { it('supports operation name only', function() { var span = Tracer.startSpan('test'); span.finish(); }); it('supports childOf with a Span object', function() { var parent = Tracer.startSpan('test1'); var span = Tracer.startSpan('test2', { childOf : parent }); span.finish(); parent.finish(); }); it('supports childOf with a SpanContext object', function() { var parent = Tracer.startSpan('test1'); var span = Tracer.startSpan('test2', { childOf : parent.context() }); span.finish(); parent.finish(); }); it('supports followsFrom with a Span object', function() { var parent = Tracer.startSpan('test1'); var span = Tracer.startSpan('test2', { followsFrom : parent }); span.finish(); parent.finish(); }); it('supports childOf with a SpanContext object', function() { var parent = Tracer.startSpan('test1'); var parentContext = parent.context(); parent.finish(); var span = Tracer.startSpan('test2', { followsFrom : parentContext }); span.finish(); }); it('propagates baggage items from parent to children', function() { var parent = Tracer.startSpan('test1'); parent.setBaggageItem('test1', 'value1'); var span = Tracer.startSpan('test2', { childOf : parent }); expect(span.getBaggageItem('test1')).to.equal('value1'); }); it('propagates sampled flag correctly', function() { var parent = Tracer.startSpan('test1'); var parentContext = parent.context(); parentContext._sampled = false; var span = Tracer.startSpan('test2', {childOf : parentContext }); var childContext = span.context() expect(childContext._sampled).to.equal(false); span.finish(); }); it('supports startTime', function() { var now = Date.now() - 5000; var span = Tracer.startSpan('test2', { startTime : now }); span.finish(); }); it("supports tags", function() { // Verify that we can add tags at startSpan time. var span = Tracer.startSpan("test", { tags: { tag_a: 1, tag_b: "b", tag_c: true, } }); span.finish(); }); it('should handle a large number of spans gracefully', function () { this.timeout(20000); Tracer.flush(); for (var i = 0; i < 10000; i++) { var span = Tracer.startSpan('microspan'); span.finish(); } Tracer.flush(); }); }); describe("Tracer#finish", function() { it('is a method', function() { var span = Tracer.startSpan('test'); expect(span.finish).to.be.a("function"); span.finish(); }); }); describe("Tracer#inject", function() { it('is a method', function() { expect(Tracer.inject).to.be.a("function"); }); it("should propagate text map carriers" , function() { var span = Tracer.startSpan('my_span'); var spanContext = span.context(); spanContext.setBaggageItem('footwear', 'sandals'); spanContext.setBaggageItem('creditcard', 'visa'); var carrier = {}; Tracer.inject(spanContext, opentracing.FORMAT_TEXT_MAP, carrier); expect(carrier['ot-tracer-traceid']).to.equal(spanContext._traceGUID); expect(carrier['ot-tracer-spanid']).to.equal(spanContext._guid); expect(carrier['ot-baggage-footwear']).to.equal('sandals'); expect(carrier['ot-baggage-creditcard']).to.equal('visa'); var extractedContext = Tracer.extract(opentracing.FORMAT_TEXT_MAP, carrier); expect(extractedContext._guid).to.equal(spanContext._guid); expect(extractedContext.getBaggageItem('footwear')).to.equal('sandals'); expect(extractedContext.getBaggageItem('creditcard')).to.equal('visa'); }); it("should propagate http header carriers", function() { var span = Tracer.startSpan('my_span'); var spanContext = span.context(); spanContext.setBaggageItem('footwear', 'sandals'); spanContext.setBaggageItem('creditcard', 'visa'); var carrier = {}; Tracer.inject(spanContext, opentracing.FORMAT_HTTP_HEADERS, carrier); expect(carrier['ot-tracer-traceid']).to.equal(spanContext._traceGUID); expect(carrier['ot-tracer-spanid']).to.equal(spanContext._guid); expect(carrier['ot-baggage-footwear']).to.equal('sandals'); expect(carrier['ot-baggage-creditcard']).to.equal('visa'); var extractedContext = Tracer.extract(opentracing.FORMAT_HTTP_HEADERS, carrier); expect(extractedContext._guid).to.equal(spanContext._guid); expect(extractedContext.getBaggageItem('footwear')).to.equal('sandals'); expect(extractedContext.getBaggageItem('creditcard')).to.equal('visa'); }); it("should propagate B3 format", function() { Tracer._propagators[Tracer._opentracing.FORMAT_HTTP_HEADERS] = new lightstep.B3Propagator(Tracer); var span = Tracer.startSpan('my_span'); var spanContext = span.context(); spanContext._sampled = false; spanContext.setBaggageItem('footwear', 'sandals'); spanContext.setBaggageItem('creditcard', 'visa'); var carrier = {}; Tracer.inject(spanContext, opentracing.FORMAT_HTTP_HEADERS, carrier); expect(carrier['x-b3-traceid'].length).to.equal(16) expect(carrier['x-b3-traceid']).to.equal(spanContext._traceGUID); expect(carrier['x-b3-spanid']).to.equal(spanContext._guid); expect(carrier['x-b3-sampled']).to.equal('0'); expect(carrier['ot-baggage-footwear']).to.equal('sandals'); expect(carrier['ot-baggage-creditcard']).to.equal('visa'); var extractedContext = Tracer.extract(opentracing.FORMAT_HTTP_HEADERS, carrier); expect(extractedContext._guid).to.equal(spanContext._guid); expect(extractedContext.traceGUID()).to.equal(spanContext.traceGUID()); expect(extractedContext._sampled).to.equal(spanContext._sampled); expect(extractedContext.getBaggageItem('footwear')).to.equal('sandals'); expect(extractedContext.getBaggageItem('creditcard')).to.equal('visa'); var span2 = Tracer.startSpan('my_child', { childOf: extractedContext}); expect(span2.context()._sampled).to.equal(false); }); it("should propagate B3 format (64 bit traceid)", function() { Tracer._propagators[Tracer._opentracing.FORMAT_HTTP_HEADERS] = new lightstep.B3Propagator(Tracer); headers = { 'x-b3-spanid': '5e7c1e9617cdd152', 'x-b3-traceid': '0a0f6c981e2430cb', 'x-b3-sampled': '1' }; var context = Tracer.extract(opentracing.FORMAT_HTTP_HEADERS, headers); expect(context.traceGUID()).to.equal('00000000000000000a0f6c981e2430cb'); carrier = {}; Tracer.inject(context, opentracing.FORMAT_HTTP_HEADERS, carrier); expect(headers['x-b3-traceid']).to.equal('0a0f6c981e2430cb'); }); it("should propagate B3 format (128 bit traceid)", function() { Tracer._propagators[Tracer._opentracing.FORMAT_HTTP_HEADERS] = new lightstep.B3Propagator(Tracer); headers = { 'x-b3-spanid': '5e7c1e9617cdd152', 'x-b3-traceid': '10000000000000000a0f6c981e2430cb', 'x-b3-sampled': '1' }; var context = Tracer.extract(opentracing.FORMAT_HTTP_HEADERS, headers); expect(context.traceGUID()).to.equal('10000000000000000a0f6c981e2430cb'); carrier = {}; Tracer.inject(context, opentracing.FORMAT_HTTP_HEADERS, carrier); expect(headers['x-b3-traceid']).to.equal('10000000000000000a0f6c981e2430cb'); }); it("should propagate binary carriers"); }); describe("Tracer#extract", function() { it('is a method', function() { expect(Tracer.extract).to.be.a("function"); }); it("should extract from an empty text map carrier correctly" , function() { var carrier = {}; var extractedContext = Tracer.extract(opentracing.FORMAT_TEXT_MAP, carrier); expect(extractedContext).to.be.null; }); }); describe("Tracer#flush", function() { it("supports passing no arguments", function() { var span = Tracer.startSpan('test'); span.finish(); Tracer.flush(); }); it("supports passing a callback argument", function(done) { var span = Tracer.startSpan('test'); span.finish(); Tracer.flush(function(err) { done(); }); }); }); });