// As long as we call this on afterEach, and tests are executed sequentially. // we can reuse this tracer for any number of tests expectNoLeaks() { expect(this._tracer.id).to.equal(this._sentinelTraceId); // no context leaks expect(this._spans).to.be.empty; // eslint-disable-line no-unused-expressions }
constructor({localServiceName}) { // TODO see if we can conditionally load from package because when testing zipkin itself we want // to use explicit paths const { BatchRecorder, ExplicitContext, TraceId, Tracer, jsonEncoder: {JSON_V2} } = require('zipkin'); this._spans = []; this._tracer = new Tracer({ ctxImpl: new ExplicitContext(), localServiceName, recorder: new BatchRecorder({ logger: { logSpan: (span) => { this._spans.push(JSON.parse(JSON_V2.encode(span))); } } }) }); this._sentinelTraceId = this._tracer.id; this._debugId = new TraceId({spanId: this._tracer.id.traceId, debug: true}); }
}).then((body) => { assert.equal(body, 'ok'); assert.equal(tracer.id.traceId, id1.traceId); assert.equal(tracer.id.traceId, id1.traceId); }); }); assert.equal(body[0], 'me'); }).then(() => { assert.equal(tracer.id.traceId, id2.traceId); return tracer.id.traceId; })); assert.equal(tracer.id.traceId, id2.traceId); assert.equal(resolvedId, id2.traceId); }); assert.equal(err.body[0], 'sushi'); }).catch(() => { assert.equal(tracer.id.traceId, id2.traceId); done(); }); }); assert.equal(tracer.id.traceId, id1.traceId); });
}).then((body) => { assert.equal(body, 'ok'); assert.equal(tracer.id.traceId, id1.traceId); assert.equal(tracer.id.traceId, id1.traceId); }); }); assert.equal(body[0], 'me'); }).then(() => { assert.equal(tracer.id.traceId, id2.traceId); return tracer.id.traceId; })); assert.equal(tracer.id.traceId, id2.traceId); assert.equal(resolvedId, id2.traceId); }); assert.equal(err.body[0], 'sushi'); }).catch(() => { assert.equal(tracer.id.traceId, id2.traceId); done(); }); }); assert.equal(tracer.id.traceId, id1.traceId); });
}).then((body) => { assert.equal(body, 'ok'); assert.equal(tracer.id.traceId, id1.traceId); assert.equal(tracer.id.traceId, id1.traceId); }); }); assert.equal(body[0], 'me'); }).then(() => { assert.equal(tracer.id.traceId, id2.traceId); return tracer.id.traceId; })); assert.equal(tracer.id.traceId, id2.traceId); assert.equal(resolvedId, id2.traceId); }); assert.equal(err.body[0], 'sushi'); }).catch(() => { assert.equal(tracer.id.traceId, id2.traceId); done(); }); }); assert.equal(tracer.id.traceId, id1.traceId); });
}).then((body) => { assert.equal(body, 'ok'); assert.equal(tracer.id.traceId, id1.traceId); assert.equal(tracer.id.traceId, id1.traceId); }); }); assert.equal(body[0], 'me'); }).then(() => { assert.equal(tracer.id.traceId, id2.traceId); return tracer.id.traceId; })); assert.equal(tracer.id.traceId, id2.traceId); assert.equal(resolvedId, id2.traceId); }); assert.equal(err.body[0], 'sushi'); }).catch(() => { assert.equal(tracer.id.traceId, id2.traceId); done(); }); }); assert.equal(tracer.id.traceId, id1.traceId); });