Skip to content

Commit bdbba9a

Browse files
Add unit test to test callback update: Make sure old callback isn't called again after updating
1 parent 4288c01 commit bdbba9a

File tree

1 file changed

+48
-6
lines changed

1 file changed

+48
-6
lines changed

projects/Test/Unit/TestTimerBasedCredentialRefresher.cs

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class MockCredentialsProvider : ICredentialsProvider
4343
private readonly ITestOutputHelper _testOutputHelper;
4444
private readonly TimeSpan? _validUntil = TimeSpan.FromSeconds(1);
4545
private Exception _ex = null;
46-
private bool _refreshCalled = false;
46+
private int _refreshCalledTimes = 0;
4747

4848
public MockCredentialsProvider(ITestOutputHelper testOutputHelper)
4949
{
@@ -56,11 +56,11 @@ public MockCredentialsProvider(ITestOutputHelper testOutputHelper, TimeSpan vali
5656
_validUntil = validUntil;
5757
}
5858

59-
public bool RefreshCalled
59+
public int RefreshCalledTimes
6060
{
6161
get
6262
{
63-
return _refreshCalled;
63+
return _refreshCalledTimes;
6464
}
6565
}
6666

@@ -87,7 +87,7 @@ public string Password
8787

8888
public void Refresh()
8989
{
90-
_refreshCalled = true;
90+
_refreshCalledTimes++;
9191
}
9292

9393
public void PasswordThrows(Exception ex)
@@ -145,7 +145,49 @@ Task cb(bool arg)
145145

146146
_refresher.Register(credentialsProvider, cb);
147147
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+
149191
Assert.True(_refresher.Unregister(credentialsProvider));
150192
}
151193
}
@@ -172,7 +214,7 @@ Task cb(bool arg)
172214

173215
_refresher.Register(credentialsProvider, cb);
174216
Assert.False(await tcs.Task);
175-
Assert.True(credentialsProvider.RefreshCalled);
217+
Assert.True(credentialsProvider.RefreshCalledTimes > 0);
176218
Assert.True(_refresher.Unregister(credentialsProvider));
177219
}
178220
}

0 commit comments

Comments
 (0)