Skip to content

Commit 93c3abb

Browse files
committed
ref(node): Skip capturing Hapi Boom error responses.
1 parent 3cc0344 commit 93c3abb

File tree

4 files changed

+45
-8
lines changed

4 files changed

+45
-8
lines changed

dev-packages/node-integration-tests/suites/tracing-experimental/hapi/scenario.js

+8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ const init = async () => {
2626
},
2727
});
2828

29+
server.route({
30+
method: 'GET',
31+
path: '/error',
32+
handler: (_request, _h) => {
33+
throw new Error('Sentry Test Error');
34+
},
35+
});
36+
2937
await Sentry.setupHapiErrorHandler(server);
3038
await server.start();
3139

dev-packages/node-integration-tests/suites/tracing-experimental/hapi/test.ts

+19
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,29 @@ describe('hapi auto-instrumentation', () => {
2525
]),
2626
};
2727

28+
const EXPECTED_ERROR_EVENT = {
29+
exception: {
30+
values: [
31+
{
32+
type: 'Error',
33+
value: 'Sentry Test Error',
34+
},
35+
],
36+
},
37+
};
38+
2839
test('CJS - should auto-instrument `@hapi/hapi` package.', done => {
2940
createRunner(__dirname, 'scenario.js')
3041
.expect({ transaction: EXPECTED_TRANSACTION })
3142
.start(done)
3243
.makeRequest('get', '/');
3344
});
45+
46+
test('CJS - should handle errors in routes.', done => {
47+
createRunner(__dirname, 'scenario.js')
48+
.expect({ event: EXPECTED_ERROR_EVENT })
49+
.expectError()
50+
.start(done)
51+
.makeRequest('get', '/error');
52+
});
3453
});

dev-packages/node-integration-tests/utils/runner.ts

+17-1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ export function createRunner(...paths: string[]) {
126126
let withSentryServer = false;
127127
let dockerOptions: DockerOptions | undefined;
128128
let ensureNoErrorOutput = false;
129+
let expectError = false;
129130

130131
if (testPath.endsWith('.ts')) {
131132
flags.push('-r', 'ts-node/register');
@@ -136,6 +137,10 @@ export function createRunner(...paths: string[]) {
136137
expectedEnvelopes.push(expected);
137138
return this;
138139
},
140+
expectError: function () {
141+
expectError = true;
142+
return this;
143+
},
139144
withFlags: function (...args: string[]) {
140145
flags.push(...args);
141146
return this;
@@ -347,7 +352,18 @@ export function createRunner(...paths: string[]) {
347352
}
348353

349354
const url = `http://localhost:${scenarioServerPort}${path}`;
350-
if (method === 'get') {
355+
if (expectError) {
356+
try {
357+
if (method === 'get') {
358+
await axios.get(url, { headers });
359+
} else {
360+
await axios.post(url, { headers });
361+
}
362+
} catch (e) {
363+
return;
364+
}
365+
return;
366+
} else if (method === 'get') {
351367
return (await axios.get(url, { headers })).data;
352368
} else {
353369
return (await axios.post(url, { headers })).data;

packages/node/src/integrations/hapi/index.ts

+1-7
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ function isResponseObject(response: ResponseObject | Boom): response is Response
2323
return response && (response as ResponseObject).statusCode !== undefined;
2424
}
2525

26-
function isBoomObject(response: ResponseObject | Boom): response is Boom {
27-
return response && (response as Boom).isBoom !== undefined;
28-
}
29-
3026
function isErrorEvent(event: RequestEvent): event is RequestEvent {
3127
return event && (event as RequestEvent).error !== undefined;
3228
}
@@ -54,9 +50,7 @@ export const hapiErrorPlugin = {
5450
const activeSpan = getActiveSpan();
5551
const rootSpan = activeSpan && getRootSpan(activeSpan);
5652

57-
if (request.response && isBoomObject(request.response)) {
58-
sendErrorToSentry(request.response);
59-
} else if (isErrorEvent(event)) {
53+
if (isErrorEvent(event)) {
6054
sendErrorToSentry(event.error);
6155
}
6256

0 commit comments

Comments
 (0)