From 210cfb7cb5af7237d21e6fac08350db6fbc8fe09 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Wed, 17 Aug 2022 19:05:35 +0100 Subject: [PATCH 1/7] ref(tests): Refactor Node integration tests further. --- .../suites/express/handle-error/test.ts | 4 +- .../baggage-header-assign/test.ts | 24 ++--- .../baggage-header-out-bad-tx-name/test.ts | 4 +- .../sentry-trace/baggage-header-out/test.ts | 4 +- .../test.ts | 8 +- .../baggage-other-vendors/test.ts | 4 +- .../baggage-transaction-name/test.ts | 4 +- .../sentry-trace/trace-header-assign/test.ts | 4 +- .../sentry-trace/trace-header-out/test.ts | 4 +- .../suites/express/tracing/test.ts | 16 +-- .../addBreadcrumb/empty-obj/test.ts | 9 +- .../multiple_breadcrumbs/test.ts | 4 +- .../addBreadcrumb/simple_breadcrumb/test.ts | 6 +- .../captureException/catched-error/test.ts | 7 +- .../captureException/empty-obj/test.ts | 7 +- .../captureException/simple-error/test.ts | 7 +- .../captureMessage/simple_message/test.ts | 7 +- .../captureMessage/with_level/test.ts | 14 +-- .../configureScope/set_properties/test.ts | 7 +- .../setContext/multiple-contexts/test.ts | 9 +- .../non-serializable-context/test.ts | 9 +- .../setContext/simple-context/test.ts | 7 +- .../setExtra/multiple-extras/test.ts | 7 +- .../setExtra/non-serializable-extra/test.ts | 7 +- .../public-api/setExtra/simple-extra/test.ts | 7 +- .../setExtras/consecutive-calls/test.ts | 5 +- .../setExtras/multiple-extras/test.ts | 5 +- .../public-api/setTag/with-primitives/test.ts | 7 +- .../setTags/with-primitives/test.ts | 7 +- .../public-api/setUser/unset_user/test.ts | 12 +-- .../public-api/setUser/update_user/test.ts | 6 +- .../startTransaction/basic-usage/test.ts | 4 +- .../with-nested-spans/test.ts | 2 +- .../withScope/nested-scopes/test.ts | 14 +-- .../crashed-session-aggregate/test.ts | 29 +++--- .../errored-session-aggregate/test.ts | 15 ++- .../sessions/exited-session-aggregate/test.ts | 11 ++- .../suites/tracing/apollo-graphql/test.ts | 2 +- .../tracing/auto-instrument/mongodb/test.ts | 2 +- .../tracing/auto-instrument/mysql/test.ts | 2 +- .../suites/tracing/auto-instrument/pg/test.ts | 2 +- .../suites/tracing/prisma-orm/test.ts | 2 +- .../tracing/tracePropagationTargets/test.ts | 6 +- .../node-integration-tests/utils/index.ts | 97 ++++++++----------- 44 files changed, 196 insertions(+), 224 deletions(-) diff --git a/packages/node-integration-tests/suites/express/handle-error/test.ts b/packages/node-integration-tests/suites/express/handle-error/test.ts index 62380c2d6285..47b74368933c 100644 --- a/packages/node-integration-tests/suites/express/handle-error/test.ts +++ b/packages/node-integration-tests/suites/express/handle-error/test.ts @@ -1,8 +1,8 @@ import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../utils/index'; test('should capture and send Express controller error.', async () => { - const { url, server, scope } = await runServer(__dirname, `${__dirname}/server.ts`); - const event = await getEnvelopeRequest({ url: `${url}/express`, server, scope }); + const { url, server } = await runServer(__dirname, `${__dirname}/server.ts`); + const event = await getEnvelopeRequest({ url: `${url}/express`, server }); expect((event[2] as any).exception.values[0].stacktrace.frames.length).toBeGreaterThan(0); diff --git a/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-assign/test.ts b/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-assign/test.ts index 1f1cf4f84b61..ad4a33e94e25 100644 --- a/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-assign/test.ts +++ b/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-assign/test.ts @@ -4,10 +4,10 @@ import { getAPIResponse, runServer } from '../../../../utils/index'; import { TestAPIResponse } from '../server'; test('Should not overwrite baggage if the incoming request already has Sentry baggage data.', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); const response = (await getAPIResponse( - { url: `${url}/express`, server, scope }, + { url: `${url}/express`, server }, { baggage: 'sentry-release=2.0.0,sentry-environment=myEnv', }, @@ -23,10 +23,10 @@ test('Should not overwrite baggage if the incoming request already has Sentry ba }); test('Should propagate sentry trace baggage data from an incoming to an outgoing request.', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); const response = (await getAPIResponse( - { url: `${url}/express`, server, scope }, + { url: `${url}/express`, server }, { 'sentry-trace': '', baggage: 'sentry-release=2.0.0,sentry-environment=myEnv,dogs=great', @@ -43,10 +43,10 @@ test('Should propagate sentry trace baggage data from an incoming to an outgoing }); test('Should propagate empty baggage if sentry-trace header is present in incoming request but no baggage header', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); const response = (await getAPIResponse( - { url: `${url}/express`, server, scope }, + { url: `${url}/express`, server }, { 'sentry-trace': '', }, @@ -62,10 +62,10 @@ test('Should propagate empty baggage if sentry-trace header is present in incomi }); test('Should propagate empty sentry and ignore original 3rd party baggage entries if sentry-trace header is present', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); const response = (await getAPIResponse( - { url: `${url}/express`, server, scope }, + { url: `${url}/express`, server }, { 'sentry-trace': '', baggage: 'foo=bar', @@ -82,9 +82,9 @@ test('Should propagate empty sentry and ignore original 3rd party baggage entrie }); test('Should populate and propagate sentry baggage if sentry-trace header does not exist', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); - const response = (await getAPIResponse({ url: `${url}/express`, server, scope }, {})) as TestAPIResponse; + const response = (await getAPIResponse({ url: `${url}/express`, server }, {})) as TestAPIResponse; expect(response).toBeDefined(); expect(response).toMatchObject({ @@ -99,10 +99,10 @@ test('Should populate and propagate sentry baggage if sentry-trace header does n }); test('Should populate Sentry and ignore 3rd party content if sentry-trace header does not exist', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); const response = (await getAPIResponse( - { url: `${url}/express`, server, scope }, + { url: `${url}/express`, server }, { baggage: 'foo=bar,bar=baz', }, diff --git a/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out-bad-tx-name/test.ts b/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out-bad-tx-name/test.ts index 00000b7f9f35..0db548c8c189 100644 --- a/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out-bad-tx-name/test.ts +++ b/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out-bad-tx-name/test.ts @@ -4,9 +4,9 @@ import { getAPIResponse, runServer } from '../../../../utils/index'; import { TestAPIResponse } from '../server'; test('Does not include transaction name if transaction source is not set', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); - const response = (await getAPIResponse({ url: `${url}/express`, server, scope })) as TestAPIResponse; + const response = (await getAPIResponse({ url: `${url}/express`, server })) as TestAPIResponse; const baggageString = response.test_data.baggage; expect(response).toBeDefined(); diff --git a/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out/test.ts b/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out/test.ts index b7c8acf0f6ba..f3932a8ec885 100644 --- a/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out/test.ts +++ b/packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out/test.ts @@ -4,9 +4,9 @@ import { getAPIResponse, runServer } from '../../../../utils/index'; import { TestAPIResponse } from '../server'; test('should attach a `baggage` header to an outgoing request.', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); - const response = (await getAPIResponse({ url: `${url}/express`, server, scope })) as TestAPIResponse; + const response = (await getAPIResponse({ url: `${url}/express`, server })) as TestAPIResponse; expect(response).toBeDefined(); expect(response).toMatchObject({ diff --git a/packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors-with-sentry-entries/test.ts b/packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors-with-sentry-entries/test.ts index 39d10c95ea65..e57b738e43a3 100644 --- a/packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors-with-sentry-entries/test.ts +++ b/packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors-with-sentry-entries/test.ts @@ -4,10 +4,10 @@ import { getAPIResponse, runServer } from '../../../../utils/index'; import { TestAPIResponse } from '../server'; test('should ignore sentry-values in `baggage` header of a third party vendor and overwrite them with incoming DSC', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); const response = (await getAPIResponse( - { url: `${url}/express`, server, scope }, + { url: `${url}/express`, server }, { 'sentry-trace': '', baggage: 'sentry-release=2.1.0,sentry-environment=myEnv', @@ -24,9 +24,9 @@ test('should ignore sentry-values in `baggage` header of a third party vendor an }); test('should ignore sentry-values in `baggage` header of a third party vendor and overwrite them with new DSC', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); - const response = (await getAPIResponse({ url: `${url}/express`, server, scope }, {})) as TestAPIResponse; + const response = (await getAPIResponse({ url: `${url}/express`, server }, {})) as TestAPIResponse; expect(response).toBeDefined(); expect(response).toMatchObject({ diff --git a/packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors/test.ts b/packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors/test.ts index 3f00344dab1a..f52b90035c4d 100644 --- a/packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors/test.ts +++ b/packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors/test.ts @@ -4,10 +4,10 @@ import { getAPIResponse, runServer } from '../../../../utils/index'; import { TestAPIResponse } from '../server'; test('should merge `baggage` header of a third party vendor with the Sentry DSC baggage items', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); const response = (await getAPIResponse( - { url: `${url}/express`, server, scope }, + { url: `${url}/express`, server }, { 'sentry-trace': '', baggage: 'sentry-release=2.0.0,sentry-environment=myEnv', diff --git a/packages/node-integration-tests/suites/express/sentry-trace/baggage-transaction-name/test.ts b/packages/node-integration-tests/suites/express/sentry-trace/baggage-transaction-name/test.ts index fd265232a575..80850af04d27 100644 --- a/packages/node-integration-tests/suites/express/sentry-trace/baggage-transaction-name/test.ts +++ b/packages/node-integration-tests/suites/express/sentry-trace/baggage-transaction-name/test.ts @@ -4,9 +4,9 @@ import { getAPIResponse, runServer } from '../../../../utils/index'; import { TestAPIResponse } from '../server'; test('Includes transaction in baggage if the transaction name is parameterized', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '.')}/server.ts`); - const response = (await getAPIResponse({ url: `${url}/express`, server, scope })) as TestAPIResponse; + const response = (await getAPIResponse({ url: `${url}/express`, server })) as TestAPIResponse; expect(response).toBeDefined(); expect(response).toMatchObject({ diff --git a/packages/node-integration-tests/suites/express/sentry-trace/trace-header-assign/test.ts b/packages/node-integration-tests/suites/express/sentry-trace/trace-header-assign/test.ts index ebd3c850382c..4d374f41c4b7 100644 --- a/packages/node-integration-tests/suites/express/sentry-trace/trace-header-assign/test.ts +++ b/packages/node-integration-tests/suites/express/sentry-trace/trace-header-assign/test.ts @@ -5,10 +5,10 @@ import { getAPIResponse, runServer } from '../../../../utils/index'; import { TestAPIResponse } from '../server'; test('Should assign `sentry-trace` header which sets parent trace id of an outgoing request.', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); const response = (await getAPIResponse( - { url: `${url}/express`, server, scope }, + { url: `${url}/express`, server }, { 'sentry-trace': '12312012123120121231201212312012-1121201211212012-0', }, diff --git a/packages/node-integration-tests/suites/express/sentry-trace/trace-header-out/test.ts b/packages/node-integration-tests/suites/express/sentry-trace/trace-header-out/test.ts index 3ad850e9e029..983fdc59095a 100644 --- a/packages/node-integration-tests/suites/express/sentry-trace/trace-header-out/test.ts +++ b/packages/node-integration-tests/suites/express/sentry-trace/trace-header-out/test.ts @@ -5,9 +5,9 @@ import { getAPIResponse, runServer } from '../../../../utils/index'; import { TestAPIResponse } from '../server'; test('should attach a `sentry-trace` header to an outgoing request.', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); - const response = (await getAPIResponse({ url: `${url}/express`, server, scope })) as TestAPIResponse; + const response = (await getAPIResponse({ url: `${url}/express`, server })) as TestAPIResponse; expect(response).toBeDefined(); expect(response).toMatchObject({ diff --git a/packages/node-integration-tests/suites/express/tracing/test.ts b/packages/node-integration-tests/suites/express/tracing/test.ts index 316dc87405b8..e48310c34660 100644 --- a/packages/node-integration-tests/suites/express/tracing/test.ts +++ b/packages/node-integration-tests/suites/express/tracing/test.ts @@ -1,8 +1,8 @@ import { assertSentryTransaction, getEnvelopeRequest, runServer } from '../../../utils/index'; test('should create and send transactions for Express routes and spans for middlewares.', async () => { - const { url, server, scope } = await runServer(__dirname, `${__dirname}/server.ts`); - const envelope = await getEnvelopeRequest({ url: `${url}/express`, server, scope }); + const { url, server } = await runServer(__dirname, `${__dirname}/server.ts`); + const envelope = await getEnvelopeRequest({ url: `${url}/express`, server }, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); @@ -29,8 +29,8 @@ test('should create and send transactions for Express routes and spans for middl }); test('should set a correct transaction name for routes specified in RegEx', async () => { - const { url, server, scope } = await runServer(__dirname, `${__dirname}/server.ts`); - const envelope = await getEnvelopeRequest({ url: `${url}/regex`, server, scope }); + const { url, server } = await runServer(__dirname, `${__dirname}/server.ts`); + const envelope = await getEnvelopeRequest({ url: `${url}/regex`, server }, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); @@ -57,8 +57,8 @@ test('should set a correct transaction name for routes specified in RegEx', asyn test.each([['array1'], ['array5']])( 'should set a correct transaction name for routes consisting of arrays of routes', async segment => { - const { url, server, scope } = await runServer(__dirname, `${__dirname}/server.ts`); - const envelope = await getEnvelopeRequest({ url: `${url}/${segment}`, server, scope }); + const { url, server } = await runServer(__dirname, `${__dirname}/server.ts`); + const envelope = await getEnvelopeRequest({ url: `${url}/${segment}`, server }, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); @@ -93,8 +93,8 @@ test.each([ ['arr/requiredPath/optionalPath/'], ['arr/requiredPath/optionalPath/lastParam'], ])('should handle more complex regexes in route arrays correctly', async segment => { - const { url, server, scope } = await runServer(__dirname, `${__dirname}/server.ts`); - const envelope = await getEnvelopeRequest({ url: `${url}/${segment}`, server, scope }); + const { url, server } = await runServer(__dirname, `${__dirname}/server.ts`); + const envelope = await getEnvelopeRequest({ url: `${url}/${segment}`, server }, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); diff --git a/packages/node-integration-tests/suites/public-api/addBreadcrumb/empty-obj/test.ts b/packages/node-integration-tests/suites/public-api/addBreadcrumb/empty-obj/test.ts index 4b12eb0ef4d4..d8c95360f703 100644 --- a/packages/node-integration-tests/suites/public-api/addBreadcrumb/empty-obj/test.ts +++ b/packages/node-integration-tests/suites/public-api/addBreadcrumb/empty-obj/test.ts @@ -1,13 +1,12 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should add an empty breadcrumb, when an empty object is given', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const envelope = await getEnvelopeRequest(config); - expect(errorEnvelope).toHaveLength(3); + expect(envelope).toHaveLength(3); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(envelope[2], { message: 'test-empty-obj', }); }); diff --git a/packages/node-integration-tests/suites/public-api/addBreadcrumb/multiple_breadcrumbs/test.ts b/packages/node-integration-tests/suites/public-api/addBreadcrumb/multiple_breadcrumbs/test.ts index 95b150153e07..8dd0779ea8f9 100644 --- a/packages/node-integration-tests/suites/public-api/addBreadcrumb/multiple_breadcrumbs/test.ts +++ b/packages/node-integration-tests/suites/public-api/addBreadcrumb/multiple_breadcrumbs/test.ts @@ -2,9 +2,9 @@ import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../ test('should add multiple breadcrumbs', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); + const events = await getMultipleEnvelopeRequest(config, { count: 1 }); - assertSentryEvent(envelopes[1][2], { + assertSentryEvent(events[0][2], { message: 'test_multi_breadcrumbs', breadcrumbs: [ { diff --git a/packages/node-integration-tests/suites/public-api/addBreadcrumb/simple_breadcrumb/test.ts b/packages/node-integration-tests/suites/public-api/addBreadcrumb/simple_breadcrumb/test.ts index d207f36d452d..146d9052c24a 100644 --- a/packages/node-integration-tests/suites/public-api/addBreadcrumb/simple_breadcrumb/test.ts +++ b/packages/node-integration-tests/suites/public-api/addBreadcrumb/simple_breadcrumb/test.ts @@ -1,10 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should add a simple breadcrumb', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); + const event = await getEnvelopeRequest(config); - assertSentryEvent(envelopes[1][2], { + assertSentryEvent(event[2], { message: 'test_simple', breadcrumbs: [ { diff --git a/packages/node-integration-tests/suites/public-api/captureException/catched-error/test.ts b/packages/node-integration-tests/suites/public-api/captureException/catched-error/test.ts index 4d42c8701cee..02a4773181eb 100644 --- a/packages/node-integration-tests/suites/public-api/captureException/catched-error/test.ts +++ b/packages/node-integration-tests/suites/public-api/captureException/catched-error/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should work inside catch block', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(event[2], { exception: { values: [ { diff --git a/packages/node-integration-tests/suites/public-api/captureException/empty-obj/test.ts b/packages/node-integration-tests/suites/public-api/captureException/empty-obj/test.ts index 5e08dc6152cd..f11bbaad9527 100644 --- a/packages/node-integration-tests/suites/public-api/captureException/empty-obj/test.ts +++ b/packages/node-integration-tests/suites/public-api/captureException/empty-obj/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should capture an empty object', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(event[2], { exception: { values: [ { diff --git a/packages/node-integration-tests/suites/public-api/captureException/simple-error/test.ts b/packages/node-integration-tests/suites/public-api/captureException/simple-error/test.ts index 69c517e0538f..df373fa0e441 100644 --- a/packages/node-integration-tests/suites/public-api/captureException/simple-error/test.ts +++ b/packages/node-integration-tests/suites/public-api/captureException/simple-error/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should capture a simple error with message', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const envelope = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(envelope[2], { exception: { values: [ { diff --git a/packages/node-integration-tests/suites/public-api/captureMessage/simple_message/test.ts b/packages/node-integration-tests/suites/public-api/captureMessage/simple_message/test.ts index fecbfb81aa60..a718e083a26d 100644 --- a/packages/node-integration-tests/suites/public-api/captureMessage/simple_message/test.ts +++ b/packages/node-integration-tests/suites/public-api/captureMessage/simple_message/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should capture a simple message string', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(event[2], { message: 'Message', level: 'info', }); diff --git a/packages/node-integration-tests/suites/public-api/captureMessage/with_level/test.ts b/packages/node-integration-tests/suites/public-api/captureMessage/with_level/test.ts index 1d27c28c4f7a..ff327c0c866d 100644 --- a/packages/node-integration-tests/suites/public-api/captureMessage/with_level/test.ts +++ b/packages/node-integration-tests/suites/public-api/captureMessage/with_level/test.ts @@ -2,34 +2,34 @@ import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../ test('should capture with different severity levels', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 12 }); + const events = await getMultipleEnvelopeRequest(config, { count: 6 }); - assertSentryEvent(envelopes[1][2], { + assertSentryEvent(events[0][2], { message: 'debug_message', level: 'debug', }); - assertSentryEvent(envelopes[3][2], { + assertSentryEvent(events[1][2], { message: 'info_message', level: 'info', }); - assertSentryEvent(envelopes[5][2], { + assertSentryEvent(events[2][2], { message: 'warning_message', level: 'warning', }); - assertSentryEvent(envelopes[7][2], { + assertSentryEvent(events[3][2], { message: 'error_message', level: 'error', }); - assertSentryEvent(envelopes[9][2], { + assertSentryEvent(events[4][2], { message: 'fatal_message', level: 'fatal', }); - assertSentryEvent(envelopes[11][2], { + assertSentryEvent(events[5][2], { message: 'log_message', level: 'log', }); diff --git a/packages/node-integration-tests/suites/public-api/configureScope/set_properties/test.ts b/packages/node-integration-tests/suites/public-api/configureScope/set_properties/test.ts index 9d44c377ccfc..353c7ff2a951 100644 --- a/packages/node-integration-tests/suites/public-api/configureScope/set_properties/test.ts +++ b/packages/node-integration-tests/suites/public-api/configureScope/set_properties/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should set different properties of a scope', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const envelope = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(envelope[2], { message: 'configured_scope', tags: { foo: 'bar', diff --git a/packages/node-integration-tests/suites/public-api/setContext/multiple-contexts/test.ts b/packages/node-integration-tests/suites/public-api/setContext/multiple-contexts/test.ts index d025e850999e..271d47c74238 100644 --- a/packages/node-integration-tests/suites/public-api/setContext/multiple-contexts/test.ts +++ b/packages/node-integration-tests/suites/public-api/setContext/multiple-contexts/test.ts @@ -1,13 +1,12 @@ import { Event } from '@sentry/node'; -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should record multiple contexts', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const envelope = await getEnvelopeRequest(config, { count: 1 }); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(envelope[2], { message: 'multiple_contexts', contexts: { context_1: { @@ -18,5 +17,5 @@ test('should record multiple contexts', async () => { }, }); - expect((errorEnvelope[2] as Event).contexts?.context_3).not.toBeDefined(); + expect((envelope[2] as Event).contexts?.context_3).not.toBeDefined(); }); diff --git a/packages/node-integration-tests/suites/public-api/setContext/non-serializable-context/test.ts b/packages/node-integration-tests/suites/public-api/setContext/non-serializable-context/test.ts index f82052078bb5..15e1b9456e8d 100644 --- a/packages/node-integration-tests/suites/public-api/setContext/non-serializable-context/test.ts +++ b/packages/node-integration-tests/suites/public-api/setContext/non-serializable-context/test.ts @@ -1,16 +1,15 @@ import { Event } from '@sentry/node'; -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should normalize non-serializable context', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(event[2], { message: 'non_serializable', contexts: {}, }); - expect((errorEnvelope[2] as Event).contexts?.context_3).not.toBeDefined(); + expect((event as Event).contexts?.context_3).not.toBeDefined(); }); diff --git a/packages/node-integration-tests/suites/public-api/setContext/simple-context/test.ts b/packages/node-integration-tests/suites/public-api/setContext/simple-context/test.ts index 60ff6a7113a4..ea787fbea7c7 100644 --- a/packages/node-integration-tests/suites/public-api/setContext/simple-context/test.ts +++ b/packages/node-integration-tests/suites/public-api/setContext/simple-context/test.ts @@ -4,10 +4,9 @@ import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../ test('should set a simple context', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const envelopes = await getMultipleEnvelopeRequest(config, { count: 1 }); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(envelopes[0][2], { message: 'simple_context_object', contexts: { foo: { @@ -16,5 +15,5 @@ test('should set a simple context', async () => { }, }); - expect((errorEnvelope[2] as Event).contexts?.context_3).not.toBeDefined(); + expect((envelopes[0][2] as Event).contexts?.context_3).not.toBeDefined(); }); diff --git a/packages/node-integration-tests/suites/public-api/setExtra/multiple-extras/test.ts b/packages/node-integration-tests/suites/public-api/setExtra/multiple-extras/test.ts index 0e4f98693a31..b0258e87abb2 100644 --- a/packages/node-integration-tests/suites/public-api/setExtra/multiple-extras/test.ts +++ b/packages/node-integration-tests/suites/public-api/setExtra/multiple-extras/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should record multiple extras of different types', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(event[2], { message: 'multiple_extras', extra: { extra_1: { foo: 'bar', baz: { qux: 'quux' } }, diff --git a/packages/node-integration-tests/suites/public-api/setExtra/non-serializable-extra/test.ts b/packages/node-integration-tests/suites/public-api/setExtra/non-serializable-extra/test.ts index ba6c3d9200b3..5e81a22d8722 100644 --- a/packages/node-integration-tests/suites/public-api/setExtra/non-serializable-extra/test.ts +++ b/packages/node-integration-tests/suites/public-api/setExtra/non-serializable-extra/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should normalize non-serializable extra', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(event[2], { message: 'non_serializable', extra: {}, }); diff --git a/packages/node-integration-tests/suites/public-api/setExtra/simple-extra/test.ts b/packages/node-integration-tests/suites/public-api/setExtra/simple-extra/test.ts index 3897ee6fad7e..59fb5f8a6867 100644 --- a/packages/node-integration-tests/suites/public-api/setExtra/simple-extra/test.ts +++ b/packages/node-integration-tests/suites/public-api/setExtra/simple-extra/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should set a simple extra', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(event[2], { message: 'simple_extra', extra: { foo: { diff --git a/packages/node-integration-tests/suites/public-api/setExtras/consecutive-calls/test.ts b/packages/node-integration-tests/suites/public-api/setExtras/consecutive-calls/test.ts index 9a33b920f3ea..277361de82bb 100644 --- a/packages/node-integration-tests/suites/public-api/setExtras/consecutive-calls/test.ts +++ b/packages/node-integration-tests/suites/public-api/setExtras/consecutive-calls/test.ts @@ -2,10 +2,9 @@ import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../ test('should set extras from multiple consecutive calls', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const envelopes = await getMultipleEnvelopeRequest(config, { count: 1 }); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(envelopes[0][2], { message: 'consecutive_calls', extra: { extra: [], Infinity: 2, null: 0, obj: { foo: ['bar', 'baz', 1] } }, }); diff --git a/packages/node-integration-tests/suites/public-api/setExtras/multiple-extras/test.ts b/packages/node-integration-tests/suites/public-api/setExtras/multiple-extras/test.ts index 104aa543ebd7..23b73c221fc3 100644 --- a/packages/node-integration-tests/suites/public-api/setExtras/multiple-extras/test.ts +++ b/packages/node-integration-tests/suites/public-api/setExtras/multiple-extras/test.ts @@ -2,10 +2,9 @@ import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../ test('should record an extras object', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const errorEnvelope = envelopes[1]; + const events = await getMultipleEnvelopeRequest(config, { count: 1 }); - assertSentryEvent(errorEnvelope[2], { + assertSentryEvent(events[0][2], { message: 'multiple_extras', extra: { extra_1: [1, ['foo'], 'bar'], diff --git a/packages/node-integration-tests/suites/public-api/setTag/with-primitives/test.ts b/packages/node-integration-tests/suites/public-api/setTag/with-primitives/test.ts index 0a7a0be1822f..bae5b8b4b96d 100644 --- a/packages/node-integration-tests/suites/public-api/setTag/with-primitives/test.ts +++ b/packages/node-integration-tests/suites/public-api/setTag/with-primitives/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should set primitive tags', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const envelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(envelope[2], { + assertSentryEvent(event[2], { message: 'primitive_tags', tags: { tag_1: 'foo', diff --git a/packages/node-integration-tests/suites/public-api/setTags/with-primitives/test.ts b/packages/node-integration-tests/suites/public-api/setTags/with-primitives/test.ts index 0a7a0be1822f..bae5b8b4b96d 100644 --- a/packages/node-integration-tests/suites/public-api/setTags/with-primitives/test.ts +++ b/packages/node-integration-tests/suites/public-api/setTags/with-primitives/test.ts @@ -1,11 +1,10 @@ -import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../../../utils'; +import { assertSentryEvent, getEnvelopeRequest, runServer } from '../../../../utils'; test('should set primitive tags', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - const envelope = envelopes[1]; + const event = await getEnvelopeRequest(config); - assertSentryEvent(envelope[2], { + assertSentryEvent(event[2], { message: 'primitive_tags', tags: { tag_1: 'foo', diff --git a/packages/node-integration-tests/suites/public-api/setUser/unset_user/test.ts b/packages/node-integration-tests/suites/public-api/setUser/unset_user/test.ts index ba11a7552a4e..bc552e0951ad 100644 --- a/packages/node-integration-tests/suites/public-api/setUser/unset_user/test.ts +++ b/packages/node-integration-tests/suites/public-api/setUser/unset_user/test.ts @@ -4,15 +4,15 @@ import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../ test('should unset user', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 6 }); + const events = await getMultipleEnvelopeRequest(config, { count: 3 }); - assertSentryEvent(envelopes[1][2], { + assertSentryEvent(events[0][2], { message: 'no_user', }); - expect((envelopes[0][2] as Event).user).not.toBeDefined(); + expect((events[0][2] as Event).user).not.toBeDefined(); - assertSentryEvent(envelopes[3][2], { + assertSentryEvent(events[1][2], { message: 'user', user: { id: 'foo', @@ -21,9 +21,9 @@ test('should unset user', async () => { }, }); - assertSentryEvent(envelopes[5][2], { + assertSentryEvent(events[2][2], { message: 'unset_user', }); - expect((envelopes[2][2] as Event).user).not.toBeDefined(); + expect((events[2][2] as Event).user).not.toBeDefined(); }); diff --git a/packages/node-integration-tests/suites/public-api/setUser/update_user/test.ts b/packages/node-integration-tests/suites/public-api/setUser/update_user/test.ts index ed2cc620c949..442b1982dd2a 100644 --- a/packages/node-integration-tests/suites/public-api/setUser/update_user/test.ts +++ b/packages/node-integration-tests/suites/public-api/setUser/update_user/test.ts @@ -2,9 +2,9 @@ import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../ test('should update user', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 4 }); + const envelopes = await getMultipleEnvelopeRequest(config, { count: 2 }); - assertSentryEvent(envelopes[1][2], { + assertSentryEvent(envelopes[0][2], { message: 'first_user', user: { id: 'foo', @@ -12,7 +12,7 @@ test('should update user', async () => { }, }); - assertSentryEvent(envelopes[3][2], { + assertSentryEvent(envelopes[1][2], { message: 'second_user', user: { id: 'baz', diff --git a/packages/node-integration-tests/suites/public-api/startTransaction/basic-usage/test.ts b/packages/node-integration-tests/suites/public-api/startTransaction/basic-usage/test.ts index f254afcee734..1583a09e3e4a 100644 --- a/packages/node-integration-tests/suites/public-api/startTransaction/basic-usage/test.ts +++ b/packages/node-integration-tests/suites/public-api/startTransaction/basic-usage/test.ts @@ -2,9 +2,7 @@ import { assertSentryTransaction, getEnvelopeRequest, runServer } from '../../.. test('should send a manually started transaction when @sentry/tracing is imported using unnamed import.', async () => { const config = await runServer(__dirname); - const envelope = await getEnvelopeRequest(config); - - expect(envelope).toHaveLength(3); + const envelope = await getEnvelopeRequest(config, { envelopeType: 'transaction' }); assertSentryTransaction(envelope[2], { transaction: 'test_transaction_1', diff --git a/packages/node-integration-tests/suites/public-api/startTransaction/with-nested-spans/test.ts b/packages/node-integration-tests/suites/public-api/startTransaction/with-nested-spans/test.ts index eb1070b5cddc..84712ef3dbc3 100644 --- a/packages/node-integration-tests/suites/public-api/startTransaction/with-nested-spans/test.ts +++ b/packages/node-integration-tests/suites/public-api/startTransaction/with-nested-spans/test.ts @@ -2,7 +2,7 @@ import { assertSentryTransaction, getEnvelopeRequest, runServer } from '../../.. test('should report finished spans as children of the root transaction.', async () => { const config = await runServer(__dirname); - const envelope = await getEnvelopeRequest(config); + const envelope = await getEnvelopeRequest(config, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); diff --git a/packages/node-integration-tests/suites/public-api/withScope/nested-scopes/test.ts b/packages/node-integration-tests/suites/public-api/withScope/nested-scopes/test.ts index 28a4b106d554..8d12c495c203 100644 --- a/packages/node-integration-tests/suites/public-api/withScope/nested-scopes/test.ts +++ b/packages/node-integration-tests/suites/public-api/withScope/nested-scopes/test.ts @@ -4,16 +4,16 @@ import { assertSentryEvent, getMultipleEnvelopeRequest, runServer } from '../../ test('should allow nested scoping', async () => { const config = await runServer(__dirname); - const envelopes = await getMultipleEnvelopeRequest(config, { count: 10 }); + const events = await getMultipleEnvelopeRequest(config, { count: 5 }); - assertSentryEvent(envelopes[1][2], { + assertSentryEvent(events[0][2], { message: 'root_before', user: { id: 'qux', }, }); - assertSentryEvent(envelopes[3][2], { + assertSentryEvent(events[1][2], { message: 'outer_before', user: { id: 'qux', @@ -23,7 +23,7 @@ test('should allow nested scoping', async () => { }, }); - assertSentryEvent(envelopes[5][2], { + assertSentryEvent(events[2][2], { message: 'inner', tags: { foo: false, @@ -31,9 +31,9 @@ test('should allow nested scoping', async () => { }, }); - expect((envelopes[4][2] as Event).user).toBeUndefined(); + expect((events[2][2] as Event).user).toBeUndefined(); - assertSentryEvent(envelopes[7][2], { + assertSentryEvent(events[3][2], { message: 'outer_after', user: { id: 'baz', @@ -43,7 +43,7 @@ test('should allow nested scoping', async () => { }, }); - assertSentryEvent(envelopes[9][2], { + assertSentryEvent(events[4][2], { message: 'root_after', user: { id: 'qux', diff --git a/packages/node-integration-tests/suites/sessions/crashed-session-aggregate/test.ts b/packages/node-integration-tests/suites/sessions/crashed-session-aggregate/test.ts index 0dbe7ae62dac..742e13d4d87d 100644 --- a/packages/node-integration-tests/suites/sessions/crashed-session-aggregate/test.ts +++ b/packages/node-integration-tests/suites/sessions/crashed-session-aggregate/test.ts @@ -1,21 +1,28 @@ +import nock from 'nock'; import path from 'path'; import { getMultipleEnvelopeRequest, runServer } from '../../../utils'; test('should aggregate successful and crashed sessions', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); - - const envelopes = await Promise.race([ - getMultipleEnvelopeRequest({ url: `${url}/success`, server, scope }, { count: 2, endServer: false }), - getMultipleEnvelopeRequest({ url: `${url}/error_unhandled`, server, scope }, { count: 2, endServer: false }), - getMultipleEnvelopeRequest({ url: `${url}/success_next`, server, scope }, { count: 2, endServer: false }), - ]); - - scope.persist(false); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + + const envelope = ( + await Promise.race([ + getMultipleEnvelopeRequest({ url: `${url}/success`, server }, { endServer: false, envelopeType: 'sessions' }), + getMultipleEnvelopeRequest( + { url: `${url}/error_unhandled`, server }, + { endServer: false, envelopeType: 'sessions' }, + ), + getMultipleEnvelopeRequest( + { url: `${url}/success_next`, server }, + { endServer: false, envelopeType: 'sessions' }, + ), + ]) + )[0]; + + nock.cleanAll(); server.close(); - const envelope = envelopes[1]; - expect(envelope[0]).toMatchObject({ sent_at: expect.any(String), sdk: { diff --git a/packages/node-integration-tests/suites/sessions/errored-session-aggregate/test.ts b/packages/node-integration-tests/suites/sessions/errored-session-aggregate/test.ts index ab48b364ab7d..4a04ba331108 100644 --- a/packages/node-integration-tests/suites/sessions/errored-session-aggregate/test.ts +++ b/packages/node-integration-tests/suites/sessions/errored-session-aggregate/test.ts @@ -1,21 +1,18 @@ import path from 'path'; -import { getMultipleEnvelopeRequest, runServer } from '../../../utils'; +import { getEnvelopeRequest, runServer } from '../../../utils'; test('should aggregate successful, crashed and erroneous sessions', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); - const envelopes = await Promise.race([ - getMultipleEnvelopeRequest({ url: `${url}/success`, server, scope }, { count: 3, endServer: false }), - getMultipleEnvelopeRequest({ url: `${url}/error_handled`, server, scope }, { count: 3, endServer: false }), - getMultipleEnvelopeRequest({ url: `${url}/error_unhandled`, server, scope }, { count: 3, endServer: false }), + const aggregateSessionEnvelope = await Promise.race([ + getEnvelopeRequest({ url: `${url}/success`, server }, { endServer: false, envelopeType: 'sessions' }), + getEnvelopeRequest({ url: `${url}/error_handled`, server }, { endServer: false, envelopeType: 'sessions' }), + getEnvelopeRequest({ url: `${url}/error_unhandled`, server }, { endServer: false, envelopeType: 'sessions' }), ]); - scope.persist(false); await new Promise(resolve => server.close(resolve)); - expect(envelopes).toHaveLength(3); - const aggregateSessionEnvelope = envelopes[2]; expect(aggregateSessionEnvelope[0]).toMatchObject({ sent_at: expect.any(String), sdk: { diff --git a/packages/node-integration-tests/suites/sessions/exited-session-aggregate/test.ts b/packages/node-integration-tests/suites/sessions/exited-session-aggregate/test.ts index 4bf608f49e4a..1d8c2d72a651 100644 --- a/packages/node-integration-tests/suites/sessions/exited-session-aggregate/test.ts +++ b/packages/node-integration-tests/suites/sessions/exited-session-aggregate/test.ts @@ -1,17 +1,18 @@ +import nock from 'nock'; import path from 'path'; import { getEnvelopeRequest, runServer } from '../../../utils'; test('should aggregate successful sessions', async () => { - const { url, server, scope } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); + const { url, server } = await runServer(__dirname, `${path.resolve(__dirname, '..')}/server.ts`); const envelope = await Promise.race([ - getEnvelopeRequest({ url: `${url}/success`, server, scope }, { endServer: false }), - getEnvelopeRequest({ url: `${url}/success_next`, server, scope }, { endServer: false }), - getEnvelopeRequest({ url: `${url}/success_slow`, server, scope }, { endServer: false }), + getEnvelopeRequest({ url: `${url}/success`, server }, { endServer: false, envelopeType: 'sessions' }), + getEnvelopeRequest({ url: `${url}/success_next`, server }, { endServer: false, envelopeType: 'sessions' }), + getEnvelopeRequest({ url: `${url}/success_slow`, server }, { endServer: false, envelopeType: 'sessions' }), ]); - scope.persist(false); + nock.cleanAll(); server.close(); expect(envelope).toHaveLength(3); diff --git a/packages/node-integration-tests/suites/tracing/apollo-graphql/test.ts b/packages/node-integration-tests/suites/tracing/apollo-graphql/test.ts index d80d52cf91df..8ba91822c704 100644 --- a/packages/node-integration-tests/suites/tracing/apollo-graphql/test.ts +++ b/packages/node-integration-tests/suites/tracing/apollo-graphql/test.ts @@ -5,7 +5,7 @@ import { assertSentryTransaction, conditionalTest, getEnvelopeRequest, runServer conditionalTest({ min: 12 })('GraphQL/Apollo Tests', () => { test('should instrument GraphQL and Apollo Server.', async () => { const config = await runServer(__dirname); - const envelope = await getEnvelopeRequest(config); + const envelope = await getEnvelopeRequest(config, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); diff --git a/packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts b/packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts index 2645c54f70a7..23f15c7e4307 100644 --- a/packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts +++ b/packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts @@ -19,7 +19,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { test('should auto-instrument `mongodb` package.', async () => { const config = await runServer(__dirname); - const envelope = await getEnvelopeRequest(config); + const envelope = await getEnvelopeRequest(config, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); diff --git a/packages/node-integration-tests/suites/tracing/auto-instrument/mysql/test.ts b/packages/node-integration-tests/suites/tracing/auto-instrument/mysql/test.ts index f65d9d54710d..bcd451ffe8d6 100644 --- a/packages/node-integration-tests/suites/tracing/auto-instrument/mysql/test.ts +++ b/packages/node-integration-tests/suites/tracing/auto-instrument/mysql/test.ts @@ -2,7 +2,7 @@ import { assertSentryTransaction, getEnvelopeRequest, runServer } from '../../.. test('should auto-instrument `mysql` package.', async () => { const config = await runServer(__dirname); - const envelope = await getEnvelopeRequest(config); + const envelope = await getEnvelopeRequest(config, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); diff --git a/packages/node-integration-tests/suites/tracing/auto-instrument/pg/test.ts b/packages/node-integration-tests/suites/tracing/auto-instrument/pg/test.ts index 4b48b98e23ca..bea37770b5e6 100644 --- a/packages/node-integration-tests/suites/tracing/auto-instrument/pg/test.ts +++ b/packages/node-integration-tests/suites/tracing/auto-instrument/pg/test.ts @@ -30,7 +30,7 @@ beforeAll(() => { test('should auto-instrument `pg` package.', async () => { const config = await runServer(__dirname); - const envelope = await getEnvelopeRequest(config); + const envelope = await getEnvelopeRequest(config, { envelopeType: 'transaction' }); expect(envelope).toHaveLength(3); diff --git a/packages/node-integration-tests/suites/tracing/prisma-orm/test.ts b/packages/node-integration-tests/suites/tracing/prisma-orm/test.ts index da884f70caf8..a75578c33006 100644 --- a/packages/node-integration-tests/suites/tracing/prisma-orm/test.ts +++ b/packages/node-integration-tests/suites/tracing/prisma-orm/test.ts @@ -3,7 +3,7 @@ import { assertSentryTransaction, conditionalTest, getEnvelopeRequest, runServer conditionalTest({ min: 12 })('Prisma ORM Integration', () => { test('should instrument Prisma client for tracing.', async () => { const config = await runServer(__dirname); - const envelope = await getEnvelopeRequest(config); + const envelope = await getEnvelopeRequest(config, { envelopeType: 'transaction' }); assertSentryTransaction(envelope[2], { transaction: 'Test Transaction', diff --git a/packages/node-integration-tests/suites/tracing/tracePropagationTargets/test.ts b/packages/node-integration-tests/suites/tracing/tracePropagationTargets/test.ts index a861126c1aa5..dfed6feea099 100644 --- a/packages/node-integration-tests/suites/tracing/tracePropagationTargets/test.ts +++ b/packages/node-integration-tests/suites/tracing/tracePropagationTargets/test.ts @@ -27,10 +27,12 @@ test('HttpIntegration should instrument correct requests when tracePropagationTa .matchHeader('sentry-trace', val => val === undefined) .reply(200); - const { url, scope, server } = await runServer(__dirname); + const { url, server } = await runServer(__dirname); await runScenario(url); - scope.persist(false); + server.close(); + nock.cleanAll(); + await new Promise(resolve => server.close(resolve)); expect(match1.isDone()).toBe(true); diff --git a/packages/node-integration-tests/utils/index.ts b/packages/node-integration-tests/utils/index.ts index f425b495f6c5..8559209c3578 100644 --- a/packages/node-integration-tests/utils/index.ts +++ b/packages/node-integration-tests/utils/index.ts @@ -1,9 +1,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +import * as Sentry from '@sentry/node'; import { logger, parseSemver } from '@sentry/utils'; import axios from 'axios'; import { Express } from 'express'; import * as http from 'http'; -import { RequestOptions } from 'https'; import nock from 'nock'; import * as path from 'path'; import { getPortPromise } from 'portfinder'; @@ -11,7 +11,6 @@ import { getPortPromise } from 'portfinder'; export type TestServerConfig = { url: string; server: http.Server; - scope: nock.Scope; }; export type DataCollectorOptions = { @@ -24,6 +23,9 @@ export type DataCollectorOptions = { // Whether to stop the server after the requests have been intercepted endServer?: boolean; + + // Type of the envelopes to capture + envelopeType?: string; }; /** @@ -95,42 +97,53 @@ export const getMultipleEnvelopeRequest = async ( config: TestServerConfig, options: DataCollectorOptions, ): Promise[][]> => { - // eslint-disable-next-line no-async-promise-executor - return ( - await Promise.all([ - setupNock(config.scope, config.server, options.count || 1, options.endServer || true), - makeRequest(options.method || 'get', config.url), - ]) - )[0]; + const resProm = setupNock( + config.server, + options.count || 1, + typeof options.endServer === 'undefined' ? true : options.endServer, + options.envelopeType || 'event', + ); + + void makeRequest(options.method || 'get', config.url); + return resProm; }; const setupNock = async ( - scope: nock.Scope, server: http.Server, count: number, endServer: boolean, + envelopeType: string, ): Promise[][]> => { return new Promise(resolve => { const envelopes: Record[][] = []; - - scope + const mock = nock('https://dsn.ingest.sentry.io') + .persist() .post('/api/1337/envelope/', body => { const envelope = parseEnvelope(body); - envelopes.push(envelope); + if (envelope[1].type === envelopeType) { + envelopes.push(envelope); + } else { + return false; + } if (count === envelopes.length) { + nock.removeInterceptor(mock); + nock.cleanAll(); + if (endServer) { - scope.persist(false); server.close(() => { resolve(envelopes); }); } + resolve(envelopes); } return true; - }) + }); + + mock .query(true) // accept any query params - used for sentry_key param .reply(200); }); @@ -158,34 +171,12 @@ const makeRequest = async (method: 'get' | 'post', url: string): Promise = * @return {*} {Promise} */ export const getAPIResponse = async (config: TestServerConfig, headers?: Record): Promise => { - return new Promise(resolve => { - const url = new URL(config.url); - - http.get( - headers - ? ({ - protocol: url.protocol, - host: url.hostname, - path: url.pathname, - port: url.port, - headers, - } as RequestOptions) - : url, - response => { - let body = ''; - - response.on('data', function (chunk: string) { - body += chunk; - }); - response.on('end', function () { - config.scope.persist(false); - config.server.close(() => { - resolve(JSON.parse(body)); - }); - }); - }, - ); - }); + const { data } = await axios.get(config.url, { headers: headers || {} }); + + await Sentry.flush(); + config.server.close(); + + return data; }; /** @@ -219,7 +210,7 @@ export async function runServer( const url = `http://localhost:${port}/test`; const defaultServerPath = path.resolve(process.cwd(), 'utils', 'defaults', 'server'); - const { server, scope } = await new Promise<{ server: http.Server; scope: nock.Scope }>(resolve => { + const server = await new Promise(resolve => { // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access const app = require(serverPath || defaultServerPath).default as Express; @@ -232,22 +223,14 @@ export async function runServer( }); const server = app.listen(port, () => { - const scope = nock('https://dsn.ingest.sentry.io').persist(); - - resolve({ server, scope }); + resolve(server); }); }); - return { url, server, scope }; + return { url, server }; } -export async function runScenario(serverUrl: string): Promise { - return new Promise(resolve => { - http - .get(serverUrl, res => { - res.on('data', () => undefined); - res.on('end', resolve); - }) - .end(); - }); +export async function runScenario(url: string): Promise { + await axios.get(url); + await Sentry.flush(); } From c4eac20ce74bdc83db01b608766b97c631a5cb01 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Thu, 18 Aug 2022 10:28:23 +0100 Subject: [PATCH 2/7] Support passing multiple `envelopeType`s. --- .../node-integration-tests/utils/index.ts | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/node-integration-tests/utils/index.ts b/packages/node-integration-tests/utils/index.ts index 8559209c3578..9cf8bd437236 100644 --- a/packages/node-integration-tests/utils/index.ts +++ b/packages/node-integration-tests/utils/index.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ import * as Sentry from '@sentry/node'; +import { EnvelopeItemType } from '@sentry/types'; import { logger, parseSemver } from '@sentry/utils'; import axios from 'axios'; import { Express } from 'express'; @@ -24,8 +25,8 @@ export type DataCollectorOptions = { // Whether to stop the server after the requests have been intercepted endServer?: boolean; - // Type of the envelopes to capture - envelopeType?: string; + // Type(s) of the envelopes to capture + envelopeType?: EnvelopeItemType | EnvelopeItemType[]; }; /** @@ -97,11 +98,16 @@ export const getMultipleEnvelopeRequest = async ( config: TestServerConfig, options: DataCollectorOptions, ): Promise[][]> => { + const envelopeTypeArray = + typeof options.envelopeType === 'string' + ? [options.envelopeType] + : options.envelopeType || (['event'] as EnvelopeItemType[]); + const resProm = setupNock( config.server, options.count || 1, typeof options.endServer === 'undefined' ? true : options.endServer, - options.envelopeType || 'event', + envelopeTypeArray, ); void makeRequest(options.method || 'get', config.url); @@ -112,7 +118,7 @@ const setupNock = async ( server: http.Server, count: number, endServer: boolean, - envelopeType: string, + envelopeType: EnvelopeItemType[], ): Promise[][]> => { return new Promise(resolve => { const envelopes: Record[][] = []; @@ -121,7 +127,7 @@ const setupNock = async ( .post('/api/1337/envelope/', body => { const envelope = parseEnvelope(body); - if (envelope[1].type === envelopeType) { + if (envelopeType.includes(envelope[1].type as EnvelopeItemType)) { envelopes.push(envelope); } else { return false; @@ -129,9 +135,13 @@ const setupNock = async ( if (count === envelopes.length) { nock.removeInterceptor(mock); - nock.cleanAll(); if (endServer) { + // Cleaning nock only before the server is closed, + // not to break tests that use simultaneous requests to the server. + // Ex: Remix scope bleed tests. + nock.cleanAll(); + server.close(() => { resolve(envelopes); }); From a065c41a2919754541e451ddd529ff540aadf00a Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Thu, 18 Aug 2022 10:28:43 +0100 Subject: [PATCH 3/7] Update Remix tests to the new structure. --- .../integration/test/server/action.test.ts | 9 +++++--- .../integration/test/server/loader.test.ts | 23 +++++++++++-------- .../integration/test/server/utils/helpers.ts | 8 ++----- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/packages/remix/test/integration/test/server/action.test.ts b/packages/remix/test/integration/test/server/action.test.ts index accf02ed4068..c32202d77d6b 100644 --- a/packages/remix/test/integration/test/server/action.test.ts +++ b/packages/remix/test/integration/test/server/action.test.ts @@ -13,7 +13,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada it('correctly instruments a parameterized Remix API action', async () => { const config = await runServer(adapter); const url = `${config.url}/action-json-response/123123`; - const envelope = await getEnvelopeRequest({ ...config, url }, { method: 'post' }); + const envelope = await getEnvelopeRequest({ ...config, url }, { method: 'post', envelopeType: 'transaction' }); const transaction = envelope[2]; assertSentryTransaction(transaction, { @@ -43,7 +43,10 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada const config = await runServer(adapter); const url = `${config.url}/action-json-response/-1`; - const [transaction, event] = await getMultipleEnvelopeRequest({ ...config, url }, { count: 2, method: 'post' }); + const [transaction, event] = await getMultipleEnvelopeRequest( + { ...config, url }, + { count: 2, method: 'post', envelopeType: ['transaction', 'event'] }, + ); assertSentryTransaction(transaction[2], { contexts: { @@ -82,7 +85,7 @@ describe.each(['builtin', 'express'])('Remix API Actions with adapter = %s', ada const [transaction_1, event, transaction_2] = await getMultipleEnvelopeRequest( { ...config, url }, - { count: 3, method: 'post' }, + { count: 3, method: 'post', envelopeType: ['transaction', 'event'] }, ); assertSentryTransaction(transaction_1[2], { diff --git a/packages/remix/test/integration/test/server/loader.test.ts b/packages/remix/test/integration/test/server/loader.test.ts index 8120bfd257e6..98fec6592222 100644 --- a/packages/remix/test/integration/test/server/loader.test.ts +++ b/packages/remix/test/integration/test/server/loader.test.ts @@ -15,7 +15,10 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada const config = await runServer(adapter); const url = `${config.url}/loader-json-response/-2`; - const envelopes = await getMultipleEnvelopeRequest({ ...config, url }, { count: 2 }); + const envelopes = await getMultipleEnvelopeRequest( + { ...config, url }, + { count: 2, envelopeType: ['transaction', 'event'] }, + ); const event = envelopes[0][2].type === 'transaction' ? envelopes[1][2] : envelopes[0][2]; const transaction = envelopes[0][2].type === 'transaction' ? envelopes[0][2] : envelopes[1][2]; @@ -54,7 +57,7 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada it('correctly instruments a parameterized Remix API loader', async () => { const config = await runServer(adapter); const url = `${config.url}/loader-json-response/123123`; - const envelope = await getEnvelopeRequest({ ...config, url }); + const envelope = await getEnvelopeRequest({ ...config, url }, { envelopeType: 'transaction' }); const transaction = envelope[2]; assertSentryTransaction(transaction, { @@ -83,7 +86,10 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada const config = await runServer(adapter); const url = `${config.url}/loader-json-response/-1`; - const [transaction_1, event, transaction_2] = await getMultipleEnvelopeRequest({ ...config, url }, { count: 3 }); + const [transaction_1, event, transaction_2] = await getMultipleEnvelopeRequest( + { ...config, url }, + { count: 3, envelopeType: ['transaction', 'event'] }, + ); assertSentryTransaction(transaction_1[2], { contexts: { @@ -138,16 +144,15 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada }); it('makes sure scope does not bleed between requests', async () => { - const { url, server, scope } = await runServer(adapter); + const { url, server } = await runServer(adapter); const envelopes = await Promise.all([ - getEnvelopeRequest({ url: `${url}/scope-bleed/1`, server, scope }, { endServer: false }), - getEnvelopeRequest({ url: `${url}/scope-bleed/2`, server, scope }, { endServer: false }), - getEnvelopeRequest({ url: `${url}/scope-bleed/3`, server, scope }, { endServer: false }), - getEnvelopeRequest({ url: `${url}/scope-bleed/4`, server, scope }, { endServer: false }), + getEnvelopeRequest({ url: `${url}/scope-bleed/1`, server }, { endServer: false, envelopeType: 'transaction' }), + getEnvelopeRequest({ url: `${url}/scope-bleed/2`, server }, { endServer: false, envelopeType: 'transaction' }), + getEnvelopeRequest({ url: `${url}/scope-bleed/3`, server }, { endServer: false, envelopeType: 'transaction' }), + getEnvelopeRequest({ url: `${url}/scope-bleed/4`, server }, { endServer: false, envelopeType: 'transaction' }), ]); - scope.persist(false); await new Promise(resolve => server.close(resolve)); envelopes.forEach(envelope => { diff --git a/packages/remix/test/integration/test/server/utils/helpers.ts b/packages/remix/test/integration/test/server/utils/helpers.ts index 2e909002a4fe..0273a5de43a2 100644 --- a/packages/remix/test/integration/test/server/utils/helpers.ts +++ b/packages/remix/test/integration/test/server/utils/helpers.ts @@ -3,7 +3,6 @@ import { createRequestHandler } from '@remix-run/express'; import { getPortPromise } from 'portfinder'; import { wrapExpressCreateRequestHandler } from '@sentry/remix'; import type { TestServerConfig } from '../../../../../../node-integration-tests/utils'; -import nock from 'nock'; import * as http from 'http'; export * from '../../../../../../node-integration-tests/utils'; @@ -18,21 +17,18 @@ export async function runServer(adapter: string = 'builtin'): Promise(resolve => { + const server = await new Promise(resolve => { const app = express(); app.all('*', requestHandlerFactory({ build: require('../../../build') })); const server = app.listen(port, () => { - const scope = nock('https://dsn.ingest.sentry.io').persist(); - - resolve({ server, scope }); + resolve(server); }); }); return { url: `http://localhost:${port}`, server, - scope, }; } From 1594b81fff3da0d539f925aa72753c7f2c6fe30c Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Thu, 18 Aug 2022 11:07:00 +0100 Subject: [PATCH 4/7] Update README.md --- packages/node-integration-tests/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/node-integration-tests/README.md b/packages/node-integration-tests/README.md index 962b9f4b88dc..849af40a6849 100644 --- a/packages/node-integration-tests/README.md +++ b/packages/node-integration-tests/README.md @@ -33,9 +33,12 @@ A custom server configuration can be used, supplying a script that exports a val `utils/` contains helpers and Sentry-specific assertions that can be used in (`test.ts`). -`runServer` utility function returns an object containing `url`, [`http.Server`](https://nodejs.org/dist/latest-v16.x/docs/api/http.html#class-httpserver) and [`nock.Scope`](https://github.com/nock/nock#usage) instances for the created server. The `url` property is the base URL for the server. The `http.Server` instance is used to finish the server eventually, and the `nock.Scope` instance is used to bind / unbind interceptors for the test case. +`runServer` utility function returns an object containing `url` and [`http.Server`](https://nodejs.org/dist/latest-v16.x/docs/api/http.html#class-httpserver) instance for the created server. The `url` property is the base URL for the server. The `http.Server` instance is used to finish the server eventually. + +The responsibility of ending the server is delegated to the test case. Data collection helpers such as `getEnvelopeRequest` and `getAPIResponse` expect the server instance to be available and finish it before their resolution. Test that do not use those helpers will need to end the server manually. + +Nock interceptors are internally used to capture envelope requests by `getEnvelopeRequest` and `getMultipleEnvelopeRequest` helpers. After capturing required requests, the interceptors are removed. Nock can manually be used inside the test cases to intercept requests, but should be removed before the test ends, not to cause flakiness. -The responsibility of ending the server and interceptor is delegated to the test case. Data collection helpers such as `getEnvelopeRequest` and `getAPIResponse` expect those instances to be available and finish them before their resolution. Test that do not use those helpers will need to end the server and interceptors manually. ## Running Tests Locally Tests can be run locally with: From c47033f54ce1e11e56a672b773eaef1fbeea1e6d Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Thu, 18 Aug 2022 11:10:40 +0100 Subject: [PATCH 5/7] Update JSDoc comments. --- packages/node-integration-tests/utils/index.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/node-integration-tests/utils/index.ts b/packages/node-integration-tests/utils/index.ts index 9cf8bd437236..4724eabd0246 100644 --- a/packages/node-integration-tests/utils/index.ts +++ b/packages/node-integration-tests/utils/index.ts @@ -16,7 +16,7 @@ export type TestServerConfig = { export type DataCollectorOptions = { // The expected amount of requests to the envelope endpoint. - // If the amount of sentrequests is lower than`count`, this function will not resolve. + // If the amount of sent requests is lower than `count`, this function will not resolve. count?: number; // The method of the request. @@ -90,7 +90,7 @@ export const parseEnvelope = (body: string): Array> => { /** * Intercepts and extracts up to a number of requests containing Sentry envelopes. * - * @param {TestServerConfig} config The url, server instance and the nock scope. + * @param {TestServerConfig} config The url and the server instance. * @param {DataCollectorOptions} options * @returns The intercepted envelopes. */ @@ -174,9 +174,10 @@ const makeRequest = async (method: 'get' | 'post', url: string): Promise = }; /** - * Sends a get request to given URL, with optional headers + * Sends a get request to given URL, with optional headers. Returns the response. + * Ends the server instance and flushes the Sentry event queue. * - * @param {TestServerConfig} config The url, server instance and the nock scope. + * @param {TestServerConfig} config The url and the server instance. * @param {Record} [headers] * @return {*} {Promise} */ @@ -192,7 +193,7 @@ export const getAPIResponse = async (config: TestServerConfig, headers?: Record< /** * Intercepts and extracts a single request containing a Sentry envelope * - * @param {TestServerConfig} config The url, server instance and the nock scope. + * @param {TestServerConfig} config The url and the server instance. * @param {DataCollectorOptions} options * @returns The extracted envelope. */ @@ -240,6 +241,13 @@ export async function runServer( return { url, server }; } +/** + * Sends a get request to given URL. + * Flushes the Sentry event queue. + * + * @param {string} url + * @return {*} {Promise} + */ export async function runScenario(url: string): Promise { await axios.get(url); await Sentry.flush(); From 7a353437a54f50435384455e743d0dc489b577e8 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 18 Aug 2022 09:57:45 -0400 Subject: [PATCH 6/7] Update packages/node-integration-tests/README.md --- packages/node-integration-tests/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node-integration-tests/README.md b/packages/node-integration-tests/README.md index 849af40a6849..cf597750d4e6 100644 --- a/packages/node-integration-tests/README.md +++ b/packages/node-integration-tests/README.md @@ -35,7 +35,7 @@ A custom server configuration can be used, supplying a script that exports a val `runServer` utility function returns an object containing `url` and [`http.Server`](https://nodejs.org/dist/latest-v16.x/docs/api/http.html#class-httpserver) instance for the created server. The `url` property is the base URL for the server. The `http.Server` instance is used to finish the server eventually. -The responsibility of ending the server is delegated to the test case. Data collection helpers such as `getEnvelopeRequest` and `getAPIResponse` expect the server instance to be available and finish it before their resolution. Test that do not use those helpers will need to end the server manually. +The responsibility of ending the server is delegated to the test case. Data collection helpers such as `getEnvelopeRequest` and `getAPIResponse` expect the server instance to be available and finish it before their resolution. Tests that do not use those helpers will need to end the server manually. Nock interceptors are internally used to capture envelope requests by `getEnvelopeRequest` and `getMultipleEnvelopeRequest` helpers. After capturing required requests, the interceptors are removed. Nock can manually be used inside the test cases to intercept requests, but should be removed before the test ends, not to cause flakiness. From 6b56c620d76525e4f468ff0ca48c59e97941d49c Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 18 Aug 2022 09:57:51 -0400 Subject: [PATCH 7/7] Update packages/node-integration-tests/README.md --- packages/node-integration-tests/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node-integration-tests/README.md b/packages/node-integration-tests/README.md index cf597750d4e6..e439f5556e13 100644 --- a/packages/node-integration-tests/README.md +++ b/packages/node-integration-tests/README.md @@ -37,7 +37,7 @@ A custom server configuration can be used, supplying a script that exports a val The responsibility of ending the server is delegated to the test case. Data collection helpers such as `getEnvelopeRequest` and `getAPIResponse` expect the server instance to be available and finish it before their resolution. Tests that do not use those helpers will need to end the server manually. -Nock interceptors are internally used to capture envelope requests by `getEnvelopeRequest` and `getMultipleEnvelopeRequest` helpers. After capturing required requests, the interceptors are removed. Nock can manually be used inside the test cases to intercept requests, but should be removed before the test ends, not to cause flakiness. +Nock interceptors are internally used to capture envelope requests by `getEnvelopeRequest` and `getMultipleEnvelopeRequest` helpers. After capturing required requests, the interceptors are removed. Nock can manually be used inside the test cases to intercept requests but should be removed before the test ends, as not to cause flakiness. ## Running Tests Locally