@@ -162,53 +162,60 @@ public async Task MergingParserWithMergeKeyBomb_ShouldThrowExceptionWhenTooManyE
162162 // Timebox this test to avoid infinite loops in case of bugs.
163163 // 30 seconds should be more than enough for this test to run even on a slow machine, and if it takes longer than that,
164164 // it's likely that the merging parser is not correctly counting events and enforcing the limit.
165- var cancellationTokenSource = new CancellationTokenSource ( TimeSpan . FromSeconds ( 30 ) ) ;
165+ var cancellationTokenSource = new CancellationTokenSource ( TimeSpan . FromSeconds ( 60 ) ) ;
166166 cancellationTokenSource . Token . Register ( ( ) =>
167167 {
168168 throw new TimeoutException ( "The test took too long, likely due to an infinite loop in the merging parser." ) ;
169169 } ) ;
170170
171- await Task . Run ( ( ) =>
171+ try
172172 {
173- var sb = new StringBuilder ( ) ;
174-
175- // Base anchor
176- sb . AppendLine ( "a0: &a0" ) ;
177- sb . AppendLine ( " x: 1" ) ;
178- sb . AppendLine ( ) ;
179-
180- // Each level merges the previous anchor TWICE (fanout=2), doubling event count
181- for ( int i = 1 ; i <= 25 ; i ++ )
173+ await Task . Run ( ( ) =>
182174 {
183- sb . AppendLine ( $ "a{ i } : &a{ i } ") ;
184- sb . AppendLine ( $ " <<: *a{ i - 1 } ") ; // first merge
185- sb . AppendLine ( $ " <<: *a{ i - 1 } ") ; // second merge
175+ var sb = new StringBuilder ( ) ;
176+
177+ // Base anchor
178+ sb . AppendLine ( "a0: &a0" ) ;
179+ sb . AppendLine ( " x: 1" ) ;
186180 sb . AppendLine ( ) ;
187- }
188181
189- sb . AppendLine ( "final:" ) ;
190- sb . AppendLine ( " <<: *a25" ) ;
182+ // Each level merges the previous anchor TWICE (fanout=2), doubling event count
183+ for ( int i = 1 ; i <= 25 ; i ++ )
184+ {
185+ sb . AppendLine ( $ "a{ i } : &a{ i } ") ;
186+ sb . AppendLine ( $ " <<: *a{ i - 1 } ") ; // first merge
187+ sb . AppendLine ( $ " <<: *a{ i - 1 } ") ; // second merge
188+ sb . AppendLine ( ) ;
189+ }
191190
192- var yaml = sb . ToString ( ) ;
193- var parser = new Parser ( new StringReader ( yaml ) ) ;
194- var mergingParser = new MergingParser ( parser , 1000 ) ;
195- try
196- {
197- while ( mergingParser . MoveNext ( ) )
191+ sb . AppendLine ( "final:" ) ;
192+ sb . AppendLine ( " <<: *a25" ) ;
193+
194+ var yaml = sb . ToString ( ) ;
195+ var parser = new Parser ( new StringReader ( yaml ) ) ;
196+ var mergingParser = new MergingParser ( parser , 1000 ) ;
197+ try
198198 {
199- //move through everything, we're in a timebox so if this takes too long, the cancellation token will trigger and fail the test
199+ while ( mergingParser . MoveNext ( ) )
200+ {
201+ //move through everything, we're in a timebox so if this takes too long, the cancellation token will trigger and fail the test
202+ }
200203 }
201- }
202- catch ( YamlException ex ) when ( ex . Message . Contains ( "Too many parsing events" ) )
203- {
204- // Expected exception, test passes
205- return ;
206- }
207- catch ( Exception ex )
208- {
209- throw new Exception ( $ "Unexpected exception", ex ) ;
210- }
211- } , cancellationTokenSource . Token ) ;
204+ catch ( YamlException ex ) when ( ex . Message . Contains ( "Too many parsing events" ) )
205+ {
206+ // Expected exception, test passes
207+ return ;
208+ }
209+ catch ( Exception ex )
210+ {
211+ throw new Exception ( $ "Unexpected exception", ex ) ;
212+ }
213+ } , cancellationTokenSource . Token ) ;
214+ }
215+ catch ( TimeoutException ex )
216+ {
217+ Assert . Fail ( $ "Test failed due to timeout: { ex . Message } ") ;
218+ }
212219 }
213220
214221 [ Fact ]
@@ -217,42 +224,51 @@ public async Task MergingParserWithManySmallMerges_ShouldThrowExceptionWhenCumul
217224 // Timebox this test to avoid infinite loops in case of bugs.
218225 // 30 seconds should be more than enough for this test to run even on a slow machine, and if it takes longer than that,
219226 // it's likely that the merging parser is not correctly counting events and enforcing the limit.
220- var cancellationTokenSource = new CancellationTokenSource ( TimeSpan . FromSeconds ( 30 ) ) ;
227+ var cancellationTokenSource = new CancellationTokenSource ( TimeSpan . FromSeconds ( 60 ) ) ;
221228 cancellationTokenSource . Token . Register ( ( ) =>
222229 {
223230 throw new TimeoutException ( "The test took too long, likely due to an infinite loop in the merging parser." ) ;
224231 } ) ;
225232
226- await Task . Run ( ( ) =>
233+ try
227234 {
228- var sb = new StringBuilder ( ) ;
229- sb . AppendLine ( "base: &base" ) ;
230- for ( var i = 0 ; i < 25 ; i ++ )
235+ await Task . Run ( ( ) =>
231236 {
232- sb . AppendLine ( $ " k{ i } : v{ i } ") ;
233- }
237+ var sb = new StringBuilder ( ) ;
238+ sb . AppendLine ( "base: &base" ) ;
239+ for ( var i = 0 ; i < 25 ; i ++ )
240+ {
241+ sb . AppendLine ( $ " k{ i } : v{ i } ") ;
242+ }
234243
235- sb . AppendLine ( ) ;
236- for ( var i = 0 ; i < 35 ; i ++ )
237- {
238- sb . AppendLine ( $ "entry{ i } :") ;
239- sb . AppendLine ( " <<: *base" ) ;
240244 sb . AppendLine ( ) ;
241- }
242-
243- var parser = new Parser ( new StringReader ( sb . ToString ( ) ) ) ;
244- var mergingParser = new MergingParser ( parser , 1000 ) ;
245-
246- Action parse = ( ) =>
247- {
248- while ( mergingParser . MoveNext ( ) )
245+ for ( var i = 0 ; i < 35 ; i ++ )
249246 {
247+ sb . AppendLine ( $ "entry{ i } :") ;
248+ sb . AppendLine ( " <<: *base" ) ;
249+ sb . AppendLine ( ) ;
250250 }
251- } ;
252251
253- parse . Should ( ) . Throw < YamlException > ( )
254- . Where ( ex => ex . Message . Contains ( "Too many parsing events" ) ) ;
255- } , cancellationTokenSource . Token ) ;
252+ var parser = new Parser ( new StringReader ( sb . ToString ( ) ) ) ;
253+ var mergingParser = new MergingParser ( parser , 1000 ) ;
254+ var totalParsedEvents = 0 ;
255+ Action parse = ( ) =>
256+ {
257+ while ( mergingParser . MoveNext ( ) )
258+ {
259+ totalParsedEvents ++ ;
260+ }
261+ } ;
262+
263+ parse . Should ( ) . Throw < YamlException > ( )
264+ . Where ( ex => ex . Message . Contains ( "Too many parsing events" ) ) ;
265+ Console . WriteLine ( $ "Total parsed events before exception: { totalParsedEvents } ") ;
266+ } , cancellationTokenSource . Token ) ;
267+ }
268+ catch ( TimeoutException ex )
269+ {
270+ Assert . Fail ( $ "Test failed due to timeout: { ex . Message } ") ;
271+ }
256272 }
257273
258274 [ Fact ]
0 commit comments