1+ import { release } from 'os' ;
12import { expect } from '@playwright/test' ;
23import type { Event } from '@sentry/types' ;
34import { sentryTest } from '../../../../utils/fixtures' ;
5+ import type { EventAndTraceHeader } from '../../../../utils/helpers' ;
46import {
7+ eventAndTraceHeaderRequestParser ,
58 getFirstSentryEnvelopeRequest ,
69 getMultipleSentryEnvelopeRequests ,
710 shouldSkipTracingTest ,
@@ -21,8 +24,16 @@ sentryTest(
2124
2225 const url = await getLocalTestPath ( { testDir : __dirname } ) ;
2326
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+ ) ;
2637
2738 const pageloadTraceContext = pageloadEvent . contexts ?. trace ;
2839 const navigationTraceContext = navigationEvent . contexts ?. trace ;
@@ -33,6 +44,17 @@ sentryTest(
3344 parent_span_id : META_TAG_PARENT_SPAN_ID ,
3445 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
3546 } ) ;
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+
3658 expect ( navigationTraceContext ) . toMatchObject ( {
3759 op : 'navigation' ,
3860 trace_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 32 } $ / ) ,
@@ -41,6 +63,14 @@ sentryTest(
4163 // navigation span is head of trace, so there's no parent span:
4264 expect ( navigationTraceContext ?. trace_id ) . not . toHaveProperty ( 'parent_span_id' ) ;
4365
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+
4474 expect ( pageloadTraceContext ?. trace_id ) . not . toEqual ( navigationTraceContext ?. trace_id ) ;
4575 } ,
4676) ;
@@ -52,23 +82,52 @@ sentryTest('error after <meta> tag pageload has pageload traceId', async ({ getL
5282
5383 const url = await getLocalTestPath ( { testDir : __dirname } ) ;
5484
55- const pageloadEvent = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
85+ const [ pageloadEvent , pageloadTraceHeader ] = await getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
86+ page ,
87+ url ,
88+ eventAndTraceHeaderRequestParser ,
89+ ) ;
90+
5691 expect ( pageloadEvent . contexts ?. trace ) . toMatchObject ( {
5792 op : 'pageload' ,
5893 trace_id : META_TAG_TRACE_ID ,
5994 parent_span_id : META_TAG_PARENT_SPAN_ID ,
6095 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
6196 } ) ;
6297
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+ ) ;
64113 await page . locator ( '#errorBtn' ) . click ( ) ;
65- const errorEvent = await errorEventPromise ;
114+ const [ errorEvent , errorTraceHeader ] = await errorEventPromise ;
66115
67116 expect ( errorEvent . contexts ?. trace ) . toMatchObject ( {
68117 trace_id : META_TAG_TRACE_ID ,
69118 parent_span_id : META_TAG_PARENT_SPAN_ID ,
70119 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
71120 } ) ;
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+ } ) ;
72131} ) ;
73132
74133sentryTest ( '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
78137
79138 const url = await getLocalTestPath ( { testDir : __dirname } ) ;
80139
81- const envelopeRequestsPromise = getMultipleSentryEnvelopeRequests < Event > ( page , 2 ) ;
140+ const envelopeRequestsPromise = getMultipleSentryEnvelopeRequests < EventAndTraceHeader > (
141+ page ,
142+ 2 ,
143+ undefined ,
144+ eventAndTraceHeaderRequestParser ,
145+ ) ;
82146 await page . goto ( url ) ;
83147 await page . locator ( '#errorBtn' ) . click ( ) ;
84- const events = await envelopeRequestsPromise ;
148+ const envelopes = await envelopeRequestsPromise ;
85149
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 ) ! ;
88154
89155 expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
90156 op : 'pageload' ,
@@ -93,11 +159,31 @@ sentryTest('error during <meta> tag pageload has pageload traceId', async ({ get
93159 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
94160 } ) ;
95161
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+
96172 expect ( errorEvent ?. contexts ?. trace ) . toMatchObject ( {
97173 trace_id : META_TAG_TRACE_ID ,
98174 parent_span_id : META_TAG_PARENT_SPAN_ID ,
99175 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
100176 } ) ;
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+ } ) ;
101187} ) ;
102188
103189sentryTest (
@@ -109,14 +195,28 @@ sentryTest(
109195
110196 const url = await getLocalTestPath ( { testDir : __dirname } ) ;
111197
112- const pageloadEvent = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
198+ const [ pageloadEvent , pageloadTraceHeader ] = await getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
199+ page ,
200+ url ,
201+ eventAndTraceHeaderRequestParser ,
202+ ) ;
113203 expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
114204 op : 'pageload' ,
115205 trace_id : META_TAG_TRACE_ID ,
116206 parent_span_id : META_TAG_PARENT_SPAN_ID ,
117207 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
118208 } ) ;
119209
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+
120220 const requestPromise = page . waitForRequest ( 'http://example.com/*' ) ;
121221 await page . locator ( '#fetchBtn' ) . click ( ) ;
122222 const request = await requestPromise ;
@@ -137,11 +237,15 @@ sentryTest(
137237
138238 const url = await getLocalTestPath ( { testDir : __dirname } ) ;
139239
140- const pageloadEventPromise = getFirstSentryEnvelopeRequest < Event > ( page ) ;
240+ const pageloadEventPromise = getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
241+ page ,
242+ undefined ,
243+ eventAndTraceHeaderRequestParser ,
244+ ) ;
141245 const requestPromise = page . waitForRequest ( 'http://example.com/*' ) ;
142246 await page . goto ( url ) ;
143247 await page . locator ( '#fetchBtn' ) . click ( ) ;
144- const [ pageloadEvent , request ] = await Promise . all ( [ pageloadEventPromise , requestPromise ] ) ;
248+ const [ [ pageloadEvent , pageloadTraceHeader ] , request ] = await Promise . all ( [ pageloadEventPromise , requestPromise ] ) ;
145249
146250 expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
147251 op : 'pageload' ,
@@ -150,6 +254,16 @@ sentryTest(
150254 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
151255 } ) ;
152256
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+
153267 const headers = request . headers ( ) ;
154268
155269 // sampling decision is propagated from meta tag's sentry-trace sampled flag
@@ -167,13 +281,26 @@ sentryTest(
167281
168282 const url = await getLocalTestPath ( { testDir : __dirname } ) ;
169283
170- const pageloadEvent = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
284+ const [ pageloadEvent , pageloadTraceHeader ] = await getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
285+ page ,
286+ url ,
287+ eventAndTraceHeaderRequestParser ,
288+ ) ;
171289 expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
172290 op : 'pageload' ,
173291 trace_id : META_TAG_TRACE_ID ,
174292 parent_span_id : META_TAG_PARENT_SPAN_ID ,
175293 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
176294 } ) ;
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+ } ) ;
177304
178305 const requestPromise = page . waitForRequest ( 'http://example.com/*' ) ;
179306 await page . locator ( '#xhrBtn' ) . click ( ) ;
@@ -195,11 +322,15 @@ sentryTest(
195322
196323 const url = await getLocalTestPath ( { testDir : __dirname } ) ;
197324
198- const pageloadEventPromise = getFirstSentryEnvelopeRequest < Event > ( page ) ;
325+ const pageloadEventPromise = getFirstSentryEnvelopeRequest < EventAndTraceHeader > (
326+ page ,
327+ undefined ,
328+ eventAndTraceHeaderRequestParser ,
329+ ) ;
199330 const requestPromise = page . waitForRequest ( 'http://example.com/*' ) ;
200331 await page . goto ( url ) ;
201332 await page . locator ( '#xhrBtn' ) . click ( ) ;
202- const [ pageloadEvent , request ] = await Promise . all ( [ pageloadEventPromise , requestPromise ] ) ;
333+ const [ [ pageloadEvent , pageloadTraceHeader ] , request ] = await Promise . all ( [ pageloadEventPromise , requestPromise ] ) ;
203334
204335 expect ( pageloadEvent ?. contexts ?. trace ) . toMatchObject ( {
205336 op : 'pageload' ,
@@ -208,6 +339,16 @@ sentryTest(
208339 span_id : expect . stringMatching ( / ^ [ 0 - 9 a - f ] { 16 } $ / ) ,
209340 } ) ;
210341
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+
211352 const headers = request . headers ( ) ;
212353
213354 // sampling decision is propagated from meta tag's sentry-trace sampled flag
0 commit comments