From a54cdb3ba6554565d70be0d6626be1d6ea6d0258 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Tue, 14 May 2024 09:28:05 +0200 Subject: [PATCH 1/2] test(node): Add test to show how re-init works --- .../suites/express/multiple-init/server.ts | 60 +++++++++++++++++++ .../suites/express/multiple-init/test.ts | 60 +++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 dev-packages/node-integration-tests/suites/express/multiple-init/server.ts create mode 100644 dev-packages/node-integration-tests/suites/express/multiple-init/test.ts diff --git a/dev-packages/node-integration-tests/suites/express/multiple-init/server.ts b/dev-packages/node-integration-tests/suites/express/multiple-init/server.ts new file mode 100644 index 000000000000..aade87fe3bcf --- /dev/null +++ b/dev-packages/node-integration-tests/suites/express/multiple-init/server.ts @@ -0,0 +1,60 @@ +import { loggingTransport } from '@sentry-internal/node-integration-tests'; +import * as Sentry from '@sentry/node'; + +Sentry.init({ + // No dsn, means client is disabled + // dsn: 'https://public@dsn.ingest.sentry.io/1337', + release: '1.0', + transport: loggingTransport, +}); + +// We add http integration to ensure request isolation etc. works +const initialClient = Sentry.getClient(); +initialClient?.addIntegration(Sentry.httpIntegration()); + +// Store this so we can update the client later +const initialCurrentScope = Sentry.getCurrentScope(); + +import { startExpressServerAndSendPortToRunner } from '@sentry-internal/node-integration-tests'; +import express from 'express'; + +const app = express(); + +Sentry.setTag('global', 'tag'); + +app.get('/test/no-init', (_req, res) => { + Sentry.addBreadcrumb({ message: 'no init breadcrumb' }); + Sentry.setTag('no-init', 'tag'); + + res.send({}); +}); + +app.get('/test/init', (_req, res) => { + // Call init again, but with DSN + Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + release: '1.0', + transport: loggingTransport, + }); + // Set this on initial scope, to ensure it can be inherited + initialCurrentScope.setClient(Sentry.getClient()!); + + Sentry.addBreadcrumb({ message: 'init breadcrumb' }); + Sentry.setTag('init', 'tag'); + + res.send({}); +}); + +app.get('/test/error/:id', (req, res) => { + const id = req.params.id; + Sentry.addBreadcrumb({ message: `error breadcrumb ${id}` }); + Sentry.setTag('error', id); + + Sentry.captureException(new Error(`This is an exception ${id}`)); + + res.send({}); +}); + +Sentry.setupExpressErrorHandler(app); + +startExpressServerAndSendPortToRunner(app); diff --git a/dev-packages/node-integration-tests/suites/express/multiple-init/test.ts b/dev-packages/node-integration-tests/suites/express/multiple-init/test.ts new file mode 100644 index 000000000000..1d3cbb64711d --- /dev/null +++ b/dev-packages/node-integration-tests/suites/express/multiple-init/test.ts @@ -0,0 +1,60 @@ +import { cleanupChildProcesses, createRunner } from '../../../utils/runner'; + +afterAll(() => { + cleanupChildProcesses(); +}); + +test('allows to call init multiple times xxx', done => { + const runner = createRunner(__dirname, 'server.ts') + .ignore('session', 'sessions') + .expect({ + event: { + exception: { + values: [ + { + value: 'This is an exception 2', + }, + ], + }, + breadcrumbs: [ + { + message: 'error breadcrumb 2', + timestamp: expect.any(Number), + }, + ], + tags: { + global: 'tag', + error: '2', + }, + }, + }) + .expect({ + event: { + exception: { + values: [ + { + value: 'This is an exception 3', + }, + ], + }, + breadcrumbs: [ + { + message: 'error breadcrumb 3', + timestamp: expect.any(Number), + }, + ], + tags: { + global: 'tag', + error: '3', + }, + }, + }) + .start(done); + + runner + .makeRequest('get', '/test/no-init') + .then(() => runner.makeRequest('get', '/test/error/1')) + .then(() => runner.makeRequest('get', '/test/init')) + .then(() => runner.makeRequest('get', '/test/error/2')) + .then(() => runner.makeRequest('get', '/test/error/3')); +}); From 512f612b779f8904e565a4ce8064245e778da5e7 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Tue, 14 May 2024 10:29:37 +0200 Subject: [PATCH 2/2] Update dev-packages/node-integration-tests/suites/express/multiple-init/test.ts Co-authored-by: Andrei <168741329+andreiborza@users.noreply.github.com> --- .../node-integration-tests/suites/express/multiple-init/test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/node-integration-tests/suites/express/multiple-init/test.ts b/dev-packages/node-integration-tests/suites/express/multiple-init/test.ts index 1d3cbb64711d..76f630128aa5 100644 --- a/dev-packages/node-integration-tests/suites/express/multiple-init/test.ts +++ b/dev-packages/node-integration-tests/suites/express/multiple-init/test.ts @@ -4,7 +4,7 @@ afterAll(() => { cleanupChildProcesses(); }); -test('allows to call init multiple times xxx', done => { +test('allows to call init multiple times', done => { const runner = createRunner(__dirname, 'server.ts') .ignore('session', 'sessions') .expect({