1
+ import { release } from 'os' ;
1
2
import { expect } from '@playwright/test' ;
2
3
import type { Event } from '@sentry/types' ;
3
4
import { sentryTest } from '../../../../utils/fixtures' ;
5
+ import type { EventAndTraceHeader } from '../../../../utils/helpers' ;
4
6
import {
7
+ eventAndTraceHeaderRequestParser ,
5
8
getFirstSentryEnvelopeRequest ,
6
9
getMultipleSentryEnvelopeRequests ,
7
10
shouldSkipTracingTest ,
@@ -21,8 +24,16 @@ sentryTest(
21
24
22
25
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
23
26
24
- const pageloadEvent = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
25
- const navigationEvent = await getFirstSentryEnvelopeRequest < Event > ( page , `${ url } #foo` ) ;
27
+ const [ pageloadEvent , pageloadTraceHeader ] = await getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
28
+ page ,
29
+ url ,
30
+ eventAndTraceHeaderRequestParser ,
31
+ ) ;
32
+ const [ navigationEvent , navigationTraceHeader ] = await getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
33
+ page ,
34
+ `${ url } #foo` ,
35
+ eventAndTraceHeaderRequestParser ,
36
+ ) ;
26
37
27
38
const pageloadTraceContext = pageloadEvent . contexts ?. trace ;
28
39
const navigationTraceContext = navigationEvent . contexts ?. trace ;
@@ -33,6 +44,17 @@ sentryTest(
33
44
parent_span_id : META_TAG_PARENT_SPAN_ID ,
34
45
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
35
46
} ) ;
47
+
48
+ expect ( pageloadTraceHeader ) . toEqual ( {
49
+ environment : 'prod' ,
50
+ release : '1.0.0' ,
51
+ sample_rate : '0.2' ,
52
+ sampled : 'true' ,
53
+ transaction : 'my-transaction' ,
54
+ public_key : 'public' ,
55
+ trace_id : META_TAG_TRACE_ID ,
56
+ } ) ;
57
+
36
58
expect ( navigationTraceContext ) . toMatchObject ( {
37
59
op : 'navigation' ,
38
60
trace_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 32 } $ / ) ,
@@ -41,6 +63,14 @@ sentryTest(
41
63
// navigation span is head of trace, so there's no parent span:
42
64
expect ( navigationTraceContext ?. trace_id ) . not . toHaveProperty ( 'parent_span_id' ) ;
43
65
66
+ expect ( navigationTraceHeader ) . toEqual ( {
67
+ environment : 'production' ,
68
+ public_key : 'public' ,
69
+ sample_rate : '1' ,
70
+ sampled : 'true' ,
71
+ trace_id : navigationTraceContext ?. trace_id ,
72
+ } ) ;
73
+
44
74
expect ( pageloadTraceContext ?. trace_id ) . not . toEqual ( navigationTraceContext ?. trace_id ) ;
45
75
} ,
46
76
) ;
@@ -52,23 +82,52 @@ sentryTest('error after <meta> tag pageload has pageload traceId', async ({ getL
52
82
53
83
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
54
84
55
- const pageloadEvent = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
85
+ const [ pageloadEvent , pageloadTraceHeader ] = await getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
86
+ page ,
87
+ url ,
88
+ eventAndTraceHeaderRequestParser ,
89
+ ) ;
90
+
56
91
expect ( pageloadEvent . contexts ?. trace ) . toMatchObject ( {
57
92
op : 'pageload' ,
58
93
trace_id : META_TAG_TRACE_ID ,
59
94
parent_span_id : META_TAG_PARENT_SPAN_ID ,
60
95
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
61
96
} ) ;
62
97
63
- const errorEventPromise = getFirstSentryEnvelopeRequest < Event > ( page ) ;
98
+ expect ( pageloadTraceHeader ) . toEqual ( {
99
+ environment : 'prod' ,
100
+ release : '1.0.0' ,
101
+ sample_rate : '0.2' ,
102
+ sampled : 'true' ,
103
+ transaction : 'my-transaction' ,
104
+ public_key : 'public' ,
105
+ trace_id : META_TAG_TRACE_ID ,
106
+ } ) ;
107
+
108
+ const errorEventPromise = getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
109
+ page ,
110
+ undefined ,
111
+ eventAndTraceHeaderRequestParser ,
112
+ ) ;
64
113
await page . locator ( '#errorBtn' ) . click ( ) ;
65
- const errorEvent = await errorEventPromise ;
114
+ const [ errorEvent , errorTraceHeader ] = await errorEventPromise ;
66
115
67
116
expect ( errorEvent . contexts ?. trace ) . toMatchObject ( {
68
117
trace_id : META_TAG_TRACE_ID ,
69
118
parent_span_id : META_TAG_PARENT_SPAN_ID ,
70
119
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
71
120
} ) ;
121
+
122
+ expect ( errorTraceHeader ) . toEqual ( {
123
+ environment : 'prod' ,
124
+ release : '1.0.0' ,
125
+ sample_rate : '0.2' ,
126
+ sampled : 'true' ,
127
+ transaction : 'my-transaction' ,
128
+ public_key : 'public' ,
129
+ trace_id : META_TAG_TRACE_ID ,
130
+ } ) ;
72
131
} ) ;
73
132
74
133
sentryTest ( 'error during <meta> tag pageload has pageload traceId' , async ( { getLocalTestPath, page } ) => {
@@ -78,13 +137,20 @@ sentryTest('error during <meta> tag pageload has pageload traceId', async ({ get
78
137
79
138
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
80
139
81
- const envelopeRequestsPromise = getMultipleSentryEnvelopeRequests < Event > ( page , 2 ) ;
140
+ const envelopeRequestsPromise = getMultipleSentryEnvelopeRequests < EventAndTraceHeader > (
141
+ page ,
142
+ 2 ,
143
+ undefined ,
144
+ eventAndTraceHeaderRequestParser ,
145
+ ) ;
82
146
await page . goto ( url ) ;
83
147
await page . locator ( '#errorBtn' ) . click ( ) ;
84
- const events = await envelopeRequestsPromise ;
148
+ const envelopes = await envelopeRequestsPromise ;
85
149
86
- const pageloadEvent = events . find ( event => event . type === 'transaction' ) ;
87
- const errorEvent = events . find ( event => ! event . type ) ;
150
+ const [ pageloadEvent , pageloadTraceHeader ] = envelopes . find (
151
+ eventAndHeader => eventAndHeader [ 0 ] . type === 'transaction' ,
152
+ ) ! ;
153
+ const [ errorEvent , errorTraceHeader ] = envelopes . find ( eventAndHeader => ! eventAndHeader [ 0 ] . type ) ! ;
88
154
89
155
expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
90
156
op : 'pageload' ,
@@ -93,11 +159,31 @@ sentryTest('error during <meta> tag pageload has pageload traceId', async ({ get
93
159
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
94
160
} ) ;
95
161
162
+ expect ( pageloadTraceHeader ) . toEqual ( {
163
+ environment : 'prod' ,
164
+ release : '1.0.0' ,
165
+ sample_rate : '0.2' ,
166
+ sampled : 'true' ,
167
+ transaction : 'my-transaction' ,
168
+ public_key : 'public' ,
169
+ trace_id : META_TAG_TRACE_ID ,
170
+ } ) ;
171
+
96
172
expect ( errorEvent ?. contexts ?. trace ) . toMatchObject ( {
97
173
trace_id : META_TAG_TRACE_ID ,
98
174
parent_span_id : META_TAG_PARENT_SPAN_ID ,
99
175
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
100
176
} ) ;
177
+
178
+ expect ( errorTraceHeader ) . toEqual ( {
179
+ environment : 'prod' ,
180
+ release : '1.0.0' ,
181
+ sample_rate : '0.2' ,
182
+ sampled : 'true' ,
183
+ transaction : 'my-transaction' ,
184
+ public_key : 'public' ,
185
+ trace_id : META_TAG_TRACE_ID ,
186
+ } ) ;
101
187
} ) ;
102
188
103
189
sentryTest (
@@ -109,14 +195,28 @@ sentryTest(
109
195
110
196
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
111
197
112
- const pageloadEvent = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
198
+ const [ pageloadEvent , pageloadTraceHeader ] = await getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
199
+ page ,
200
+ url ,
201
+ eventAndTraceHeaderRequestParser ,
202
+ ) ;
113
203
expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
114
204
op : 'pageload' ,
115
205
trace_id : META_TAG_TRACE_ID ,
116
206
parent_span_id : META_TAG_PARENT_SPAN_ID ,
117
207
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
118
208
} ) ;
119
209
210
+ expect ( pageloadTraceHeader ) . toEqual ( {
211
+ environment : 'prod' ,
212
+ release : '1.0.0' ,
213
+ sample_rate : '0.2' ,
214
+ sampled : 'true' ,
215
+ transaction : 'my-transaction' ,
216
+ public_key : 'public' ,
217
+ trace_id : META_TAG_TRACE_ID ,
218
+ } ) ;
219
+
120
220
const requestPromise = page . waitForRequest ( 'http://example.com/*' ) ;
121
221
await page . locator ( '#fetchBtn' ) . click ( ) ;
122
222
const request = await requestPromise ;
@@ -137,11 +237,15 @@ sentryTest(
137
237
138
238
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
139
239
140
- const pageloadEventPromise = getFirstSentryEnvelopeRequest < Event > ( page ) ;
240
+ const pageloadEventPromise = getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
241
+ page ,
242
+ undefined ,
243
+ eventAndTraceHeaderRequestParser ,
244
+ ) ;
141
245
const requestPromise = page . waitForRequest ( 'http://example.com/*' ) ;
142
246
await page . goto ( url ) ;
143
247
await page . locator ( '#fetchBtn' ) . click ( ) ;
144
- const [ pageloadEvent , request ] = await Promise . all ( [ pageloadEventPromise , requestPromise ] ) ;
248
+ const [ [ pageloadEvent , pageloadTraceHeader ] , request ] = await Promise . all ( [ pageloadEventPromise , requestPromise ] ) ;
145
249
146
250
expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
147
251
op : 'pageload' ,
@@ -150,6 +254,16 @@ sentryTest(
150
254
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
151
255
} ) ;
152
256
257
+ expect ( pageloadTraceHeader ) . toEqual ( {
258
+ environment : 'prod' ,
259
+ release : '1.0.0' ,
260
+ sample_rate : '0.2' ,
261
+ sampled : 'true' ,
262
+ transaction : 'my-transaction' ,
263
+ public_key : 'public' ,
264
+ trace_id : META_TAG_TRACE_ID ,
265
+ } ) ;
266
+
153
267
const headers = request . headers ( ) ;
154
268
155
269
// sampling decision is propagated from meta tag's sentry-trace sampled flag
@@ -167,13 +281,26 @@ sentryTest(
167
281
168
282
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
169
283
170
- const pageloadEvent = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
284
+ const [ pageloadEvent , pageloadTraceHeader ] = await getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
285
+ page ,
286
+ url ,
287
+ eventAndTraceHeaderRequestParser ,
288
+ ) ;
171
289
expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
172
290
op : 'pageload' ,
173
291
trace_id : META_TAG_TRACE_ID ,
174
292
parent_span_id : META_TAG_PARENT_SPAN_ID ,
175
293
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
176
294
} ) ;
295
+ expect ( pageloadTraceHeader ) . toEqual ( {
296
+ environment : 'prod' ,
297
+ release : '1.0.0' ,
298
+ sample_rate : '0.2' ,
299
+ sampled : 'true' ,
300
+ transaction : 'my-transaction' ,
301
+ public_key : 'public' ,
302
+ trace_id : META_TAG_TRACE_ID ,
303
+ } ) ;
177
304
178
305
const requestPromise = page . waitForRequest ( 'http://example.com/*' ) ;
179
306
await page . locator ( '#xhrBtn' ) . click ( ) ;
@@ -195,11 +322,15 @@ sentryTest(
195
322
196
323
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
197
324
198
- const pageloadEventPromise = getFirstSentryEnvelopeRequest < Event > ( page ) ;
325
+ const pageloadEventPromise = getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
326
+ page ,
327
+ undefined ,
328
+ eventAndTraceHeaderRequestParser ,
329
+ ) ;
199
330
const requestPromise = page . waitForRequest ( 'http://example.com/*' ) ;
200
331
await page . goto ( url ) ;
201
332
await page . locator ( '#xhrBtn' ) . click ( ) ;
202
- const [ pageloadEvent , request ] = await Promise . all ( [ pageloadEventPromise , requestPromise ] ) ;
333
+ const [ [ pageloadEvent , pageloadTraceHeader ] , request ] = await Promise . all ( [ pageloadEventPromise , requestPromise ] ) ;
203
334
204
335
expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
205
336
op : 'pageload' ,
@@ -208,6 +339,16 @@ sentryTest(
208
339
span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
209
340
} ) ;
210
341
342
+ expect ( pageloadTraceHeader ) . toEqual ( {
343
+ environment : 'prod' ,
344
+ release : '1.0.0' ,
345
+ sample_rate : '0.2' ,
346
+ sampled : 'true' ,
347
+ transaction : 'my-transaction' ,
348
+ public_key : 'public' ,
349
+ trace_id : META_TAG_TRACE_ID ,
350
+ } ) ;
351
+
211
352
const headers = request . headers ( ) ;
212
353
213
354
// sampling decision is propagated from meta tag's sentry-trace sampled flag
0 commit comments