@@ -89,86 +89,83 @@ sentryTest(
8989 } ,
9090) ;
9191
92- sentryTest (
93- 'buffer mode remains after interrupting replay flush' ,
94- async ( { getLocalTestUrl, page, browserName } ) => {
95- if ( shouldSkipReplayTest ( ) || browserName === 'webkit' ) {
96- sentryTest . skip ( ) ;
97- }
98-
99- let errorCount = 0 ;
100- let replayCount = 0 ;
101- const errorEventIds : string [ ] = [ ] ;
102- const replayIds : string [ ] = [ ] ;
103- let firstReplayEventResolved : ( value ?: unknown ) => void = ( ) => { } ;
104- // Need TS 5.7 for withResolvers
105- const firstReplayEventPromise = new Promise ( resolve => {
106- firstReplayEventResolved = resolve ;
107- } ) ;
108-
109- const url = await getLocalTestUrl ( { testDir : __dirname , skipDsnRouteHandler : true } ) ;
110-
111- await page . route ( 'https://dsn.ingest.sentry.io/**/*' , async route => {
112- const event = envelopeRequestParser ( route . request ( ) ) ;
113-
114- // Track error events
115- if ( event && ! event . type && event . event_id ) {
116- errorCount ++ ;
117- errorEventIds . push ( event . event_id ) ;
118- if ( event . tags ?. replayId ) {
119- replayIds . push ( event . tags . replayId as string ) ;
120- }
92+ sentryTest ( 'buffer mode remains after interrupting replay flush' , async ( { getLocalTestUrl, page, browserName } ) => {
93+ if ( shouldSkipReplayTest ( ) || browserName === 'webkit' ) {
94+ sentryTest . skip ( ) ;
95+ }
96+
97+ let errorCount = 0 ;
98+ let replayCount = 0 ;
99+ const errorEventIds : string [ ] = [ ] ;
100+ const replayIds : string [ ] = [ ] ;
101+ let firstReplayEventResolved : ( value ?: unknown ) => void = ( ) => { } ;
102+ // Need TS 5.7 for withResolvers
103+ const firstReplayEventPromise = new Promise ( resolve => {
104+ firstReplayEventResolved = resolve ;
105+ } ) ;
106+
107+ const url = await getLocalTestUrl ( { testDir : __dirname , skipDsnRouteHandler : true } ) ;
108+
109+ await page . route ( 'https://dsn.ingest.sentry.io/**/*' , async route => {
110+ const event = envelopeRequestParser ( route . request ( ) ) ;
111+
112+ // Track error events
113+ if ( event && ! event . type && event . event_id ) {
114+ errorCount ++ ;
115+ errorEventIds . push ( event . event_id ) ;
116+ if ( event . tags ?. replayId ) {
117+ replayIds . push ( event . tags . replayId as string ) ;
121118 }
119+ }
122120
123- // Track replay events and simulate failure for the first replay
124- if ( event && isReplayEvent ( event ) ) {
125- replayCount ++ ;
126- if ( replayCount === 1 ) {
127- firstReplayEventResolved ( ) ;
128- // intentional so that it never resolves, we'll force a reload instead to interrupt the normal flow
129- await new Promise ( resolve => setTimeout ( resolve , 100000 ) ) ;
130- }
121+ // Track replay events and simulate failure for the first replay
122+ if ( event && isReplayEvent ( event ) ) {
123+ replayCount ++ ;
124+ if ( replayCount === 1 ) {
125+ firstReplayEventResolved ( ) ;
126+ // intentional so that it never resolves, we'll force a reload instead to interrupt the normal flow
127+ await new Promise ( resolve => setTimeout ( resolve , 100000 ) ) ;
131128 }
129+ }
132130
133- // Success for other requests
134- return route . fulfill ( {
135- status : 200 ,
136- contentType : 'application/json' ,
137- body : JSON . stringify ( { id : 'test-id' } ) ,
138- } ) ;
131+ // Success for other requests
132+ return route . fulfill ( {
133+ status : 200 ,
134+ contentType : 'application/json' ,
135+ body : JSON . stringify ( { id : 'test-id' } ) ,
139136 } ) ;
140-
141- await page . goto ( url ) ;
142-
143- // Wait for replay to initialize
144- await waitForReplayRunning ( page ) ;
145-
146- await page . locator ( '#error1' ) . click ( ) ;
147- await firstReplayEventPromise ;
148- expect ( errorCount ) . toBe ( 1 ) ;
149- expect ( replayCount ) . toBe ( 1 ) ;
150- expect ( replayIds ) . toHaveLength ( 1 ) ;
151-
152- // Get the first session info
153- const firstSession = await getReplaySnapshot ( page ) ;
154- const firstSessionId = firstSession . session ?. id ;
155- expect ( firstSessionId ) . toBeDefined ( ) ;
156- expect ( firstSession . session ?. sampled ) . toBe ( 'buffer' ) ;
157- expect ( firstSession . session ?. dirty ) . toBe ( true ) ;
158- expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ; // But still in buffer mode
159-
160- await page . reload ( ) ;
161- await waitForReplayRunning ( page ) ;
162- const secondSession = await getReplaySnapshot ( page ) ;
163- expect ( secondSession . session ?. sampled ) . toBe ( 'buffer' ) ;
164- expect ( secondSession . session ?. dirty ) . toBe ( true ) ;
165- expect ( secondSession . session ?. id ) . toBe ( firstSessionId ) ;
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' ) ;
170- } ,
171- ) ;
137+ } ) ;
138+
139+ await page . goto ( url ) ;
140+
141+ // Wait for replay to initialize
142+ await waitForReplayRunning ( page ) ;
143+
144+ await page . locator ( '#error1' ) . click ( ) ;
145+ await firstReplayEventPromise ;
146+ expect ( errorCount ) . toBe ( 1 ) ;
147+ expect ( replayCount ) . toBe ( 1 ) ;
148+ expect ( replayIds ) . toHaveLength ( 1 ) ;
149+
150+ // Get the first session info
151+ const firstSession = await getReplaySnapshot ( page ) ;
152+ const firstSessionId = firstSession . session ?. id ;
153+ expect ( firstSessionId ) . toBeDefined ( ) ;
154+ expect ( firstSession . session ?. sampled ) . toBe ( 'buffer' ) ;
155+ expect ( firstSession . session ?. dirty ) . toBe ( true ) ;
156+ expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ; // But still in buffer mode
157+
158+ await page . reload ( ) ;
159+ await waitForReplayRunning ( page ) ;
160+ const secondSession = await getReplaySnapshot ( page ) ;
161+ expect ( secondSession . session ?. sampled ) . toBe ( 'buffer' ) ;
162+ expect ( secondSession . session ?. dirty ) . toBe ( true ) ;
163+ expect ( secondSession . session ?. id ) . toBe ( firstSessionId ) ;
164+ expect ( secondSession . session ?. segmentId ) . toBe ( 1 ) ;
165+ // Because a flush attempt was made and not allowed to complete, segmentId increased from 0,
166+ // so we resume in session mode
167+ expect ( secondSession . recordingMode ) . toBe ( 'session' ) ;
168+ } ) ;
172169
173170sentryTest (
174171 'starts a new session after interrupting replay flush and session "expires"' ,
0 commit comments