Skip to content

Commit

Permalink
fixup
Browse files Browse the repository at this point in the history
  • Loading branch information
lukebakken committed Jan 24, 2024
1 parent 21d3110 commit 7333475
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 22 deletions.
11 changes: 6 additions & 5 deletions projects/RabbitMQ.Client/client/api/ICredentialsRefresher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,15 @@
using System.Collections.Concurrent;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Tracing;
using System.Threading.Tasks;
namespace RabbitMQ.Client
{
public interface ICredentialsRefresher
{
ICredentialsProvider Register(ICredentialsProvider provider, NotifyCredentialRefreshed callback);
ICredentialsProvider Register(ICredentialsProvider provider, NotifyCredentialRefreshedAsync callback);
bool Unregister(ICredentialsProvider provider);

delegate void NotifyCredentialRefreshed(bool successfully);
delegate Task NotifyCredentialRefreshedAsync(bool successfully);
}

[EventSource(Name = "TimerBasedCredentialRefresher")]
Expand Down Expand Up @@ -72,7 +73,7 @@ public class TimerBasedCredentialRefresher : ICredentialsRefresher
{
private readonly ConcurrentDictionary<ICredentialsProvider, System.Timers.Timer> _registrations = new ConcurrentDictionary<ICredentialsProvider, System.Timers.Timer>();

public ICredentialsProvider Register(ICredentialsProvider provider, ICredentialsRefresher.NotifyCredentialRefreshed callback)
public ICredentialsProvider Register(ICredentialsProvider provider, ICredentialsRefresher.NotifyCredentialRefreshedAsync callback)
{
if (!provider.ValidUntil.HasValue || provider.ValidUntil.Value.Equals(TimeSpan.Zero))
{
Expand Down Expand Up @@ -112,7 +113,7 @@ public bool Unregister(ICredentialsProvider provider)
}
}

private System.Timers.Timer scheduleTimer(ICredentialsProvider provider, ICredentialsRefresher.NotifyCredentialRefreshed callback)
private System.Timers.Timer scheduleTimer(ICredentialsProvider provider, ICredentialsRefresher.NotifyCredentialRefreshedAsync callback)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = provider.ValidUntil.Value.TotalMilliseconds * (1.0 - (1 / 3.0));
Expand Down Expand Up @@ -142,7 +143,7 @@ private System.Timers.Timer scheduleTimer(ICredentialsProvider provider, ICreden

class NoOpCredentialsRefresher : ICredentialsRefresher
{
public ICredentialsProvider Register(ICredentialsProvider provider, ICredentialsRefresher.NotifyCredentialRefreshed callback)
public ICredentialsProvider Register(ICredentialsProvider provider, ICredentialsRefresher.NotifyCredentialRefreshedAsync callback)
{
return provider;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,11 +200,11 @@ internal Task CloseFrameHandlerAsync()
}

///<summary>API-side invocation of updating the secret.</summary>
public void UpdateSecret(string newSecret, string reason)
public Task UpdateSecretAsync(string newSecret, string reason)
{
ThrowIfDisposed();
EnsureIsOpen();
_innerConnection.UpdateSecret(newSecret, reason);
return _innerConnection.UpdateSecretAsync(newSecret, reason);
}

///<summary>Asynchronous API-side invocation of connection.close with timeout.</summary>
Expand Down
34 changes: 19 additions & 15 deletions projects/Test/Unit/TestTimerBasedCredentialRefresher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
//---------------------------------------------------------------------------

using System;
using System.Threading;
using System.Threading.Tasks;
using RabbitMQ.Client;
using Xunit;
using Xunit.Abstractions;
Expand Down Expand Up @@ -108,7 +108,7 @@ public TestTimerBasedCredentialsRefresher(ITestOutputHelper testOutputHelper)
[Fact]
public void TestRegister()
{
ICredentialsRefresher.NotifyCredentialRefreshed cb = (bool unused) => { };
Task cb(bool unused) => Task.CompletedTask;
ICredentialsProvider credentialsProvider = new MockCredentialsProvider(_testOutputHelper);

Assert.True(credentialsProvider == _refresher.Register(credentialsProvider, cb));
Expand All @@ -119,30 +119,32 @@ public void TestRegister()
public void TestDoNotRegisterWhenHasNoExpiry()
{
ICredentialsProvider credentialsProvider = new MockCredentialsProvider(_testOutputHelper, TimeSpan.Zero);
ICredentialsRefresher.NotifyCredentialRefreshed cb = (bool unused) => { };
Task cb(bool unused) => Task.CompletedTask;

_refresher.Register(credentialsProvider, cb);

Assert.False(_refresher.Unregister(credentialsProvider));
}

[Fact]
public void TestRefreshToken()
public async Task TestRefreshToken()
{
var cbevt = new ManualResetEvent(false);
var cbtcs = new TaskCompletionSource<bool>();
bool? callbackArg = null;
var credentialsProvider = new MockCredentialsProvider(_testOutputHelper, TimeSpan.FromSeconds(1));
ICredentialsRefresher.NotifyCredentialRefreshed cb = (bool arg) =>
Task cb(bool arg)
{
callbackArg = arg;
cbevt.Set();
};
cbtcs.SetResult(true);
return Task.CompletedTask;
}

try
{
_refresher.Register(credentialsProvider, cb);

Assert.True(cbevt.WaitOne());
await cbtcs.Task.WaitAsync(TimeSpan.FromSeconds(5));
Assert.True(await cbtcs.Task);

Assert.True(credentialsProvider.RefreshCalled);
Assert.True(callbackArg);
Expand All @@ -154,24 +156,26 @@ public void TestRefreshToken()
}

[Fact]
public void TestRefreshTokenFailed()
public async Task TestRefreshTokenFailed()
{
var cbevt = new ManualResetEvent(false);
var cbtcs = new TaskCompletionSource<bool>();
bool? callbackArg = null;
var credentialsProvider = new MockCredentialsProvider(_testOutputHelper, TimeSpan.FromSeconds(1));
ICredentialsRefresher.NotifyCredentialRefreshed cb = (bool arg) =>
Task cb(bool arg)
{
callbackArg = arg;
cbevt.Set();
};
cbtcs.SetResult(true);
return Task.CompletedTask;
}

var ex = new Exception();
credentialsProvider.PasswordThrows(ex);

try
{
_refresher.Register(credentialsProvider, cb);
Assert.True(cbevt.WaitOne());
await cbtcs.Task.WaitAsync(TimeSpan.FromSeconds(5));
Assert.True(await cbtcs.Task);

Assert.True(credentialsProvider.RefreshCalled);
Assert.False(callbackArg);
Expand Down

0 comments on commit 7333475

Please sign in to comment.