@@ -43,7 +43,7 @@ public class MockCredentialsProvider : ICredentialsProvider
43
43
private readonly ITestOutputHelper _testOutputHelper ;
44
44
private readonly TimeSpan ? _validUntil = TimeSpan . FromSeconds ( 1 ) ;
45
45
private Exception _ex = null ;
46
- private bool _refreshCalled = false ;
46
+ private int _refreshCalledTimes = 0 ;
47
47
48
48
public MockCredentialsProvider ( ITestOutputHelper testOutputHelper )
49
49
{
@@ -56,11 +56,11 @@ public MockCredentialsProvider(ITestOutputHelper testOutputHelper, TimeSpan vali
56
56
_validUntil = validUntil ;
57
57
}
58
58
59
- public bool RefreshCalled
59
+ public int RefreshCalledTimes
60
60
{
61
61
get
62
62
{
63
- return _refreshCalled ;
63
+ return _refreshCalledTimes ;
64
64
}
65
65
}
66
66
@@ -87,7 +87,7 @@ public string Password
87
87
88
88
public void Refresh ( )
89
89
{
90
- _refreshCalled = true ;
90
+ _refreshCalledTimes ++ ;
91
91
}
92
92
93
93
public void PasswordThrows ( Exception ex )
@@ -145,7 +145,49 @@ Task cb(bool arg)
145
145
146
146
_refresher . Register ( credentialsProvider , cb ) ;
147
147
Assert . True ( await tcs . Task ) ;
148
- Assert . True ( credentialsProvider . RefreshCalled ) ;
148
+ Assert . True ( credentialsProvider . RefreshCalledTimes > 0 ) ;
149
+ Assert . True ( _refresher . Unregister ( credentialsProvider ) ) ;
150
+ }
151
+ }
152
+ }
153
+
154
+ [ Fact ]
155
+ public async Task TestRefreshTokenUpdateCallback ( )
156
+ {
157
+ var tcs1 = new TaskCompletionSource < bool > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
158
+ var tcs2 = new TaskCompletionSource < bool > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
159
+ int cb1CalledTimes = 0 ;
160
+ int cb2CalledTimes = 0 ;
161
+
162
+ using ( var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 5 ) ) )
163
+ {
164
+ using ( CancellationTokenRegistration ctr = cts . Token . Register ( ( ) => { tcs1 . TrySetCanceled ( ) ; tcs2 . TrySetCanceled ( ) ; } ) ) {
165
+ var credentialsProvider = new MockCredentialsProvider ( _testOutputHelper , TimeSpan . FromSeconds ( 1 ) ) ;
166
+
167
+ Task cb1 ( bool arg )
168
+ {
169
+ cb1CalledTimes ++ ;
170
+ tcs1 . SetResult ( arg ) ;
171
+ return Task . CompletedTask ;
172
+ }
173
+
174
+ Task cb2 ( bool arg )
175
+ {
176
+ cb2CalledTimes ++ ;
177
+ tcs2 . SetResult ( arg ) ;
178
+ return Task . CompletedTask ;
179
+ }
180
+
181
+ _refresher . Register ( credentialsProvider , cb1 ) ;
182
+ Assert . True ( await tcs1 . Task ) ;
183
+ Assert . True ( credentialsProvider . RefreshCalledTimes == 1 ) ;
184
+ Assert . True ( cb1CalledTimes == 1 ) ;
185
+ _refresher . Register ( credentialsProvider , cb2 ) ;
186
+ Assert . True ( await tcs2 . Task ) ;
187
+ Assert . True ( credentialsProvider . RefreshCalledTimes == 2 ) ;
188
+ Assert . True ( cb2CalledTimes == 1 ) ;
189
+ Assert . True ( cb1CalledTimes == 1 ) ;
190
+
149
191
Assert . True ( _refresher . Unregister ( credentialsProvider ) ) ;
150
192
}
151
193
}
@@ -172,7 +214,7 @@ Task cb(bool arg)
172
214
173
215
_refresher . Register ( credentialsProvider , cb ) ;
174
216
Assert . False ( await tcs . Task ) ;
175
- Assert . True ( credentialsProvider . RefreshCalled ) ;
217
+ Assert . True ( credentialsProvider . RefreshCalledTimes > 0 ) ;
176
218
Assert . True ( _refresher . Unregister ( credentialsProvider ) ) ;
177
219
}
178
220
}
0 commit comments