File tree Expand file tree Collapse file tree 2 files changed +34
-2
lines changed
test/WebJobs.Script.Tests Expand file tree Collapse file tree 2 files changed +34
-2
lines changed Original file line number Diff line number Diff line change @@ -22,8 +22,7 @@ public IEnumerable<TItem> GetEvents()
2222 {
2323 lock ( _syncLock )
2424 {
25- // remove expired events
26- _events . RemoveAll ( p => IsExpired ( p , _window ) ) ;
25+ RemoveExpired ( ) ;
2726
2827 return _events . Select ( p => p . Item ) . ToList ( ) ;
2928 }
@@ -38,10 +37,17 @@ public void AddEvent(TItem item)
3837 } ;
3938 lock ( _syncLock )
4039 {
40+ RemoveExpired ( ) ;
41+
4142 _events . Add ( evt ) ;
4243 }
4344 }
4445
46+ private void RemoveExpired ( )
47+ {
48+ _events . RemoveAll ( p => IsExpired ( p , _window ) ) ;
49+ }
50+
4551 internal static bool IsExpired ( Event evt , TimeSpan window )
4652 {
4753 return ( DateTime . UtcNow . Ticks - evt . TimeStamp ) > window . Ticks ;
Original file line number Diff line number Diff line change 44using System ;
55using System . Collections . Generic ;
66using System . Linq ;
7+ using System . Reflection ;
78using System . Text ;
89using System . Threading . Tasks ;
910using Xunit ;
@@ -42,6 +43,31 @@ public async Task GetEvents_RemovesExpiredItems()
4243 Assert . Same ( evt , evts [ 0 ] ) ;
4344 }
4445
46+ [ Fact ]
47+ public async Task AddEvent_RemovesExpiredItems ( )
48+ {
49+ var window = new SlidingWindow < MyItem > ( TimeSpan . FromSeconds ( 1 ) ) ;
50+
51+ for ( int i = 0 ; i < 5 ; i ++ )
52+ {
53+ window . AddEvent ( new MyItem { Data = i } ) ;
54+ await Task . Delay ( 100 ) ;
55+ }
56+
57+ var eventsField = window . GetType ( ) . GetField ( "_events" , BindingFlags . Instance | BindingFlags . NonPublic ) ;
58+ var events = ( List < SlidingWindow < MyItem > . Event > ) eventsField . GetValue ( window ) ;
59+ Assert . Equal ( 5 , events . Count ) ;
60+
61+ // now let the items expire
62+ await Task . Delay ( 1000 ) ;
63+
64+ // add a new event that shouldn't be expired
65+ var evt = new MyItem { Data = 7 } ;
66+ window . AddEvent ( evt ) ;
67+
68+ Assert . Equal ( 1 , events . Count ) ;
69+ }
70+
4571 [ Theory ]
4672 [ InlineData ( 0 , false ) ]
4773 [ InlineData ( 3 , false ) ]
You can’t perform that action at this time.
0 commit comments