it('should close the correct span for a promise', () => { const tracer = new Tracer({ctxImpl, recorder, localServiceName}); const promise = tracer.local('buy-smoothie', () => Promise.delay(10) .then(() => 'smoothie')); expect(isPromise(promise)).to.eql(true); // hasn't finished yet, due to the delay expect(spans).to.be.empty; // eslint-disable-line no-unused-expressions return promise.then((result) => { expect(result).to.eql('smoothie'); expectSpan(popSpan(), { name: 'buy-smoothie', localEndpoint: {serviceName: localServiceName} }); }); });
const mockRecorderWrapper = (meta, oldFp, ...p) => { const clonedParams = shouldRecordStubParams() ? _.cloneDeep(p) : []; const result = oldFp(...p); try { const data = { mockMeta: meta, params: clonedParams }; if (isPromise(result)) { result.then(res => recordToCls(KEY_MOCKS, { ...data, result: res })); } else { recordToCls(KEY_MOCKS, { ...data, result }); } } catch (e) { console.error(e); } return result; }
async function emit(type, ...args) { assertType(type) const listeners = this.listeners(type) const onceListeners = [] if (listeners && listeners.length) { for(let i = 0; i < listeners.length; i++) { const event = listeners[i] const rlt = event.apply(this, args) if (isPromise(rlt)) { await rlt } if (this._events[type][i][TYPE_KEYNAME] === 'once') { onceListeners.push(event) } } onceListeners.forEach(event => this.removeListener(type, event) ) return true } return false }
const top = stack.length - 1; if (isPromise(result)) { stack[top].doesReturnPromise = true; session.set('stack', stack);
if (!isPromise(result)) { this.recordAnnotation(new Annotation.LocalOperationStop()); return result;
[KEY_UUID]: funcUuid, }; if (isPromise(result)) { result.then(res => recordToCls(KEY_INJECTIONS, { ...data, result: res })); } else {
it('should make a local span for a promise', () => { const tracer = new Tracer({ctxImpl, recorder, localServiceName}); const promise = tracer.local('buy-smoothie', () => Promise.delay(10) .then(() => 'smoothie')); expect(isPromise(promise)).to.eql(true); // hasn't finished yet, due to the delay expect(spans).to.be.empty; // eslint-disable-line no-unused-expressions return promise.then((result) => { expect(result).to.eql('smoothie'); expectSpan(popSpan(), { name: 'buy-smoothie', localEndpoint: {serviceName: localServiceName} }); }); });
it('should close the correct span for a promise', () => { const tracer = new Tracer({ctxImpl, recorder, localServiceName}); const promise = tracer.local('buy-smoothie', () => Promise.delay(10) .then(() => 'smoothie')); expect(isPromise(promise)).to.eql(true); // hasn't finished yet, due to the delay expect(spans).to.be.empty; // eslint-disable-line no-unused-expressions return promise.then((result) => { expect(result).to.eql('smoothie'); expectSpan(popSpan(), { name: 'buy-smoothie', localEndpoint: {serviceName: localServiceName} }); }); });
it('should make a local span for a promise', () => { const tracer = new Tracer({ctxImpl, recorder, localServiceName}); const promise = tracer.local('buy-smoothie', () => Promise.delay(10) .then(() => 'smoothie')); expect(isPromise(promise)).to.eql(true); // hasn't finished yet, due to the delay expect(spans).to.be.empty; // eslint-disable-line no-unused-expressions return promise.then((result) => { expect(result).to.eql('smoothie'); expectSpan(popSpan(), { name: 'buy-smoothie', localEndpoint: {serviceName: localServiceName} }); }); });
if (!isPromise(result)) { this.recordAnnotation(new Annotation.LocalOperationStop()); return result;