heroku-debug
Version:
debugging plugin for the CLI
144 lines (129 loc) • 3.65 kB
JavaScript
var test = require('tape')
var mockInstrumentation = require('./_instrumentation')
var Transaction = require('../../lib/instrumentation/transaction')
var Trace = require('../../lib/instrumentation/trace')
test('init', function (t) {
var ins = mockInstrumentation(function (added) {
t.ok(false)
})
var trans = new Transaction(ins._agent, 'name', 'type', 'result')
t.equal(trans.name, 'name')
t.equal(trans.type, 'type')
t.equal(trans.result, 'result')
t.equal(trans.ended, false)
t.deepEqual(trans.traces, [])
t.end()
})
test('#end() - no traces', function (t) {
var ins = mockInstrumentation(function (added) {
t.equal(added.ended, true)
t.equal(added, trans)
t.equal(trans.traces.length, 1)
t.deepEqual(trans.traces, [trans._rootTrace])
t.end()
})
var trans = new Transaction(ins._agent)
trans.end()
})
test('#end() - with traces', function (t) {
var ins = mockInstrumentation(function (added) {
t.equal(added.ended, true)
t.equal(added, trans)
t.equal(trans.traces.length, 2)
t.deepEqual(trans.traces, [trace, trans._rootTrace])
t.end()
})
var trans = new Transaction(ins._agent)
var trace = new Trace(trans)
trace.start()
trace.end()
trans.end()
})
test('#duration()', function (t) {
var ins = mockInstrumentation(function (added) {
t.ok(added.duration() > 24)
t.ok(added.duration() < 35)
t.end()
})
var trans = new Transaction(ins._agent)
setTimeout(function () {
trans.end()
}, 25)
})
test('#duration() - un-ended transaction', function (t) {
var ins = mockInstrumentation(function (added) {
t.ok(false)
})
var trans = new Transaction(ins._agent)
t.equal(trans.duration(), null)
t.end()
})
test('#setDefaultName() - with initial value', function (t) {
var ins = mockInstrumentation(function (added) {
t.ok(false)
})
var trans = new Transaction(ins._agent, 'default-1')
t.equal(trans.name, 'default-1')
trans.setDefaultName('default-2')
t.equal(trans.name, 'default-2')
t.end()
})
test('#setDefaultName() - no initial value', function (t) {
var ins = mockInstrumentation(function (added) {
t.ok(false)
})
var trans = new Transaction(ins._agent)
t.equal(trans.name, '')
trans.setDefaultName('default')
t.equal(trans.name, 'default')
t.end()
})
test('name - custom first, then default', function (t) {
var ins = mockInstrumentation(function (added) {
t.ok(false)
})
var trans = new Transaction(ins._agent)
trans.name = 'custom'
trans.setDefaultName('default')
t.equal(trans.name, 'custom')
t.end()
})
test('name - default first, then custom', function (t) {
var ins = mockInstrumentation(function (added) {
t.ok(false)
})
var trans = new Transaction(ins._agent)
trans.setDefaultName('default')
trans.name = 'custom'
t.equal(trans.name, 'custom')
t.end()
})
test('parallel transactions', function (t) {
var calls = 0
var ins = mockInstrumentation(function (added) {
t.equal(added._rootTrace.signature, 'transaction')
t.equal(added.traces.length, 1, added.name + ' should have 1 trace')
t.equal(added.traces[0], added._rootTrace)
calls++
if (calls === 1) {
t.equal(added.name, 'second')
} else if (calls === 2) {
t.equal(added.name, 'first')
t.end()
}
})
ins.currentTransaction = null
setImmediate(function () {
var t1 = new Transaction(ins._agent, 'first')
setTimeout(function () {
t1.end()
}, 100)
})
setTimeout(function () {
var t2 = new Transaction(ins._agent, 'second')
setTimeout(function () {
t2.end()
}, 25)
}, 25)
})