Skip to content

Commit 38f85c4

Browse files
committed
* Rename ConnectionSettingBuilder to ConnectionSettingsBuilder
* Correctly implement `IEquatable` for `ConnectionSettings`
1 parent 33a3ad9 commit 38f85c4

18 files changed

+96
-104
lines changed

Directory.Packages.props

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
* https://github.com/rabbitmq/rabbitmq-dotnet-client/pull/1594
3030
-->
3131
<PackageVersion Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
32+
<PackageVersion Include="Microsoft.Bcl.HashCode" Version="6.0.0" />
3233
</ItemGroup>
3334
<ItemGroup Condition="'$(TargetFrameworkIdentifier)'=='.NETFramework'">
3435
<GlobalPackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" />
@@ -38,4 +39,4 @@
3839
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
3940
<GlobalPackageReference Include="MinVer" Version="6.0.0" />
4041
</ItemGroup>
41-
</Project>
42+
</Project>

RabbitMQ.AMQP.Client/ConnectionSettings.cs

Lines changed: 39 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@
1212

1313
namespace RabbitMQ.AMQP.Client
1414
{
15-
// TODO rename to ConnectionSettingsBuilder
16-
public class ConnectionSettingBuilder
15+
public class ConnectionSettingsBuilder
1716
{
18-
// TODO: maybe add the event "LifeCycle" to the builder
1917
private string _host = "localhost";
2018
private int _port = -1; // Note: -1 means use the defalt for the scheme
2119
private string? _user = "guest";
@@ -28,54 +26,54 @@ public class ConnectionSettingBuilder
2826
private RecoveryConfiguration _recoveryConfiguration = new RecoveryConfiguration();
2927
private IList<Uri>? _uris;
3028

31-
public static ConnectionSettingBuilder Create()
29+
public static ConnectionSettingsBuilder Create()
3230
{
33-
return new ConnectionSettingBuilder();
31+
return new ConnectionSettingsBuilder();
3432
}
3533

36-
public ConnectionSettingBuilder Host(string host)
34+
public ConnectionSettingsBuilder Host(string host)
3735
{
3836
_host = host;
3937
return this;
4038
}
4139

42-
public ConnectionSettingBuilder Port(int port)
40+
public ConnectionSettingsBuilder Port(int port)
4341
{
4442
_port = port;
4543
return this;
4644
}
4745

48-
public ConnectionSettingBuilder User(string user)
46+
public ConnectionSettingsBuilder User(string user)
4947
{
5048
_user = user;
5149
return this;
5250
}
5351

54-
public ConnectionSettingBuilder Password(string password)
52+
public ConnectionSettingsBuilder Password(string password)
5553
{
5654
_password = password;
5755
return this;
5856
}
5957

60-
public ConnectionSettingBuilder Scheme(string scheme)
58+
public ConnectionSettingsBuilder Scheme(string scheme)
6159
{
6260
_scheme = scheme;
6361
return this;
6462
}
6563

66-
public ConnectionSettingBuilder ContainerId(string containerId)
64+
public ConnectionSettingsBuilder ContainerId(string containerId)
6765
{
6866
_containerId = containerId;
6967
return this;
7068
}
7169

72-
public ConnectionSettingBuilder VirtualHost(string virtualHost)
70+
public ConnectionSettingsBuilder VirtualHost(string virtualHost)
7371
{
7472
_virtualHost = virtualHost;
7573
return this;
7674
}
7775

78-
public ConnectionSettingBuilder MaxFrameSize(uint maxFrameSize)
76+
public ConnectionSettingsBuilder MaxFrameSize(uint maxFrameSize)
7977
{
8078
_maxFrameSize = maxFrameSize;
8179
if (_maxFrameSize != uint.MinValue && _maxFrameSize < 512)
@@ -86,7 +84,7 @@ public ConnectionSettingBuilder MaxFrameSize(uint maxFrameSize)
8684
return this;
8785
}
8886

89-
public ConnectionSettingBuilder SaslMechanism(SaslMechanism saslMechanism)
87+
public ConnectionSettingsBuilder SaslMechanism(SaslMechanism saslMechanism)
9088
{
9189
_saslMechanism = saslMechanism;
9290
if (_saslMechanism == Client.SaslMechanism.Anonymous ||
@@ -99,13 +97,13 @@ public ConnectionSettingBuilder SaslMechanism(SaslMechanism saslMechanism)
9997
return this;
10098
}
10199

102-
public ConnectionSettingBuilder RecoveryConfiguration(RecoveryConfiguration recoveryConfiguration)
100+
public ConnectionSettingsBuilder RecoveryConfiguration(RecoveryConfiguration recoveryConfiguration)
103101
{
104102
_recoveryConfiguration = recoveryConfiguration;
105103
return this;
106104
}
107105

108-
public ConnectionSettingBuilder Uris(IEnumerable<Uri> uris)
106+
public ConnectionSettingsBuilder Uris(IEnumerable<Uri> uris)
109107
{
110108
_uris = uris.ToList();
111109
return this;
@@ -226,6 +224,9 @@ public ConnectionSettings(string scheme, string host, int port,
226224
public SaslMechanism SaslMechanism => _saslMechanism;
227225
public TlsSettings? TlsSettings => _tlsSettings;
228226
public RecoveryConfiguration Recovery => _recoveryConfiguration;
227+
public IEnumerable<Uri>? Uris => throw new NotImplementedException();
228+
229+
internal Address Address => _address;
229230

230231
public override string ToString()
231232
{
@@ -243,32 +244,25 @@ public override bool Equals(object? obj)
243244
return false;
244245
}
245246

246-
if (obj is ConnectionSettings address)
247+
if (Object.ReferenceEquals(this, obj))
247248
{
248-
return _address.Host == address._address.Host &&
249-
_address.Port == address._address.Port &&
250-
_address.Path == address._address.Path &&
251-
_address.User == address._address.User &&
252-
_address.Password == address._address.Password &&
253-
_address.Scheme == address._address.Scheme;
249+
return true;
254250
}
255251

256-
return false;
257-
}
258-
259-
protected bool Equals(ConnectionSettings other)
260-
{
261-
if (other is null)
252+
if (obj is ConnectionSettings other)
262253
{
263-
return false;
254+
return
255+
_address.Host == other._address.Host &&
256+
_address.Port == other._address.Port &&
257+
_virtualHost == other._virtualHost &&
258+
_address.User == other._address.User &&
259+
_address.Password == other._address.Password &&
260+
_address.Scheme == other._address.Scheme &&
261+
_containerId == other._containerId &&
262+
_address.Path == other._address.Path;
264263
}
265264

266-
return _address.Equals(other._address);
267-
}
268-
269-
public override int GetHashCode()
270-
{
271-
return _address.GetHashCode();
265+
return false;
272266
}
273267

274268
bool IEquatable<ConnectionSettings>.Equals(ConnectionSettings? other)
@@ -278,24 +272,20 @@ bool IEquatable<ConnectionSettings>.Equals(ConnectionSettings? other)
278272
return false;
279273
}
280274

281-
if (other is ConnectionSettings connectionSettings)
275+
if (Object.ReferenceEquals(this, other))
282276
{
283-
return _address.Host == connectionSettings.Host &&
284-
_address.Port == connectionSettings.Port &&
285-
_address.Path == connectionSettings.Path &&
286-
_address.User == connectionSettings.User &&
287-
_address.Password == connectionSettings.Password &&
288-
_address.Scheme == connectionSettings.Scheme;
277+
return true;
289278
}
290279

291-
return false;
280+
return Equals(other);
292281
}
293282

294-
internal Address Address => _address;
295-
296-
public IEnumerable<Uri>? Uris => throw new NotImplementedException();
297-
298-
// public RecoveryConfiguration RecoveryConfiguration { get; set; } = RecoveryConfiguration.Create();
283+
public override int GetHashCode()
284+
{
285+
return HashCode.Combine(_address.Host, _address.Port,
286+
_virtualHost, _address.User, _address.Password,
287+
_address.Scheme, _containerId, _address.Path);
288+
}
299289

300290
///<summary>
301291
/// Unescape a string, protecting '+'.

RabbitMQ.AMQP.Client/PublicAPI.Unshipped.txt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -56,20 +56,6 @@ RabbitMQ.AMQP.Client.ClassicQueueVersion.V2 = 1 -> RabbitMQ.AMQP.Client.ClassicQ
5656
RabbitMQ.AMQP.Client.ConnectionException
5757
RabbitMQ.AMQP.Client.ConnectionException.ConnectionException(string! message) -> void
5858
RabbitMQ.AMQP.Client.ConnectionException.ConnectionException(string! message, System.Exception! innerException) -> void
59-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder
60-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Build() -> RabbitMQ.AMQP.Client.ConnectionSettings!
61-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.ConnectionSettingBuilder() -> void
62-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.ContainerId(string! containerId) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
63-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Host(string! host) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
64-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.MaxFrameSize(uint maxFrameSize) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
65-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Password(string! password) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
66-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Port(int port) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
67-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.RecoveryConfiguration(RabbitMQ.AMQP.Client.RecoveryConfiguration! recoveryConfiguration) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
68-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.SaslMechanism(RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
69-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Scheme(string! scheme) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
70-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Uris(System.Collections.Generic.IEnumerable<System.Uri!>! uris) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
71-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.User(string! user) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
72-
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.VirtualHost(string! virtualHost) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
7359
RabbitMQ.AMQP.Client.ConnectionSettings
7460
RabbitMQ.AMQP.Client.ConnectionSettings.ConnectionSettings(string! scheme, string! host, int port, string? user, string? password, string! virtualHost, string! containerId, RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism, RabbitMQ.AMQP.Client.RecoveryConfiguration! recoveryConfiguration, uint maxFrameSize = 0, RabbitMQ.AMQP.Client.TlsSettings? tlsSettings = null) -> void
7561
RabbitMQ.AMQP.Client.ConnectionSettings.ConnectionSettings(System.Uri! uri) -> void
@@ -88,6 +74,20 @@ RabbitMQ.AMQP.Client.ConnectionSettings.Uris.get -> System.Collections.Generic.I
8874
RabbitMQ.AMQP.Client.ConnectionSettings.User.get -> string?
8975
RabbitMQ.AMQP.Client.ConnectionSettings.UseSsl.get -> bool
9076
RabbitMQ.AMQP.Client.ConnectionSettings.VirtualHost.get -> string!
77+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder
78+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Build() -> RabbitMQ.AMQP.Client.ConnectionSettings!
79+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.ConnectionSettingsBuilder() -> void
80+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.ContainerId(string! containerId) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
81+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Host(string! host) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
82+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.MaxFrameSize(uint maxFrameSize) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
83+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Password(string! password) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
84+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Port(int port) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
85+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.RecoveryConfiguration(RabbitMQ.AMQP.Client.RecoveryConfiguration! recoveryConfiguration) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
86+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.SaslMechanism(RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
87+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Scheme(string! scheme) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
88+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Uris(System.Collections.Generic.IEnumerable<System.Uri!>! uris) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
89+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.User(string! user) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
90+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.VirtualHost(string! virtualHost) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
9191
RabbitMQ.AMQP.Client.Consts
9292
RabbitMQ.AMQP.Client.ConsumerException
9393
RabbitMQ.AMQP.Client.ConsumerException.ConsumerException(string! message) -> void
@@ -741,7 +741,7 @@ static RabbitMQ.AMQP.Client.ByteCapacity.Gb(long gigabytes) -> RabbitMQ.AMQP.Cli
741741
static RabbitMQ.AMQP.Client.ByteCapacity.Kb(long megabytes) -> RabbitMQ.AMQP.Client.ByteCapacity!
742742
static RabbitMQ.AMQP.Client.ByteCapacity.Mb(long megabytes) -> RabbitMQ.AMQP.Client.ByteCapacity!
743743
static RabbitMQ.AMQP.Client.ByteCapacity.Tb(long terabytes) -> RabbitMQ.AMQP.Client.ByteCapacity!
744-
static RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Create() -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
744+
static RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Create() -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
745745
static RabbitMQ.AMQP.Client.Impl.AddressBuilderHelper.AddressBuilder() -> RabbitMQ.AMQP.Client.Impl.AddressBuilder!
746746
static RabbitMQ.AMQP.Client.Impl.AmqpConnection.CreateAsync(RabbitMQ.AMQP.Client.ConnectionSettings! connectionSettings, RabbitMQ.AMQP.Client.IMetricsReporter? metricsReporter = null) -> System.Threading.Tasks.Task<RabbitMQ.AMQP.Client.IConnection!>!
747747
static RabbitMQ.AMQP.Client.Impl.AmqpEnvironment.Create(RabbitMQ.AMQP.Client.ConnectionSettings! connectionSettings, RabbitMQ.AMQP.Client.IMetricsReporter? metricsReporter = null) -> RabbitMQ.AMQP.Client.IEnvironment!

RabbitMQ.AMQP.Client/RabbitMQ.AMQP.Client.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
<ItemGroup Condition="$(TargetFramework)=='netstandard2.0'">
4242
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" />
43+
<PackageReference Include="Microsoft.Bcl.HashCode" />
4344
</ItemGroup>
4445

4546
</Project>

Tests/ClusterTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public Task CreateConnectionWithEnvironmentAndMultipleUris()
2727
Uri uri2 = new("amqp://localhost:5674");
2828
List<Uri> uris = [uri0, uri1, uri2];
2929

30-
ConnectionSettingBuilder connectionSettingBuilder = new();
30+
ConnectionSettingsBuilder connectionSettingBuilder = new();
3131
connectionSettingBuilder.Uris(uris);
3232
ConnectionSettings connectionSettings = connectionSettingBuilder.Build();
3333

Tests/ConnectionRecoveryTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public async Task NormalCloseTheStatusShouldBeCorrectAndErrorNull(bool activeRec
6565
recoveryConfiguration.Topology(false);
6666

6767
IConnection connection = await AmqpConnection.CreateAsync(
68-
ConnectionSettingBuilder.Create().ContainerId(_containerId).RecoveryConfiguration(
68+
ConnectionSettingsBuilder.Create().ContainerId(_containerId).RecoveryConfiguration(
6969
recoveryConfiguration).Build());
7070

7171
TaskCompletionSource<bool> connectionClosedStateTcs = CreateTaskCompletionSource<bool>();
@@ -118,7 +118,7 @@ public async Task UnexpectedCloseTheStatusShouldBeCorrectAndErrorNotNull()
118118
recoveryConfiguration.BackOffDelayPolicy(new FakeFastBackOffDelay());
119119

120120
IConnection connection = await AmqpConnection.CreateAsync(
121-
ConnectionSettingBuilder.Create().ContainerId(_containerId).RecoveryConfiguration(
121+
ConnectionSettingsBuilder.Create().ContainerId(_containerId).RecoveryConfiguration(
122122
recoveryConfiguration).Build());
123123

124124
TaskCompletionSource<bool> listErrorCountGreaterThanOrEqualToTwoTcs = CreateTaskCompletionSource<bool>();
@@ -195,7 +195,7 @@ public async Task OverrideTheBackOffWithBackOffDisabled()
195195
recoveryConfiguration.BackOffDelayPolicy(new FakeBackOffDelayPolicyDisabled());
196196

197197
IConnection connection = await AmqpConnection.CreateAsync(
198-
ConnectionSettingBuilder.Create().ContainerId(_containerId).RecoveryConfiguration(
198+
ConnectionSettingsBuilder.Create().ContainerId(_containerId).RecoveryConfiguration(
199199
recoveryConfiguration).Build());
200200

201201
var listFromStatus = new List<State>();
@@ -261,7 +261,7 @@ public async Task RecoveryTopologyShouldRecoverTheTempQueues()
261261
recoveryConfiguration.BackOffDelayPolicy(new FakeFastBackOffDelay());
262262

263263
IConnection connection = await AmqpConnection.CreateAsync(
264-
ConnectionSettingBuilder.Create()
264+
ConnectionSettingsBuilder.Create()
265265
.RecoveryConfiguration(recoveryConfiguration)
266266
.ContainerId(_containerId)
267267
.Build());
@@ -310,7 +310,7 @@ public async Task RecoveryTopologyShouldNotRecoverTheTempQueues()
310310
recoveryConfiguration.BackOffDelayPolicy(new FakeFastBackOffDelay());
311311

312312
IConnection connection = await AmqpConnection.CreateAsync(
313-
ConnectionSettingBuilder.Create()
313+
ConnectionSettingsBuilder.Create()
314314
.RecoveryConfiguration(recoveryConfiguration)
315315
.ContainerId(_containerId)
316316
.Build());
@@ -350,7 +350,7 @@ public async Task RecoveryTopologyShouldRecoverExchanges(bool topologyEnabled)
350350
recoveryConfiguration.Topology(topologyEnabled);
351351

352352
IConnection connection = await AmqpConnection.CreateAsync(
353-
ConnectionSettingBuilder.Create()
353+
ConnectionSettingsBuilder.Create()
354354
.RecoveryConfiguration(recoveryConfiguration)
355355
.ContainerId(_containerId)
356356
.Build());
@@ -410,7 +410,7 @@ public async Task RecoveryTopologyShouldRecoverBindings(bool topologyEnabled)
410410
recoveryConfiguration.Topology(topologyEnabled);
411411

412412
IConnection connection = await AmqpConnection.CreateAsync(
413-
ConnectionSettingBuilder.Create()
413+
ConnectionSettingsBuilder.Create()
414414
.RecoveryConfiguration(recoveryConfiguration)
415415
.ContainerId(_containerId)
416416
.Build());
@@ -495,7 +495,7 @@ public async Task RemoveAQueueShouldRemoveTheBindings()
495495
recoveryConfiguration.Topology(true);
496496

497497
IConnection connection = await AmqpConnection.CreateAsync(
498-
ConnectionSettingBuilder.Create()
498+
ConnectionSettingsBuilder.Create()
499499
.RecoveryConfiguration(recoveryConfiguration)
500500
.ContainerId(_containerId)
501501
.Build());
@@ -557,7 +557,7 @@ public async Task RemoveAnExchangeShouldRemoveTheBindings()
557557
recoveryConfiguration.Topology(true);
558558

559559
IConnection connection = await AmqpConnection.CreateAsync(
560-
ConnectionSettingBuilder.Create()
560+
ConnectionSettingsBuilder.Create()
561561
.RecoveryConfiguration(recoveryConfiguration)
562562
.ContainerId(_containerId)
563563
.Build());
@@ -628,7 +628,7 @@ public async Task RemoveAnExchangeBoundToAnotherExchangeShouldRemoveTheBindings(
628628
recoveryConfiguration.Topology(true);
629629

630630
IConnection connection = await AmqpConnection.CreateAsync(
631-
ConnectionSettingBuilder.Create()
631+
ConnectionSettingsBuilder.Create()
632632
.RecoveryConfiguration(recoveryConfiguration)
633633
.ContainerId(_containerId)
634634
.Build());

0 commit comments

Comments
 (0)