test('#startSpan() - ended transaction', setup(function (t) { const tracer = new Tracer(getAgent()) const span1 = tracer.startSpan('foo') span1.finish() const span2 = tracer.startSpan('bar') t.equal(span1._isTransaction, true) t.equal(span2._isTransaction, true) t.equal(span1.context()._context.parentId, undefined) t.equal(span2.context()._context.parentId, undefined) t.end() }))
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() }))
test('init', setup(function (t) { const tracer = new Tracer(getAgent()) const span = tracer.startSpan() t.equal(span._isTransaction, true) t.ok(span._span instanceof Transaction) t.end() }))
test('#startSpan()', setup(function (t) { const tracer = new Tracer(getAgent()) const span1 = tracer.startSpan() t.ok(span1, 'should return span') t.ok(span1._span, 'should hold reference to span/transaction') t.equal(span1._span.name, 'unnamed', 'should fall back to default name') t.equal(span1._span.type, 'custom', 'should fall back to default type') t.equal(span1._span.sampled, true) const span2 = tracer.startSpan() t.equal(span1._isTransaction, true, 'first span should be a transaction') t.equal(span2._isTransaction, false, 'second span should not be a transaction') t.end() }))
t.equal(span1._isTransaction, true) t.equal(span2._isTransaction, false) t.equal(span3._isTransaction, false)
t.equal(span1._isTransaction, true) t.equal(span2._isTransaction, false) t.equal(span3._isTransaction, false)
test('#startSpan() - not sampled', setup(function (t) { const agent = getAgent() agent._conf.transactionSampleRate = 0 const tracer = new Tracer(agent) const span1 = tracer.startSpan() t.ok(span1, 'should return span') t.ok(span1._span, 'should hold reference to span/transaction') t.equal(span1._isTransaction, true, 'first span should be a transaction') t.equal(span1._span.sampled, false) const span2 = tracer.startSpan() t.ok(span2 instanceof UnsampledSpan) agent._conf.transactionSampleRate = 1 t.end() }))
const span3 = tracer.startSpan('baz', { childOf: span2.context() }) t.equal(span1._isTransaction, true) t.equal(span2._isTransaction, false) t.equal(span3._isTransaction, false)
const span3 = tracer.startSpan('baz') // implicit child of span1, because span1 is a transaction t.equal(span1._isTransaction, true) t.equal(span2._isTransaction, false) t.equal(span3._isTransaction, false)