Skip to content

Commit b01244f

Browse files
committed
* Restore ICredentialsProvider to IConnectionFactory
* Make `TestRefreshTokenFailed` test work with new code
1 parent d6975b6 commit b01244f

File tree

3 files changed

+53
-61
lines changed

3 files changed

+53
-61
lines changed

projects/RabbitMQ.Client/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ RabbitMQ.Client.Credentials.UserName.get -> string!
1313
RabbitMQ.Client.Credentials.ValidUntil.get -> System.TimeSpan?
1414
RabbitMQ.Client.ExternalMechanism.HandleChallengeAsync(byte[]? challenge, RabbitMQ.Client.ConnectionConfig! config, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<byte[]!>!
1515
RabbitMQ.Client.IAuthMechanism.HandleChallengeAsync(byte[]? challenge, RabbitMQ.Client.ConnectionConfig! config, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<byte[]!>!
16+
RabbitMQ.Client.IConnectionFactory.CredentialsProvider.get -> RabbitMQ.Client.ICredentialsProvider?
17+
RabbitMQ.Client.IConnectionFactory.CredentialsProvider.set -> void
1618
RabbitMQ.Client.ICredentialsProvider
1719
RabbitMQ.Client.ICredentialsProvider.GetCredentialsAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<RabbitMQ.Client.Credentials!>!
1820
RabbitMQ.Client.ICredentialsProvider.Name.get -> string!

projects/RabbitMQ.Client/client/api/IConnectionFactory.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ public interface IConnectionFactory
7474
/// </summary>
7575
string VirtualHost { get; set; }
7676

77+
/// <summary>
78+
/// ICredentialsProvider used to obtain username and password.
79+
/// </summary>
80+
public ICredentialsProvider? CredentialsProvider { get; set; }
81+
7782
/// <summary>
7883
/// Sets or gets the AMQP Uri to be used for connections.
7984
/// </summary>

projects/Test/OAuth2/TestCredentialsRefresher.cs

Lines changed: 46 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -43,60 +43,30 @@ public class MockCredentialsProvider : ICredentialsProvider
4343
{
4444
private readonly ITestOutputHelper _testOutputHelper;
4545
private readonly TimeSpan _validUntil;
46-
// private Exception _ex = null;
47-
// private bool _refreshCalled = false;
46+
private readonly Exception? _maybeGetCredentialsException;
4847

49-
public MockCredentialsProvider(ITestOutputHelper testOutputHelper, TimeSpan validUntil)
48+
public MockCredentialsProvider(ITestOutputHelper testOutputHelper, TimeSpan validUntil,
49+
Exception? maybeGetCredentialsException = null)
5050
{
5151
_testOutputHelper = testOutputHelper;
5252
_validUntil = validUntil;
53+
_maybeGetCredentialsException = maybeGetCredentialsException;
5354
}
5455

5556
public string Name => GetType().Name;
56-
/*
57-
public bool RefreshCalled
57+
58+
public Task<Credentials> GetCredentialsAsync(CancellationToken cancellationToken = default)
5859
{
59-
get
60+
if (_maybeGetCredentialsException is null)
6061
{
61-
return _refreshCalled;
62+
var creds = new Credentials(this.GetType().Name, "guest", "guest", _validUntil);
63+
return Task.FromResult(creds);
6264
}
63-
}
64-
65-
public string UserName => "guest";
66-
67-
public string Password
68-
{
69-
get
65+
else
7066
{
71-
if (_ex == null)
72-
{
73-
return "guest";
74-
}
75-
else
76-
{
77-
throw _ex;
78-
}
67+
throw _maybeGetCredentialsException;
7968
}
8069
}
81-
82-
public TimeSpan? ValidUntil => _validUntil;
83-
84-
public void Refresh()
85-
{
86-
_refreshCalled = true;
87-
}
88-
89-
public void PasswordThrows(Exception ex)
90-
{
91-
_ex = ex;
92-
}
93-
*/
94-
95-
public Task<Credentials> GetCredentialsAsync(CancellationToken cancellationToken = default)
96-
{
97-
var creds = new Credentials(this.GetType().Name, "guest", "guest", _validUntil);
98-
return Task.FromResult(creds);
99-
}
10070
}
10171

10272
public class TestCredentialsRefresher
@@ -113,7 +83,7 @@ public async Task TestRefreshToken()
11383
{
11484
var expectedValidUntil = TimeSpan.FromSeconds(1);
11585
var tcs = new TaskCompletionSource<Credentials>(TaskCreationOptions.RunContinuationsAsynchronously);
116-
var credentialsProvider = new MockCredentialsProvider(_testOutputHelper, TimeSpan.FromSeconds(1));
86+
var credentialsProvider = new MockCredentialsProvider(_testOutputHelper, expectedValidUntil);
11787

11888
Task cb(Credentials? argCreds, Exception? ex, CancellationToken argToken)
11989
{
@@ -144,34 +114,49 @@ Task cb(Credentials? argCreds, Exception? ex, CancellationToken argToken)
144114
Assert.Equal("guest", credentials.Password);
145115
Assert.Equal(expectedValidUntil, credentials.ValidUntil);
146116
}
147-
}
148117

149-
/*
150-
[Fact]
151-
public async Task TestRefreshTokenFailed()
152-
{
153-
var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
154-
using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
118+
[Fact]
119+
public async Task TestRefreshTokenFailed()
155120
{
156-
using (CancellationTokenRegistration ctr = cts.Token.Register(() => tcs.TrySetCanceled()))
121+
string exceptionMessage = nameof(TestCredentialsRefresher);
122+
var expectedException = new Exception(exceptionMessage);
123+
124+
var expectedValidUntil = TimeSpan.FromSeconds(1);
125+
var tcs = new TaskCompletionSource<Credentials?>(TaskCreationOptions.RunContinuationsAsynchronously);
126+
var credentialsProvider = new MockCredentialsProvider(_testOutputHelper, expectedValidUntil, expectedException);
127+
128+
ushort callbackCount = 0;
129+
Task cb(Credentials? argCreds, Exception? ex, CancellationToken argToken)
157130
{
158-
var credentialsProvider = new MockCredentialsProvider(_testOutputHelper, TimeSpan.FromSeconds(1));
131+
callbackCount++;
159132

160-
Task cb(bool arg)
133+
if (ex != null)
161134
{
162-
tcs.SetResult(arg);
163-
return Task.CompletedTask;
135+
tcs.SetException(ex);
164136
}
165137

166-
var ex = new Exception();
167-
credentialsProvider.PasswordThrows(ex);
138+
return Task.CompletedTask;
139+
}
168140

169-
_credentialRefresher.Register(credentialsProvider, cb);
170-
Assert.False(await tcs.Task);
171-
Assert.True(credentialsProvider.RefreshCalled);
172-
Assert.True(_credentialRefresher.Unregister(credentialsProvider));
141+
Credentials? credentials = null;
142+
using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
143+
{
144+
using (CancellationTokenRegistration ctr = cts.Token.Register(() => tcs.TrySetCanceled()))
145+
{
146+
var credentialRefresher = new CredentialsRefresher(credentialsProvider, cb, cts.Token);
147+
try
148+
{
149+
credentials = await tcs.Task;
150+
}
151+
catch (Exception ex)
152+
{
153+
Assert.Same(expectedException, ex);
154+
}
155+
}
173156
}
157+
158+
Assert.Null(credentials);
159+
Assert.Equal(1, callbackCount);
174160
}
175161
}
176-
*/
177162
}

0 commit comments

Comments
 (0)