Skip to content

Commit 54dee29

Browse files
committed
add tests for when tracing is enabled
1 parent 5d421b8 commit 54dee29

4 files changed

Lines changed: 143 additions & 0 deletions

File tree

  • dev-packages
    • node-core-integration-tests/suites/tracing/traceid-recycling-with-spans
    • node-integration-tests/suites/tracing/traceid-recycling-with-spans
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const { loggingTransport } = require('@sentry-internal/node-core-integration-tests');
2+
const Sentry = require('@sentry/node-core');
3+
const { setupOtel } = require('../../../utils/setupOtel.js');
4+
5+
const client = Sentry.init({
6+
dsn: 'https://public@dsn.ingest.sentry.io/1337',
7+
transport: loggingTransport,
8+
tracesSampleRate: 1.0,
9+
});
10+
11+
setupOtel(client);
12+
13+
const express = require('express');
14+
const { startExpressServerAndSendPortToRunner } = require('@sentry-internal/node-core-integration-tests');
15+
16+
const app = express();
17+
18+
app.get('/test', (_req, res) => {
19+
Sentry.captureException(new Error('test error'));
20+
res.json({ success: true });
21+
});
22+
23+
startExpressServerAndSendPortToRunner(app);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { afterAll, expect, test } from 'vitest';
2+
import { cleanupChildProcesses, createRunner } from '../../../utils/runner';
3+
4+
afterAll(() => {
5+
cleanupChildProcesses();
6+
});
7+
8+
test('errors from in different requests each get a unique traceId when tracing is enabled', async () => {
9+
const eventTraceIds: string[] = [];
10+
11+
const runner = createRunner(__dirname, 'server.js')
12+
.expect({
13+
event: event => {
14+
eventTraceIds.push(event.contexts?.trace?.trace_id || '');
15+
},
16+
})
17+
.expect({
18+
event: event => {
19+
eventTraceIds.push(event.contexts?.trace?.trace_id || '');
20+
},
21+
})
22+
.expect({
23+
event: event => {
24+
// console.log('xx event 3');
25+
eventTraceIds.push(event.contexts?.trace?.trace_id || '');
26+
},
27+
})
28+
.start();
29+
30+
await runner.makeRequest('get', '/test');
31+
await runner.makeRequest('get', '/test');
32+
await runner.makeRequest('get', '/test');
33+
34+
await runner.completed();
35+
36+
expect(new Set(eventTraceIds).size).toBe(3);
37+
for (const traceId of eventTraceIds) {
38+
expect(traceId).toMatch(/^[a-f\d]{32}$/);
39+
}
40+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import * as Sentry from '@sentry/node';
2+
import { loggingTransport, startExpressServerAndSendPortToRunner } from '@sentry-internal/node-integration-tests';
3+
4+
Sentry.init({
5+
dsn: 'https://public@dsn.ingest.sentry.io/1337',
6+
release: '1.0',
7+
transport: loggingTransport,
8+
tracesSampleRate: 1.0,
9+
});
10+
11+
import express from 'express';
12+
13+
const app = express();
14+
15+
app.get('/test', async (_req, res) => {
16+
Sentry.captureException(new Error('test error'));
17+
// calling Sentry.flush() here to ensure that the order in which we send transaction and errors
18+
// is guaranteed to be 1. error, 2. transaction (repeated 3x in test)
19+
await Sentry.flush();
20+
res.json({ success: true });
21+
});
22+
23+
startExpressServerAndSendPortToRunner(app);
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { afterAll, expect, test } from 'vitest';
2+
import { cleanupChildProcesses, createRunner } from '../../../utils/runner';
3+
4+
afterAll(() => {
5+
cleanupChildProcesses();
6+
});
7+
8+
test('errors and transactions get a unique traceId per request, when tracing is enabled', async () => {
9+
const eventTraceIds: string[] = [];
10+
const transactionTraceIds: string[] = [];
11+
12+
const runner = createRunner(__dirname, 'server.ts')
13+
.expect({
14+
event: event => {
15+
eventTraceIds.push(event.contexts?.trace?.trace_id || '');
16+
},
17+
})
18+
.expect({
19+
transaction: transaction => {
20+
transactionTraceIds.push(transaction.spans?.[0]?.trace_id || '');
21+
},
22+
})
23+
.expect({
24+
event: event => {
25+
eventTraceIds.push(event.contexts?.trace?.trace_id || '');
26+
},
27+
})
28+
.expect({
29+
transaction: transaction => {
30+
transactionTraceIds.push(transaction.spans?.[0]?.trace_id || '');
31+
},
32+
})
33+
.expect({
34+
event: event => {
35+
eventTraceIds.push(event.contexts?.trace?.trace_id || '');
36+
},
37+
})
38+
.expect({
39+
transaction: transaction => {
40+
transactionTraceIds.push(transaction.spans?.[0]?.trace_id || '');
41+
},
42+
})
43+
.start();
44+
45+
await runner.makeRequest('get', '/test');
46+
await runner.makeRequest('get', '/test');
47+
await runner.makeRequest('get', '/test');
48+
49+
await runner.completed();
50+
51+
expect(new Set(transactionTraceIds).size).toBe(3);
52+
for (const traceId of transactionTraceIds) {
53+
expect(traceId).toMatch(/^[a-f\d]{32}$/);
54+
}
55+
56+
expect(eventTraceIds).toEqual(transactionTraceIds);
57+
});

0 commit comments

Comments
 (0)