rollbar 2.26.4 → 3.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +3 -0
- package/.cursor/rules/guidelines.mdc +154 -0
- package/.github/workflows/ci.yml +4 -6
- package/CLAUDE.local.md +297 -0
- package/CLAUDE.md +201 -0
- package/CLAUDE.testrunner.md +470 -0
- package/Gruntfile.js +59 -16
- package/Makefile +3 -3
- package/SECURITY.md +5 -0
- package/babel.config.json +9 -0
- package/codex.md +148 -0
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +19332 -6596
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +2 -1
- package/dist/rollbar.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +19332 -6596
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +2 -1
- package/dist/rollbar.named-amd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +19319 -6581
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +2 -1
- package/dist/rollbar.noconflict.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +19333 -6597
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +2 -1
- package/dist/rollbar.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.umd.min.js.map +1 -1
- package/eslint.config.mjs +33 -0
- package/karma.conf.js +5 -14
- package/package.json +19 -20
- package/src/api.js +57 -4
- package/src/apiUtility.js +2 -3
- package/src/browser/core.js +37 -9
- package/src/browser/replay/defaults.js +70 -0
- package/src/browser/replay/recorder.js +194 -0
- package/src/browser/replay/replayMap.js +195 -0
- package/src/browser/rollbar.js +11 -7
- package/src/browser/telemetry.js +3 -3
- package/src/browser/transport/fetch.js +17 -4
- package/src/browser/transport/xhr.js +17 -1
- package/src/browser/transport.js +11 -8
- package/src/defaults.js +1 -1
- package/src/queue.js +65 -4
- package/src/react-native/rollbar.js +1 -1
- package/src/rollbar.js +52 -10
- package/src/server/rollbar.js +3 -2
- package/src/telemetry.js +76 -11
- package/src/tracing/context.js +24 -0
- package/src/tracing/contextManager.js +37 -0
- package/src/tracing/defaults.js +7 -0
- package/src/tracing/exporter.js +188 -0
- package/src/tracing/hrtime.js +98 -0
- package/src/tracing/id.js +24 -0
- package/src/tracing/session.js +55 -0
- package/src/tracing/span.js +92 -0
- package/src/tracing/spanProcessor.js +15 -0
- package/src/tracing/tracer.js +46 -0
- package/src/tracing/tracing.js +89 -0
- package/src/utility.js +34 -0
- package/test/api.test.js +57 -12
- package/test/apiUtility.test.js +5 -6
- package/test/browser.core.test.js +1 -10
- package/test/browser.domUtility.test.js +1 -1
- package/test/browser.predicates.test.js +1 -1
- package/test/browser.replay.recorder.test.js +430 -0
- package/test/browser.rollbar.test.js +58 -12
- package/test/browser.telemetry.test.js +1 -1
- package/test/browser.transforms.test.js +20 -13
- package/test/browser.transport.test.js +5 -4
- package/test/browser.url.test.js +1 -1
- package/test/fixtures/replay/index.js +20 -0
- package/test/fixtures/replay/payloads.fixtures.js +229 -0
- package/test/fixtures/replay/rrwebEvents.fixtures.js +251 -0
- package/test/fixtures/replay/rrwebSyntheticEvents.fixtures.js +328 -0
- package/test/notifier.test.js +1 -1
- package/test/predicates.test.js +1 -1
- package/test/queue.test.js +1 -1
- package/test/rateLimiter.test.js +1 -1
- package/test/react-native.rollbar.test.js +1 -1
- package/test/react-native.transforms.test.js +2 -2
- package/test/react-native.transport.test.js +3 -3
- package/test/replay/index.js +2 -0
- package/test/replay/integration/api.spans.test.js +136 -0
- package/test/replay/integration/e2e.test.js +228 -0
- package/test/replay/integration/index.js +9 -0
- package/test/replay/integration/queue.replayMap.test.js +332 -0
- package/test/replay/integration/replayMap.test.js +163 -0
- package/test/replay/integration/sessionRecording.test.js +390 -0
- package/test/replay/unit/api.postSpans.test.js +150 -0
- package/test/replay/unit/index.js +7 -0
- package/test/replay/unit/queue.replayMap.test.js +225 -0
- package/test/replay/unit/replayMap.test.js +348 -0
- package/test/replay/util/index.js +5 -0
- package/test/replay/util/mockRecordFn.js +80 -0
- package/test/server.lambda.mocha.test.mjs +172 -0
- package/test/server.locals.constructor.mocha.test.mjs +80 -0
- package/test/server.locals.error-handling.mocha.test.mjs +387 -0
- package/test/server.locals.merge.mocha.test.mjs +267 -0
- package/test/server.locals.test-utils.mjs +114 -0
- package/test/server.parser.mocha.test.mjs +87 -0
- package/test/server.predicates.mocha.test.mjs +63 -0
- package/test/server.rollbar.constructor.mocha.test.mjs +199 -0
- package/test/server.rollbar.handlers.mocha.test.mjs +253 -0
- package/test/server.rollbar.logging.mocha.test.mjs +326 -0
- package/test/server.rollbar.misc.mocha.test.mjs +44 -0
- package/test/server.rollbar.test-utils.mjs +57 -0
- package/test/server.telemetry.mocha.test.mjs +377 -0
- package/test/server.transforms.data.mocha.test.mjs +163 -0
- package/test/server.transforms.error.mocha.test.mjs +199 -0
- package/test/server.transforms.request.mocha.test.mjs +208 -0
- package/test/server.transforms.scrub.mocha.test.mjs +140 -0
- package/test/server.transforms.sourcemaps.mocha.test.mjs +122 -0
- package/test/server.transforms.test-utils.mjs +62 -0
- package/test/server.transport.mocha.test.mjs +269 -0
- package/test/telemetry.test.js +132 -1
- package/test/tracing/contextManager.test.js +28 -0
- package/test/tracing/exporter.toPayload.test.js +400 -0
- package/test/tracing/id.test.js +24 -0
- package/test/tracing/span.test.js +183 -0
- package/test/tracing/spanProcessor.test.js +73 -0
- package/test/tracing/tracing.test.js +105 -0
- package/test/transforms.test.js +2 -2
- package/test/truncation.test.js +2 -2
- package/test/utility.test.js +44 -6
- package/webpack.config.js +6 -44
- package/.eslintignore +0 -7
- package/test/server.lambda.test.js +0 -194
- package/test/server.locals.test.js +0 -1068
- package/test/server.parser.test.js +0 -78
- package/test/server.predicates.test.js +0 -91
- package/test/server.rollbar.test.js +0 -728
- package/test/server.telemetry.test.js +0 -443
- package/test/server.transforms.test.js +0 -1193
- package/test/server.transport.test.js +0 -269
|
@@ -1,728 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var assert = require('assert');
|
|
4
|
-
var vows = require('vows');
|
|
5
|
-
var sinon = require('sinon');
|
|
6
|
-
|
|
7
|
-
process.env.NODE_ENV = process.env.NODE_ENV || 'test-node-env';
|
|
8
|
-
var Rollbar = require('../src/server/rollbar');
|
|
9
|
-
|
|
10
|
-
const DUMMY_TRACE_ID = 'some-trace-id';
|
|
11
|
-
const DUMMY_SPAN_ID = 'some-span-id';
|
|
12
|
-
|
|
13
|
-
const ValidOpenTracingTracerStub = {
|
|
14
|
-
scope: () => {
|
|
15
|
-
return {
|
|
16
|
-
active: () => {
|
|
17
|
-
return {
|
|
18
|
-
setTag: () => {},
|
|
19
|
-
context: () => {
|
|
20
|
-
return {
|
|
21
|
-
toTraceId: () => DUMMY_TRACE_ID,
|
|
22
|
-
toSpanId: () => DUMMY_SPAN_ID,
|
|
23
|
-
};
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const InvalidOpenTracingTracerStub = {
|
|
32
|
-
foo: () => {},
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
function TestClientGen() {
|
|
36
|
-
var TestClient = function () {
|
|
37
|
-
this.notifier = {
|
|
38
|
-
addTransform: function () {
|
|
39
|
-
return this;
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
this.queue = {
|
|
43
|
-
addPredicate: function () {
|
|
44
|
-
return this;
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
this.logCalls = [];
|
|
48
|
-
var logs = 'log,debug,info,warn,warning,error,critical'.split(',');
|
|
49
|
-
for (var i = 0, len = logs.length; i < len; i++) {
|
|
50
|
-
var fn = logs[i].slice(0);
|
|
51
|
-
this[fn] = function (fn, item) {
|
|
52
|
-
this.logCalls.push({ func: fn, item: item });
|
|
53
|
-
}.bind(this, fn);
|
|
54
|
-
}
|
|
55
|
-
this.buildJsonPayload = function (obj) {
|
|
56
|
-
this.logCalls.push({ item: obj });
|
|
57
|
-
};
|
|
58
|
-
this.sendJsonPayload = function (json) {
|
|
59
|
-
this.logCalls.push({ item: json });
|
|
60
|
-
};
|
|
61
|
-
this.clearLogCalls = function () {
|
|
62
|
-
this.logCalls = [];
|
|
63
|
-
};
|
|
64
|
-
this.tracer = ValidOpenTracingTracerStub;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
return TestClient;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
async function wait(ms) {
|
|
71
|
-
return new Promise((resolve) => {
|
|
72
|
-
setTimeout(resolve, ms);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async function nodeReject(rollbar, callback) {
|
|
77
|
-
Promise.reject(new Error('node reject'));
|
|
78
|
-
await wait(500);
|
|
79
|
-
callback(rollbar);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async function nodeThrow(rollbar, callback) {
|
|
83
|
-
setTimeout(function () {
|
|
84
|
-
throw new Error('node error');
|
|
85
|
-
}, 10);
|
|
86
|
-
await wait(500);
|
|
87
|
-
callback(rollbar);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
vows
|
|
91
|
-
.describe('rollbar')
|
|
92
|
-
.addBatch({
|
|
93
|
-
constructor: {
|
|
94
|
-
'with accessToken': {
|
|
95
|
-
topic: function () {
|
|
96
|
-
return new Rollbar('abc123');
|
|
97
|
-
},
|
|
98
|
-
'should have log method': function (r) {
|
|
99
|
-
assert.isFunction(r.log);
|
|
100
|
-
},
|
|
101
|
-
'should have error method': function (r) {
|
|
102
|
-
assert.isFunction(r.error);
|
|
103
|
-
},
|
|
104
|
-
'should have buildJsonPayload method': function (r) {
|
|
105
|
-
assert.isFunction(r.buildJsonPayload);
|
|
106
|
-
},
|
|
107
|
-
'should have sendJsonPayload method': function (r) {
|
|
108
|
-
assert.isFunction(r.sendJsonPayload);
|
|
109
|
-
},
|
|
110
|
-
'should have accessToken in options': function (r) {
|
|
111
|
-
assert.equal('abc123', r.options.accessToken);
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
'with options': {
|
|
115
|
-
topic: function () {
|
|
116
|
-
return new Rollbar({ accessToken: 'abc123' });
|
|
117
|
-
},
|
|
118
|
-
'should have log method': function (r) {
|
|
119
|
-
assert.isFunction(r.log);
|
|
120
|
-
},
|
|
121
|
-
'should have error method': function (r) {
|
|
122
|
-
assert.isFunction(r.error);
|
|
123
|
-
},
|
|
124
|
-
'should have accessToken in options': function (r) {
|
|
125
|
-
assert.equal('abc123', r.options.accessToken);
|
|
126
|
-
},
|
|
127
|
-
'should set environment based on default': function (r) {
|
|
128
|
-
assert.equal(process.env.NODE_ENV, r.options.environment);
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
'with more options': {
|
|
132
|
-
topic: function () {
|
|
133
|
-
return new Rollbar({
|
|
134
|
-
accessToken: 'abc123',
|
|
135
|
-
environment: 'fake-env',
|
|
136
|
-
});
|
|
137
|
-
},
|
|
138
|
-
'should have log method': function (r) {
|
|
139
|
-
assert.isFunction(r.log);
|
|
140
|
-
},
|
|
141
|
-
'should have error method': function (r) {
|
|
142
|
-
assert.isFunction(r.error);
|
|
143
|
-
},
|
|
144
|
-
'should have accessToken in options': function (r) {
|
|
145
|
-
assert.equal('abc123', r.options.accessToken);
|
|
146
|
-
},
|
|
147
|
-
'should set environment based on options': function (r) {
|
|
148
|
-
assert.equal('fake-env', r.options.environment);
|
|
149
|
-
},
|
|
150
|
-
'should set configured options': function (r) {
|
|
151
|
-
assert.equal('fake-env', r.options._configuredOptions.environment);
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
'with deprecated options': {
|
|
155
|
-
topic: function () {
|
|
156
|
-
return new Rollbar({
|
|
157
|
-
hostWhiteList: ['foo'],
|
|
158
|
-
hostBlackList: ['bar'],
|
|
159
|
-
});
|
|
160
|
-
},
|
|
161
|
-
'should replace options': function (r) {
|
|
162
|
-
assert.equal(r.options.hostWhiteList, undefined);
|
|
163
|
-
assert.equal(r.options.hostBlackList, undefined);
|
|
164
|
-
assert.equal(r.options.hostSafeList, 'foo');
|
|
165
|
-
assert.equal(r.options.hostBlockList, 'bar');
|
|
166
|
-
},
|
|
167
|
-
},
|
|
168
|
-
'with valid tracer': {
|
|
169
|
-
topic: function () {
|
|
170
|
-
var rollbar = new Rollbar({
|
|
171
|
-
captureUncaught: true,
|
|
172
|
-
environment: 'fake-env',
|
|
173
|
-
tracer: ValidOpenTracingTracerStub,
|
|
174
|
-
});
|
|
175
|
-
return rollbar;
|
|
176
|
-
},
|
|
177
|
-
'should configure tracer': function (r) {
|
|
178
|
-
assert.ok(typeof r.client.tracer === 'object');
|
|
179
|
-
},
|
|
180
|
-
},
|
|
181
|
-
'with invalid tracer': {
|
|
182
|
-
topic: function () {
|
|
183
|
-
var rollbar = new Rollbar({
|
|
184
|
-
captureUncaught: true,
|
|
185
|
-
environment: 'fake-env',
|
|
186
|
-
tracer: InvalidOpenTracingTracerStub,
|
|
187
|
-
});
|
|
188
|
-
return rollbar;
|
|
189
|
-
},
|
|
190
|
-
'should configure tracer': function (r) {
|
|
191
|
-
assert.equal(null, r.client.tracer);
|
|
192
|
-
},
|
|
193
|
-
},
|
|
194
|
-
},
|
|
195
|
-
configure: {
|
|
196
|
-
'with updated options': {
|
|
197
|
-
topic: function () {
|
|
198
|
-
var rollbar = new Rollbar({
|
|
199
|
-
captureUncaught: true,
|
|
200
|
-
environment: 'fake-env',
|
|
201
|
-
});
|
|
202
|
-
rollbar.configure({ captureUncaught: false, environment: 'new-env' });
|
|
203
|
-
return rollbar;
|
|
204
|
-
},
|
|
205
|
-
'should set configured options': function (r) {
|
|
206
|
-
assert.equal('new-env', r.options._configuredOptions.environment);
|
|
207
|
-
assert.equal(false, r.options._configuredOptions.captureUncaught);
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
'with deprecated options': {
|
|
211
|
-
topic: function () {
|
|
212
|
-
var rollbar = new Rollbar({ captureUncaught: true });
|
|
213
|
-
rollbar.configure({
|
|
214
|
-
hostWhiteList: ['foo'],
|
|
215
|
-
hostBlackList: ['bar'],
|
|
216
|
-
});
|
|
217
|
-
return rollbar;
|
|
218
|
-
},
|
|
219
|
-
'should replace options': function (r) {
|
|
220
|
-
assert.equal(r.options.hostWhiteList, undefined);
|
|
221
|
-
assert.equal(r.options.hostBlackList, undefined);
|
|
222
|
-
assert.equal(r.options.hostSafeList, 'foo');
|
|
223
|
-
assert.equal(r.options.hostBlockList, 'bar');
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
'with valid tracer': {
|
|
227
|
-
topic: function () {
|
|
228
|
-
var rollbar = new Rollbar({
|
|
229
|
-
captureUncaught: true,
|
|
230
|
-
environment: 'fake-env',
|
|
231
|
-
});
|
|
232
|
-
rollbar.configure({ tracer: ValidOpenTracingTracerStub });
|
|
233
|
-
return rollbar;
|
|
234
|
-
},
|
|
235
|
-
'should configure tracer': function (r) {
|
|
236
|
-
assert.equal(ValidOpenTracingTracerStub, r.client.tracer);
|
|
237
|
-
},
|
|
238
|
-
},
|
|
239
|
-
'with invalid tracer': {
|
|
240
|
-
topic: function () {
|
|
241
|
-
var rollbar = new Rollbar({
|
|
242
|
-
captureUncaught: true,
|
|
243
|
-
environment: 'fake-env',
|
|
244
|
-
});
|
|
245
|
-
rollbar.configure({ tracer: InvalidOpenTracingTracerStub });
|
|
246
|
-
return rollbar;
|
|
247
|
-
},
|
|
248
|
-
'should configure tracer': function (r) {
|
|
249
|
-
assert.equal(null, r.client.tracer);
|
|
250
|
-
},
|
|
251
|
-
},
|
|
252
|
-
},
|
|
253
|
-
addTracingInfo: {
|
|
254
|
-
'with valid tracer': {
|
|
255
|
-
topic: function () {
|
|
256
|
-
var rollbar = new Rollbar({
|
|
257
|
-
captureUncaught: true,
|
|
258
|
-
environment: 'fake-env',
|
|
259
|
-
tracer: ValidOpenTracingTracerStub,
|
|
260
|
-
});
|
|
261
|
-
return rollbar;
|
|
262
|
-
},
|
|
263
|
-
'should add trace ID and span ID to custom field on item if no custom field set':
|
|
264
|
-
function (r) {
|
|
265
|
-
const item = { uuid: 'some-uuid', custom: null };
|
|
266
|
-
r.client._addTracingInfo(item);
|
|
267
|
-
assert.equal(DUMMY_TRACE_ID, item.custom.opentracing_trace_id);
|
|
268
|
-
assert.equal(DUMMY_SPAN_ID, item.custom.opentracing_span_id);
|
|
269
|
-
},
|
|
270
|
-
'should add trace ID and span ID to custom field on item even if already has some custom fields':
|
|
271
|
-
function (r) {
|
|
272
|
-
const item = { uuid: 'some-uuid', custom: { foo: 'foo' } };
|
|
273
|
-
r.client._addTracingInfo(item);
|
|
274
|
-
assert.equal(DUMMY_TRACE_ID, item.custom.opentracing_trace_id);
|
|
275
|
-
assert.equal(DUMMY_SPAN_ID, item.custom.opentracing_span_id);
|
|
276
|
-
assert.equal('foo', item.custom.foo);
|
|
277
|
-
},
|
|
278
|
-
},
|
|
279
|
-
'with invalid tracer': {
|
|
280
|
-
topic: function () {
|
|
281
|
-
var rollbar = new Rollbar({
|
|
282
|
-
captureUncaught: true,
|
|
283
|
-
environment: 'fake-env',
|
|
284
|
-
tracer: InvalidOpenTracingTracerStub,
|
|
285
|
-
});
|
|
286
|
-
return rollbar;
|
|
287
|
-
},
|
|
288
|
-
'should add trace ID and span ID to custom field on item': function (
|
|
289
|
-
r,
|
|
290
|
-
) {
|
|
291
|
-
const item = { uuid: 'some-uuid', custom: {} };
|
|
292
|
-
r.client._addTracingInfo(item);
|
|
293
|
-
assert.equal(undefined, item.custom.opentracing_trace_id);
|
|
294
|
-
assert.equal(undefined, item.custom.opentracing_span_id);
|
|
295
|
-
},
|
|
296
|
-
},
|
|
297
|
-
},
|
|
298
|
-
log: {
|
|
299
|
-
topic: function () {
|
|
300
|
-
var client = new (TestClientGen())();
|
|
301
|
-
var rollbar = new Rollbar({ accessToken: 'abc123' }, client);
|
|
302
|
-
return rollbar;
|
|
303
|
-
},
|
|
304
|
-
message: {
|
|
305
|
-
'with unordered options': {
|
|
306
|
-
'should work with custom, request, callback, message ': function (r) {
|
|
307
|
-
var message = 'hello';
|
|
308
|
-
var callbackCalled = false;
|
|
309
|
-
var callback = function cb() {
|
|
310
|
-
callbackCalled = true;
|
|
311
|
-
};
|
|
312
|
-
var request = { method: 'GET' };
|
|
313
|
-
var custom = { a: 1, b: 2 };
|
|
314
|
-
r.log(custom, request, callback, message);
|
|
315
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
316
|
-
assert.equal(item.message, message);
|
|
317
|
-
assert.equal(item.request, request);
|
|
318
|
-
assert.deepStrictEqual(item.custom, custom);
|
|
319
|
-
item.callback();
|
|
320
|
-
assert.isTrue(callbackCalled);
|
|
321
|
-
},
|
|
322
|
-
},
|
|
323
|
-
'with old option ordering': {
|
|
324
|
-
'should work': function (r) {
|
|
325
|
-
var message = 'hello';
|
|
326
|
-
r.log(message);
|
|
327
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
328
|
-
assert.equal(item.message, message);
|
|
329
|
-
},
|
|
330
|
-
'should work with callback': function (r) {
|
|
331
|
-
var message = 'hello';
|
|
332
|
-
var callbackCalled = false;
|
|
333
|
-
var callback = function cb() {
|
|
334
|
-
callbackCalled = true;
|
|
335
|
-
};
|
|
336
|
-
r.log(message, callback);
|
|
337
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
338
|
-
assert.equal(item.message, message);
|
|
339
|
-
item.callback();
|
|
340
|
-
assert.isTrue(callbackCalled);
|
|
341
|
-
},
|
|
342
|
-
'should work with request': function (r) {
|
|
343
|
-
var message = 'hello';
|
|
344
|
-
var request = { method: 'GET' };
|
|
345
|
-
r.log(message, request);
|
|
346
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
347
|
-
assert.equal(item.message, message);
|
|
348
|
-
assert.equal(item.request, request);
|
|
349
|
-
},
|
|
350
|
-
'should work with request and callback': function (r) {
|
|
351
|
-
var message = 'hello';
|
|
352
|
-
var request = { method: 'GET' };
|
|
353
|
-
var callbackCalled = false;
|
|
354
|
-
var callback = function cb() {
|
|
355
|
-
callbackCalled = true;
|
|
356
|
-
};
|
|
357
|
-
r.log(message, request, callback);
|
|
358
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
359
|
-
assert.equal(item.message, message);
|
|
360
|
-
assert.equal(item.request, request);
|
|
361
|
-
item.callback();
|
|
362
|
-
assert.isTrue(callbackCalled);
|
|
363
|
-
},
|
|
364
|
-
'should work with request and custom': function (r) {
|
|
365
|
-
var message = 'hello';
|
|
366
|
-
var request = { method: 'GET' };
|
|
367
|
-
var custom = { a: 1, b: 2 };
|
|
368
|
-
r.log(message, request, custom);
|
|
369
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
370
|
-
assert.equal(item.message, message);
|
|
371
|
-
assert.equal(item.request, request);
|
|
372
|
-
assert.deepStrictEqual(item.custom, custom);
|
|
373
|
-
},
|
|
374
|
-
'should work with request and custom and callback': function (r) {
|
|
375
|
-
var message = 'hello';
|
|
376
|
-
var request = { method: 'GET' };
|
|
377
|
-
var custom = { a: 1, b: 2 };
|
|
378
|
-
var callbackCalled = false;
|
|
379
|
-
var callback = function cb() {
|
|
380
|
-
callbackCalled = true;
|
|
381
|
-
};
|
|
382
|
-
r.log(message, request, custom, callback);
|
|
383
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
384
|
-
assert.equal(item.message, message);
|
|
385
|
-
assert.equal(item.request, request);
|
|
386
|
-
assert.deepStrictEqual(item.custom, custom);
|
|
387
|
-
item.callback();
|
|
388
|
-
assert.isTrue(callbackCalled);
|
|
389
|
-
},
|
|
390
|
-
},
|
|
391
|
-
},
|
|
392
|
-
info: {
|
|
393
|
-
topic: function () {
|
|
394
|
-
// Uses real client and stubs queue.addItem so transforms can run.
|
|
395
|
-
var rollbar = new Rollbar({
|
|
396
|
-
accessToken: 'abc123',
|
|
397
|
-
captureUncaught: false,
|
|
398
|
-
});
|
|
399
|
-
var notifier = rollbar.client.notifier;
|
|
400
|
-
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
401
|
-
|
|
402
|
-
return rollbar;
|
|
403
|
-
},
|
|
404
|
-
'should send message when called with only null argument': function (
|
|
405
|
-
r,
|
|
406
|
-
) {
|
|
407
|
-
var addItemStub = r.addItemStub;
|
|
408
|
-
|
|
409
|
-
r.info(null);
|
|
410
|
-
assert.isTrue(addItemStub.called);
|
|
411
|
-
if (addItemStub.called) {
|
|
412
|
-
assert.equal(
|
|
413
|
-
addItemStub.getCall(0).args[3].data.body.message.body,
|
|
414
|
-
'Item sent with null or missing arguments.',
|
|
415
|
-
);
|
|
416
|
-
}
|
|
417
|
-
addItemStub.reset();
|
|
418
|
-
},
|
|
419
|
-
'should send message when called with no arguments': function (r) {
|
|
420
|
-
var addItemStub = r.addItemStub;
|
|
421
|
-
|
|
422
|
-
r.info();
|
|
423
|
-
assert.isTrue(addItemStub.called);
|
|
424
|
-
if (addItemStub.called) {
|
|
425
|
-
assert.equal(
|
|
426
|
-
addItemStub.getCall(0).args[3].data.body.message.body,
|
|
427
|
-
'Item sent with null or missing arguments.',
|
|
428
|
-
);
|
|
429
|
-
}
|
|
430
|
-
addItemStub.reset();
|
|
431
|
-
},
|
|
432
|
-
},
|
|
433
|
-
error: {
|
|
434
|
-
'with unordered options': {
|
|
435
|
-
'should work with custom, request, callback, message ': function (r) {
|
|
436
|
-
var err = new Error('hello!');
|
|
437
|
-
var callbackCalled = false;
|
|
438
|
-
var callback = function cb() {
|
|
439
|
-
callbackCalled = true;
|
|
440
|
-
};
|
|
441
|
-
var request = { method: 'GET' };
|
|
442
|
-
var custom = { a: 1, b: 2 };
|
|
443
|
-
r.log(custom, request, callback, err);
|
|
444
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
445
|
-
assert.equal(item.err, err);
|
|
446
|
-
assert.equal(item.request, request);
|
|
447
|
-
assert.deepStrictEqual(item.custom, custom);
|
|
448
|
-
item.callback();
|
|
449
|
-
assert.isTrue(callbackCalled);
|
|
450
|
-
},
|
|
451
|
-
},
|
|
452
|
-
'with old option ordering': {
|
|
453
|
-
'should work': function (r) {
|
|
454
|
-
var err = new Error('hello!');
|
|
455
|
-
r.log(err);
|
|
456
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
457
|
-
assert.equal(item.err, err);
|
|
458
|
-
},
|
|
459
|
-
'should work with callback': function (r) {
|
|
460
|
-
var err = new Error('hello!');
|
|
461
|
-
var callbackCalled = false;
|
|
462
|
-
var callback = function cb() {
|
|
463
|
-
callbackCalled = true;
|
|
464
|
-
};
|
|
465
|
-
r.log(err, callback);
|
|
466
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
467
|
-
assert.equal(item.err, err);
|
|
468
|
-
item.callback();
|
|
469
|
-
assert.isTrue(callbackCalled);
|
|
470
|
-
},
|
|
471
|
-
'should work with request': function (r) {
|
|
472
|
-
var err = new Error('hello!');
|
|
473
|
-
var request = { method: 'GET' };
|
|
474
|
-
r.log(err, request);
|
|
475
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
476
|
-
assert.equal(item.err, err);
|
|
477
|
-
assert.equal(item.request, request);
|
|
478
|
-
},
|
|
479
|
-
'should work with request and callback': function (r) {
|
|
480
|
-
var err = new Error('hello!');
|
|
481
|
-
var request = { method: 'GET' };
|
|
482
|
-
var callbackCalled = false;
|
|
483
|
-
var callback = function cb() {
|
|
484
|
-
callbackCalled = true;
|
|
485
|
-
};
|
|
486
|
-
r.log(err, request, callback);
|
|
487
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
488
|
-
assert.equal(item.err, err);
|
|
489
|
-
assert.equal(item.request, request);
|
|
490
|
-
item.callback();
|
|
491
|
-
assert.isTrue(callbackCalled);
|
|
492
|
-
},
|
|
493
|
-
'should work with request and custom': function (r) {
|
|
494
|
-
var err = new Error('hello!');
|
|
495
|
-
var request = { method: 'GET' };
|
|
496
|
-
var custom = { a: 1, b: 2 };
|
|
497
|
-
r.log(err, request, custom);
|
|
498
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
499
|
-
assert.equal(item.err, err);
|
|
500
|
-
assert.equal(item.request, request);
|
|
501
|
-
assert.deepStrictEqual(item.custom, custom);
|
|
502
|
-
},
|
|
503
|
-
'should work with request and custom and callback': function (r) {
|
|
504
|
-
var err = new Error('hello!');
|
|
505
|
-
var request = { method: 'GET' };
|
|
506
|
-
var custom = { a: 1, b: 2 };
|
|
507
|
-
var callbackCalled = false;
|
|
508
|
-
var callback = function cb() {
|
|
509
|
-
callbackCalled = true;
|
|
510
|
-
};
|
|
511
|
-
r.log(err, request, custom, callback);
|
|
512
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
513
|
-
assert.equal(item.err, err);
|
|
514
|
-
assert.equal(item.request, request);
|
|
515
|
-
assert.deepStrictEqual(item.custom, custom);
|
|
516
|
-
item.callback();
|
|
517
|
-
assert.isTrue(callbackCalled);
|
|
518
|
-
},
|
|
519
|
-
},
|
|
520
|
-
},
|
|
521
|
-
},
|
|
522
|
-
// captureUncaught tests are set up using subtopics because Rollbar's node.js handlers
|
|
523
|
-
// are treated as global and concurrent access will lead to handlers being removed
|
|
524
|
-
// unexpectedly. (Subtopics execute sequentially.)
|
|
525
|
-
captureUncaught: {
|
|
526
|
-
'enabled in constructor': {
|
|
527
|
-
topic: function () {
|
|
528
|
-
var rollbar = new Rollbar({
|
|
529
|
-
accessToken: 'abc123',
|
|
530
|
-
captureUncaught: true,
|
|
531
|
-
});
|
|
532
|
-
var notifier = rollbar.client.notifier;
|
|
533
|
-
rollbar.logStub = sinon.stub(notifier, 'log');
|
|
534
|
-
|
|
535
|
-
nodeThrow(rollbar, this.callback);
|
|
536
|
-
},
|
|
537
|
-
'should have locals disabled': function (r) {
|
|
538
|
-
assert.equal(r.client.notifier.locals, undefined);
|
|
539
|
-
},
|
|
540
|
-
'should log': function (r) {
|
|
541
|
-
var logStub = r.logStub;
|
|
542
|
-
|
|
543
|
-
assert.isTrue(logStub.called);
|
|
544
|
-
if (logStub.called) {
|
|
545
|
-
assert.equal(logStub.getCall(0).args[0].err.message, 'node error');
|
|
546
|
-
}
|
|
547
|
-
logStub.reset();
|
|
548
|
-
},
|
|
549
|
-
'disabled in configure': {
|
|
550
|
-
topic: function (r) {
|
|
551
|
-
r.configure({
|
|
552
|
-
captureUncaught: false,
|
|
553
|
-
});
|
|
554
|
-
|
|
555
|
-
nodeThrow(r, this.callback);
|
|
556
|
-
},
|
|
557
|
-
'should not log': function (r) {
|
|
558
|
-
var notifier = r.client.notifier;
|
|
559
|
-
var logStub = r.logStub;
|
|
560
|
-
|
|
561
|
-
assert.isFalse(logStub.called);
|
|
562
|
-
notifier.log.restore();
|
|
563
|
-
},
|
|
564
|
-
'disabled in constructor': {
|
|
565
|
-
topic: function () {
|
|
566
|
-
var rollbar = new Rollbar({
|
|
567
|
-
accessToken: 'abc123',
|
|
568
|
-
captureUncaught: false,
|
|
569
|
-
});
|
|
570
|
-
var notifier = rollbar.client.notifier;
|
|
571
|
-
rollbar.logStub = sinon.stub(notifier, 'log');
|
|
572
|
-
|
|
573
|
-
nodeThrow(rollbar, this.callback);
|
|
574
|
-
},
|
|
575
|
-
'should not log': function (r) {
|
|
576
|
-
var logStub = r.logStub;
|
|
577
|
-
|
|
578
|
-
assert.isFalse(logStub.called);
|
|
579
|
-
logStub.reset();
|
|
580
|
-
},
|
|
581
|
-
'enabled in configure': {
|
|
582
|
-
topic: function (r) {
|
|
583
|
-
r.configure({
|
|
584
|
-
captureUncaught: true,
|
|
585
|
-
});
|
|
586
|
-
|
|
587
|
-
nodeThrow(r, this.callback);
|
|
588
|
-
},
|
|
589
|
-
'should log': function (r) {
|
|
590
|
-
var notifier = r.client.notifier;
|
|
591
|
-
var logStub = r.logStub;
|
|
592
|
-
|
|
593
|
-
assert.isTrue(logStub.called);
|
|
594
|
-
if (logStub.called) {
|
|
595
|
-
assert.equal(
|
|
596
|
-
logStub.getCall(0).args[0].err.message,
|
|
597
|
-
'node error',
|
|
598
|
-
);
|
|
599
|
-
}
|
|
600
|
-
notifier.log.restore();
|
|
601
|
-
},
|
|
602
|
-
},
|
|
603
|
-
},
|
|
604
|
-
},
|
|
605
|
-
},
|
|
606
|
-
},
|
|
607
|
-
// captureUnhandledRejections tests are set up using subtopics because Rollbar's node.js handlers
|
|
608
|
-
// are treated as global and concurrent access will lead to handlers being removed
|
|
609
|
-
// unexpectedly. (Subtopics execute sequentially.)
|
|
610
|
-
captureUnhandledRejections: {
|
|
611
|
-
'enabled in constructor': {
|
|
612
|
-
topic: function () {
|
|
613
|
-
var rollbar = new Rollbar({
|
|
614
|
-
accessToken: 'abc123',
|
|
615
|
-
captureUnhandledRejections: true,
|
|
616
|
-
});
|
|
617
|
-
var notifier = rollbar.client.notifier;
|
|
618
|
-
rollbar.logStub = sinon.stub(notifier, 'log');
|
|
619
|
-
|
|
620
|
-
nodeReject(rollbar, this.callback);
|
|
621
|
-
},
|
|
622
|
-
'should log': function (r) {
|
|
623
|
-
var logStub = r.logStub;
|
|
624
|
-
|
|
625
|
-
assert.isTrue(logStub.called);
|
|
626
|
-
if (logStub.called) {
|
|
627
|
-
assert.equal(logStub.getCall(0).args[0].err.message, 'node reject');
|
|
628
|
-
}
|
|
629
|
-
logStub.reset();
|
|
630
|
-
},
|
|
631
|
-
'disabled in configure': {
|
|
632
|
-
topic: function (r) {
|
|
633
|
-
r.configure({
|
|
634
|
-
captureUnhandledRejections: false,
|
|
635
|
-
});
|
|
636
|
-
|
|
637
|
-
nodeReject(r, this.callback);
|
|
638
|
-
},
|
|
639
|
-
'should not log': function (r) {
|
|
640
|
-
var notifier = r.client.notifier;
|
|
641
|
-
var logStub = r.logStub;
|
|
642
|
-
|
|
643
|
-
assert.isFalse(logStub.called);
|
|
644
|
-
notifier.log.restore();
|
|
645
|
-
},
|
|
646
|
-
'disabled in constructor': {
|
|
647
|
-
topic: function () {
|
|
648
|
-
var rollbar = new Rollbar({
|
|
649
|
-
accessToken: 'abc123',
|
|
650
|
-
captureUnhandledRejections: false,
|
|
651
|
-
});
|
|
652
|
-
var notifier = rollbar.client.notifier;
|
|
653
|
-
rollbar.logStub = sinon.stub(notifier, 'log');
|
|
654
|
-
|
|
655
|
-
nodeReject(rollbar, this.callback);
|
|
656
|
-
},
|
|
657
|
-
'should not log': function (r) {
|
|
658
|
-
var logStub = r.logStub;
|
|
659
|
-
|
|
660
|
-
assert.isFalse(logStub.called);
|
|
661
|
-
logStub.reset();
|
|
662
|
-
},
|
|
663
|
-
'enabled in configure': {
|
|
664
|
-
topic: function (r) {
|
|
665
|
-
r.configure({
|
|
666
|
-
captureUnhandledRejections: true,
|
|
667
|
-
});
|
|
668
|
-
|
|
669
|
-
nodeReject(r, this.callback);
|
|
670
|
-
},
|
|
671
|
-
'should log': function (r) {
|
|
672
|
-
var notifier = r.client.notifier;
|
|
673
|
-
var logStub = r.logStub;
|
|
674
|
-
|
|
675
|
-
assert.isTrue(logStub.called);
|
|
676
|
-
if (logStub.called) {
|
|
677
|
-
assert.equal(
|
|
678
|
-
logStub.getCall(0).args[0].err.message,
|
|
679
|
-
'node reject',
|
|
680
|
-
);
|
|
681
|
-
}
|
|
682
|
-
notifier.log.restore();
|
|
683
|
-
},
|
|
684
|
-
},
|
|
685
|
-
},
|
|
686
|
-
},
|
|
687
|
-
},
|
|
688
|
-
},
|
|
689
|
-
buildJsonPayload: {
|
|
690
|
-
topic: function () {
|
|
691
|
-
var client = new (TestClientGen())();
|
|
692
|
-
var rollbar = new Rollbar({ accessToken: 'abc123' }, client);
|
|
693
|
-
return rollbar;
|
|
694
|
-
},
|
|
695
|
-
'should work': function (r) {
|
|
696
|
-
var obj = { foo: 'bar' };
|
|
697
|
-
r.buildJsonPayload(obj);
|
|
698
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
699
|
-
assert.equal(obj, item);
|
|
700
|
-
},
|
|
701
|
-
},
|
|
702
|
-
sendJsonPayload: {
|
|
703
|
-
topic: function () {
|
|
704
|
-
var client = new (TestClientGen())();
|
|
705
|
-
var rollbar = new Rollbar({ accessToken: 'abc123' }, client);
|
|
706
|
-
return rollbar;
|
|
707
|
-
},
|
|
708
|
-
'should work': function (r) {
|
|
709
|
-
var json = '{ "foo": "bar" }';
|
|
710
|
-
r.sendJsonPayload(json);
|
|
711
|
-
var item = r.client.logCalls[r.client.logCalls.length - 1].item;
|
|
712
|
-
assert.equal(json, item);
|
|
713
|
-
},
|
|
714
|
-
},
|
|
715
|
-
singleton: {
|
|
716
|
-
topic: function () {
|
|
717
|
-
var client = new (TestClientGen())();
|
|
718
|
-
return Rollbar.init({ accessToken: 'abc123' }, client);
|
|
719
|
-
},
|
|
720
|
-
'should allow log on constructor to pass through': function (r) {
|
|
721
|
-
r.log('hello 1');
|
|
722
|
-
Rollbar.log('hello 2');
|
|
723
|
-
assert.equal(r.client.logCalls[0].item.message, 'hello 1');
|
|
724
|
-
assert.equal(r.client.logCalls[1].item.message, 'hello 2');
|
|
725
|
-
},
|
|
726
|
-
},
|
|
727
|
-
})
|
|
728
|
-
.export(module, { error: false });
|