9
9
} from '../../../utils/replayHelpers' ;
10
10
11
11
sentryTest (
12
- 'buffer mode turns into session mode after interrupting error event ingest, and resumes session on reload ' ,
12
+ 'buffer mode remains after interrupting error event ingest' ,
13
13
async ( { getLocalTestUrl, page, browserName } ) => {
14
14
if ( shouldSkipReplayTest ( ) || browserName === 'webkit' ) {
15
15
sentryTest . skip ( ) ;
@@ -63,32 +63,34 @@ sentryTest(
63
63
// Wait for replay to initialize
64
64
await waitForReplayRunning ( page ) ;
65
65
66
- // Trigger first error - this should change session sampled to "session"
67
66
waitForErrorRequest ( page ) ;
68
67
await page . locator ( '#error1' ) . click ( ) ;
68
+
69
+ // This resolves, but the route doesn't get fulfilled as we want the reload to "interrupt" this flow
69
70
await firstReplayEventPromise ;
70
71
expect ( errorCount ) . toBe ( 1 ) ;
71
72
expect ( replayCount ) . toBe ( 0 ) ;
72
73
expect ( replayIds ) . toHaveLength ( 1 ) ;
73
74
74
- // Get the first session info
75
75
const firstSession = await getReplaySnapshot ( page ) ;
76
76
const firstSessionId = firstSession . session ?. id ;
77
77
expect ( firstSessionId ) . toBeDefined ( ) ;
78
- expect ( firstSession . session ?. sampled ) . toBe ( 'session' ) ; // Should be marked as 'session'
79
- expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ; // But still in buffer mode
78
+ expect ( firstSession . session ?. sampled ) . toBe ( 'buffer' ) ;
79
+ expect ( firstSession . session ?. dirty ) . toBe ( true ) ;
80
+ expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ;
80
81
81
82
await page . reload ( ) ;
82
83
const secondSession = await getReplaySnapshot ( page ) ;
83
- expect ( secondSession . session ?. sampled ) . toBe ( 'session' ) ;
84
- expect ( secondSession . recordingMode ) . toBe ( 'session' ) ; // this turns to "session" because of `sampled` value being "session"
84
+ expect ( secondSession . session ?. sampled ) . toBe ( 'buffer' ) ;
85
+ expect ( secondSession . session ?. dirty ) . toBe ( true ) ;
86
+ expect ( secondSession . recordingMode ) . toBe ( 'buffer' ) ;
85
87
expect ( secondSession . session ?. id ) . toBe ( firstSessionId ) ;
86
88
expect ( secondSession . session ?. segmentId ) . toBe ( 0 ) ;
87
89
} ,
88
90
) ;
89
91
90
- sentryTest (
91
- 'buffer mode turns into session mode after interrupting replay flush, and resumes session on reload ' ,
92
+ sentryTest . only (
93
+ 'buffer mode remains after interrupting replay flush' ,
92
94
async ( { getLocalTestUrl, page, browserName } ) => {
93
95
if ( shouldSkipReplayTest ( ) || browserName === 'webkit' ) {
94
96
sentryTest . skip ( ) ;
@@ -141,7 +143,6 @@ sentryTest(
141
143
// Wait for replay to initialize
142
144
await waitForReplayRunning ( page ) ;
143
145
144
- // Trigger first error - this should change session sampled to "session"
145
146
await page . locator ( '#error1' ) . click ( ) ;
146
147
await firstReplayEventPromise ;
147
148
expect ( errorCount ) . toBe ( 1 ) ;
@@ -152,15 +153,20 @@ sentryTest(
152
153
const firstSession = await getReplaySnapshot ( page ) ;
153
154
const firstSessionId = firstSession . session ?. id ;
154
155
expect ( firstSessionId ) . toBeDefined ( ) ;
155
- expect ( firstSession . session ?. sampled ) . toBe ( 'session' ) ; // Should be marked as 'session'
156
+ expect ( firstSession . session ?. sampled ) . toBe ( 'buffer' ) ;
157
+ expect ( firstSession . session ?. dirty ) . toBe ( true ) ;
156
158
expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ; // But still in buffer mode
157
159
158
160
await page . reload ( ) ;
161
+ await waitForReplayRunning ( page ) ;
159
162
const secondSession = await getReplaySnapshot ( page ) ;
160
- expect ( secondSession . session ?. sampled ) . toBe ( 'session ' ) ;
161
- expect ( secondSession . recordingMode ) . toBe ( 'session' ) ; // this turns to "session" because of `sampled` value being "session"
163
+ expect ( secondSession . session ?. sampled ) . toBe ( 'buffer ' ) ;
164
+ expect ( secondSession . session ?. dirty ) . toBe ( true ) ;
162
165
expect ( secondSession . session ?. id ) . toBe ( firstSessionId ) ;
163
166
expect ( secondSession . session ?. segmentId ) . toBe ( 1 ) ;
167
+ // Because a flush attempt was made and not allowed to complete, segmentId increased from 0,
168
+ // so we resume in session mode
169
+ expect ( secondSession . recordingMode ) . toBe ( 'session' ) ;
164
170
} ,
165
171
) ;
166
172
@@ -229,7 +235,8 @@ sentryTest(
229
235
const firstSession = await getReplaySnapshot ( page ) ;
230
236
const firstSessionId = firstSession . session ?. id ;
231
237
expect ( firstSessionId ) . toBeDefined ( ) ;
232
- expect ( firstSession . session ?. sampled ) . toBe ( 'session' ) ; // Should be marked as 'session'
238
+ expect ( firstSession . session ?. sampled ) . toBe ( 'buffer' ) ;
239
+ expect ( firstSession . session ?. dirty ) . toBe ( true ) ;
233
240
expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ; // But still in buffer mode
234
241
235
242
// Now expire the session by manipulating session storage
@@ -266,7 +273,7 @@ sentryTest(
266
273
) ;
267
274
268
275
sentryTest (
269
- '[buffer-mode] marks session as sampled immediately when error is sampled' ,
276
+ 'marks session as dirty immediately when error is sampled in buffer mode ' ,
270
277
async ( { getLocalTestUrl, page, browserName } ) => {
271
278
if ( shouldSkipReplayTest ( ) || browserName === 'webkit' ) {
272
279
sentryTest . skip ( ) ;
@@ -296,18 +303,18 @@ sentryTest(
296
303
const reqErrorPromise = waitForErrorRequest ( page ) ;
297
304
await page . locator ( '#error1' ) . click ( ) ;
298
305
299
- // Check session state BEFORE waiting for error to be sent
300
- // The session should already be marked as 'session' synchronously
301
306
const duringErrorProcessing = await getReplaySnapshot ( page ) ;
302
- expect ( duringErrorProcessing . session ?. sampled ) . toBe ( 'session' ) ;
307
+ expect ( duringErrorProcessing . session ?. sampled ) . toBe ( 'buffer' ) ;
308
+ expect ( duringErrorProcessing . session ?. dirty ) . toBe ( true ) ;
303
309
expect ( duringErrorProcessing . recordingMode ) . toBe ( 'buffer' ) ; // Still in buffer recording mode
304
310
305
311
await reqErrorPromise ;
306
312
307
313
// After error is sent, verify state is still correct
308
314
const afterError = await getReplaySnapshot ( page ) ;
309
- expect ( afterError . session ?. sampled ) . toBe ( 'session ' ) ;
315
+ expect ( afterError . session ?. sampled ) . toBe ( 'buffer ' ) ;
310
316
expect ( afterError . recordingMode ) . toBe ( 'session' ) ;
317
+ expect ( afterError . session ?. dirty ) . toBe ( false ) ;
311
318
312
319
// Verify the session was persisted to sessionStorage (if sticky sessions enabled)
313
320
const sessionData = await page . evaluate ( ( ) => {
@@ -317,6 +324,7 @@ sentryTest(
317
324
} ) ;
318
325
319
326
expect ( sessionData ) . toBeDefined ( ) ;
320
- expect ( sessionData . sampled ) . toBe ( 'session' ) ;
327
+ expect ( sessionData . sampled ) . toBe ( 'buffer' ) ;
328
+ expect ( sessionData . dirty ) . toBe ( false ) ;
321
329
} ,
322
330
) ;
0 commit comments