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()
22
22
{
23
23
lock ( _syncLock )
24
24
{
25
- // remove expired events
26
- _events . RemoveAll ( p => IsExpired ( p , _window ) ) ;
25
+ RemoveExpired ( ) ;
27
26
28
27
return _events . Select ( p => p . Item ) . ToList ( ) ;
29
28
}
@@ -38,10 +37,17 @@ public void AddEvent(TItem item)
38
37
} ;
39
38
lock ( _syncLock )
40
39
{
40
+ RemoveExpired ( ) ;
41
+
41
42
_events . Add ( evt ) ;
42
43
}
43
44
}
44
45
46
+ private void RemoveExpired ( )
47
+ {
48
+ _events . RemoveAll ( p => IsExpired ( p , _window ) ) ;
49
+ }
50
+
45
51
internal static bool IsExpired ( Event evt , TimeSpan window )
46
52
{
47
53
return ( DateTime . UtcNow . Ticks - evt . TimeStamp ) > window . Ticks ;
Original file line number Diff line number Diff line change 4
4
using System ;
5
5
using System . Collections . Generic ;
6
6
using System . Linq ;
7
+ using System . Reflection ;
7
8
using System . Text ;
8
9
using System . Threading . Tasks ;
9
10
using Xunit ;
@@ -42,6 +43,31 @@ public async Task GetEvents_RemovesExpiredItems()
42
43
Assert . Same ( evt , evts [ 0 ] ) ;
43
44
}
44
45
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
+
45
71
[ Theory ]
46
72
[ InlineData ( 0 , false ) ]
47
73
[ InlineData ( 3 , false ) ]
You can’t perform that action at this time.
0 commit comments