From a0ddcd9b9e613fc97351527a5c0bbb9347bdf887 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Sat, 3 Oct 2026 15:28:47 +0200 Subject: [PATCH 1/2] test(bun): Port request-body tests to span streaming Co-Authored-By: GPT-6 --- .../suites/request-bodies/index.ts | 2 -- .../suites/request-bodies/test.ts | 30 +++++++++++-------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/dev-packages/bun-integration-tests/suites/request-bodies/index.ts b/dev-packages/bun-integration-tests/suites/request-bodies/index.ts index dbd9ecfd5dd2..fab2418ca66f 100644 --- a/dev-packages/bun-integration-tests/suites/request-bodies/index.ts +++ b/dev-packages/bun-integration-tests/suites/request-bodies/index.ts @@ -7,8 +7,6 @@ const mode = process.env.BODY_MODE; Sentry.init({ dsn: process.env.SENTRY_DSN, tracesSampleRate: 1.0, - // Request bodies are only attached to transaction events, so this suite needs the static trace lifecycle. - traceLifecycle: 'static', ...(mode === 'explicit-small' && { dataCollection: { httpBodies: [] }, integrations: integrations => [ diff --git a/dev-packages/bun-integration-tests/suites/request-bodies/test.ts b/dev-packages/bun-integration-tests/suites/request-bodies/test.ts index 0134022d2b29..24110c49d14a 100644 --- a/dev-packages/bun-integration-tests/suites/request-bodies/test.ts +++ b/dev-packages/bun-integration-tests/suites/request-bodies/test.ts @@ -8,14 +8,16 @@ afterAll(() => { test('captures incoming request bodies by default', async () => { const runner = createRunner(__dirname, 'index.ts') .withMockSentryServer() + .unordered() .expect({ - transaction: transaction => { - expect(transaction.request).toMatchObject({ - method: 'POST', - url: expect.stringContaining('/default'), - query_string: 'source=test', - headers: expect.objectContaining({ 'content-type': 'text/plain' }), - data: 'captured-by-default', + span: container => { + const span = container.items.find(span => span.is_segment); + expect(span?.attributes).toMatchObject({ + 'http.request.method': { value: 'POST', type: 'string' }, + 'url.full': { value: expect.stringContaining('/default'), type: 'string' }, + 'url.query': { value: 'source=test', type: 'string' }, + 'http.request.header.content-type': { value: ['text/plain'], type: 'array' }, + 'http.request.body.data': { value: 'captured-by-default', type: 'string' }, }); }, }) @@ -33,9 +35,11 @@ test('an explicit small size overrides disabled body collection', async () => { const runner = createRunner(__dirname, 'index.ts') .withMockSentryServer() .withEnv({ BODY_MODE: 'explicit-small' }) + .unordered() .expect({ - transaction: transaction => { - expect(transaction.request?.data).toBe(`${'a'.repeat(997)}...`); + span: container => { + const span = container.items.find(span => span.is_segment); + expect(span?.attributes['http.request.body.data']?.value).toBe(`${'a'.repeat(997)}...`); }, }) .start(); @@ -53,10 +57,12 @@ test('an explicit none overrides enabled body collection', async () => { const runner = createRunner(__dirname, 'index.ts') .withMockSentryServer() .withEnv({ BODY_MODE: 'explicit-none' }) + .unordered() .expect({ - transaction: transaction => { - expect(transaction.request?.method).toBe('POST'); - expect(transaction.request?.data).toBeUndefined(); + span: container => { + const span = container.items.find(span => span.is_segment); + expect(span?.attributes['http.request.method']?.value).toBe('POST'); + expect(span?.attributes['http.request.body.data']).toBeUndefined(); }, }) .start(); From 27a2a7a43358c5245f5fbe3b762a2cba7cbd3b2a Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Mon, 5 Oct 2026 09:48:37 +0200 Subject: [PATCH 2/2] test(bun): Make request-body span assertions explicit Co-Authored-By: GPT-6 --- .../suites/request-bodies/test.ts | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/dev-packages/bun-integration-tests/suites/request-bodies/test.ts b/dev-packages/bun-integration-tests/suites/request-bodies/test.ts index 24110c49d14a..f81b2b99b619 100644 --- a/dev-packages/bun-integration-tests/suites/request-bodies/test.ts +++ b/dev-packages/bun-integration-tests/suites/request-bodies/test.ts @@ -8,16 +8,23 @@ afterAll(() => { test('captures incoming request bodies by default', async () => { const runner = createRunner(__dirname, 'index.ts') .withMockSentryServer() - .unordered() .expect({ span: container => { const span = container.items.find(span => span.is_segment); - expect(span?.attributes).toMatchObject({ - 'http.request.method': { value: 'POST', type: 'string' }, - 'url.full': { value: expect.stringContaining('/default'), type: 'string' }, - 'url.query': { value: 'source=test', type: 'string' }, - 'http.request.header.content-type': { value: ['text/plain'], type: 'array' }, - 'http.request.body.data': { value: 'captured-by-default', type: 'string' }, + expect(span).toBeDefined(); + expect(span?.attributes['http.request.method']).toEqual({ value: 'POST', type: 'string' }); + expect(span?.attributes['url.full']).toEqual({ + value: expect.stringContaining('/default'), + type: 'string', + }); + expect(span?.attributes['url.query']).toEqual({ value: 'source=test', type: 'string' }); + expect(span?.attributes['http.request.header.content-type']).toEqual({ + value: ['text/plain'], + type: 'array', + }); + expect(span?.attributes['http.request.body.data']).toEqual({ + value: 'captured-by-default', + type: 'string', }); }, }) @@ -35,10 +42,10 @@ test('an explicit small size overrides disabled body collection', async () => { const runner = createRunner(__dirname, 'index.ts') .withMockSentryServer() .withEnv({ BODY_MODE: 'explicit-small' }) - .unordered() .expect({ span: container => { const span = container.items.find(span => span.is_segment); + expect(span).toBeDefined(); expect(span?.attributes['http.request.body.data']?.value).toBe(`${'a'.repeat(997)}...`); }, }) @@ -57,10 +64,10 @@ test('an explicit none overrides enabled body collection', async () => { const runner = createRunner(__dirname, 'index.ts') .withMockSentryServer() .withEnv({ BODY_MODE: 'explicit-none' }) - .unordered() .expect({ span: container => { const span = container.items.find(span => span.is_segment); + expect(span).toBeDefined(); expect(span?.attributes['http.request.method']?.value).toBe('POST'); expect(span?.attributes['http.request.body.data']).toBeUndefined(); },