@@ -210,15 +210,14 @@ public async Task DistinctUntilChanged_ShouldFilterConsecutiveDuplicates()
210210 ILeaderElectionService service = services . GetRequiredService < ILeaderElectionService > ( ) ;
211211 var events = new List < LeadershipChangedEventArgs > ( ) ;
212212 object eventsLock = new ( ) ;
213- using var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 5 ) ) ;
213+ using var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 10 ) ) ;
214214
215215 // Act - Start listening BEFORE starting service
216216 CancellationToken cancellationToken = cts . Token ;
217217 var eventTask = Task . Run ( async ( ) =>
218218 {
219219 await foreach ( LeadershipChangedEventArgs e in service . GetLeadershipChangesAsync ( cancellationToken )
220- . DistinctUntilChanged ( cancellationToken )
221- . Take ( 2 , cancellationToken ) )
220+ . DistinctUntilChanged ( cancellationToken ) )
222221 {
223222 lock ( eventsLock )
224223 {
@@ -228,12 +227,18 @@ public async Task DistinctUntilChanged_ShouldFilterConsecutiveDuplicates()
228227 } , cancellationToken ) ;
229228
230229 // Give the async enumerable consumer time to start
231- await Task . Delay ( TimeSpan . FromMilliseconds ( 50 ) , cts . Token ) ;
230+ await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) , cancellationToken ) ;
232231
233- await service . StartAsync ( cts . Token ) ;
234- await service . WaitForLeadershipAsync ( cts . Token ) ;
235- await service . StopAsync ( cts . Token ) ;
236- await TestHelpers . WaitForConditionAsync ( ( ) => events . Count >= 1 , TimeSpan . FromSeconds ( 5 ) , cts . Token , eventsLock ) ;
232+ await service . StartAsync ( cancellationToken ) ;
233+ await service . WaitForLeadershipAsync ( cancellationToken ) ;
234+
235+ // Wait for the first event (gained leadership)
236+ await TestHelpers . WaitForConditionAsync ( ( ) => events . Count >= 1 , TimeSpan . FromSeconds ( 3 ) , cancellationToken , eventsLock ) ;
237+
238+ await service . StopAsync ( cancellationToken ) ;
239+
240+ // Wait for the second event (lost leadership)
241+ await TestHelpers . WaitForConditionAsync ( ( ) => events . Count >= 2 , TimeSpan . FromSeconds ( 3 ) , cancellationToken , eventsLock ) ;
237242
238243 // Cleanup - Cancel and wait for event task to complete before asserting
239244 await cts . CancelAsync ( ) ;
@@ -245,7 +250,9 @@ public async Task DistinctUntilChanged_ShouldFilterConsecutiveDuplicates()
245250 {
246251 eventSnapshot = events . ToArray ( ) ;
247252 }
248- eventSnapshot . Length . ShouldBeGreaterThanOrEqualTo ( 1 ) ;
253+ eventSnapshot . Length . ShouldBeGreaterThanOrEqualTo ( 2 ) ;
254+ eventSnapshot [ 0 ] . BecameLeader . ShouldBeTrue ( ) ;
255+ eventSnapshot [ 1 ] . LostLeadership . ShouldBeTrue ( ) ;
249256
250257 await services . DisposeAsync ( ) ;
251258 }
0 commit comments