Skip to content

Commit c9c3e86

Browse files
committed
* Wrap up equality comparison.
1 parent d5c971f commit c9c3e86

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

RabbitMQ.AMQP.Client/ConnectionSettings.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,42 @@ public ConnectionSettingsViaUris(IEnumerable<Uri> uris,
485485
}
486486
}
487487

488+
public override bool Equals(object? obj)
489+
{
490+
if (obj is null)
491+
{
492+
return false;
493+
}
494+
495+
if (base.Equals(obj) && (obj is ConnectionSettingsViaUris other))
496+
{
497+
for (int i = 0; i < _uris.Count; i++)
498+
{
499+
Uri thisUri = _uris[i];
500+
Uri otherUri = other._uris[i];
501+
if (false == thisUri.Equals(otherUri))
502+
{
503+
return false;
504+
}
505+
}
506+
507+
return true;
508+
}
509+
510+
return false;
511+
}
512+
513+
public override int GetHashCode()
514+
{
515+
int baseHashCode = base.GetHashCode();
516+
int hashCode = baseHashCode;
517+
for (int i = 0; i < _uris.Count; i++)
518+
{
519+
hashCode ^= _uris[i].GetHashCode();
520+
}
521+
return hashCode;
522+
}
523+
488524
internal override Address Address
489525
{
490526
get

RabbitMQ.AMQP.Client/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ override RabbitMQ.AMQP.Client.BackOffDelayPolicy.ToString() -> string!
1414
override RabbitMQ.AMQP.Client.ConnectionSettings.Equals(object? obj) -> bool
1515
override RabbitMQ.AMQP.Client.ConnectionSettings.GetHashCode() -> int
1616
override RabbitMQ.AMQP.Client.ConnectionSettings.ToString() -> string!
17+
override RabbitMQ.AMQP.Client.ConnectionSettingsViaUris.Equals(object? obj) -> bool
18+
override RabbitMQ.AMQP.Client.ConnectionSettingsViaUris.GetHashCode() -> int
1719
override RabbitMQ.AMQP.Client.Error.ToString() -> string!
1820
override RabbitMQ.AMQP.Client.Impl.AmqpConnection.CloseAsync() -> System.Threading.Tasks.Task!
1921
override RabbitMQ.AMQP.Client.Impl.AmqpConnection.OpenAsync() -> System.Threading.Tasks.Task!

Tests/ConnectionTests/ConnectionSettingsTests.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,68 @@ public void ConnectionSettingsViaBuilderWithUris()
220220
Assert.Equal(scheme, a2.Scheme);
221221
}
222222

223+
[Fact]
224+
public void ConnectionSettingsWithEqualUris()
225+
{
226+
const string scheme = "amqps";
227+
const string host = "rabbitmq-host.foo.baz.com";
228+
string user = RandomString(10);
229+
string pass = RandomString(10);
230+
string containerId = RandomString(10);
231+
232+
var uri0_0 = new Uri($"{scheme}://{user}:{pass}@{host}:5681/%2Ffrazzle");
233+
var uri0_1 = new Uri($"{scheme}://{user}:{pass}@{host}:5681/%2Ffrazzle");
234+
235+
var uri1_0 = new Uri($"{scheme}://{user}:{pass}@{host}:5691/%2Ffrazzle");
236+
var uri1_1 = new Uri($"{scheme}://{user}:{pass}@{host}:5691/%2Ffrazzle");
237+
238+
var uri2_0 = new Uri($"{scheme}://{user}:{pass}@{host}:5677/%2Ffrazzle");
239+
var uri2_1 = new Uri($"{scheme}://{user}:{pass}@{host}:5677/%2Ffrazzle");
240+
241+
List<Uri> uris0 = [uri0_0, uri1_0, uri2_0];
242+
ConnectionSettingsBuilder connectionSettingsBuilder0 = ConnectionSettingsBuilder.Create()
243+
.Uris(uris0)
244+
.ContainerId(containerId);
245+
ConnectionSettings connectionSettings0 = connectionSettingsBuilder0.Build();
246+
247+
List<Uri> uris1 = [uri0_1, uri1_1, uri2_1];
248+
ConnectionSettingsBuilder connectionSettingsBuilder1 = ConnectionSettingsBuilder.Create()
249+
.Uris(uris1)
250+
.ContainerId(containerId);
251+
ConnectionSettings connectionSettings1 = connectionSettingsBuilder1.Build();
252+
Assert.Equal(connectionSettings0, connectionSettings1);
253+
Assert.Equal(connectionSettings0.GetHashCode(), connectionSettings1.GetHashCode());
254+
}
255+
256+
[Fact]
257+
public void ConnectionSettingsWithUrisNotEqual()
258+
{
259+
const string scheme = "amqps";
260+
const string host = "rabbitmq-host.foo.baz.com";
261+
string user = RandomString(10);
262+
string pass = RandomString(10);
263+
string containerId = RandomString(10);
264+
265+
var uri0 = new Uri($"{scheme}://{user}:{pass}@{host}:5681/%2Ffrazzle");
266+
var uri1 = new Uri($"{scheme}://{user}:{pass}@{host}:5691/%2Ffrazzle");
267+
var uri2_0 = new Uri($"{scheme}://{user}:{pass}@{host}:5671/%2Ffrazzle");
268+
var uri2_1 = new Uri($"{scheme}://{user}:{pass}@{host}:5677/%2Ffrazzle");
269+
270+
List<Uri> uris0 = [uri0, uri1, uri2_0];
271+
ConnectionSettingsBuilder connectionSettingsBuilder0 = ConnectionSettingsBuilder.Create()
272+
.Uris(uris0)
273+
.ContainerId(containerId);
274+
ConnectionSettings connectionSettings0 = connectionSettingsBuilder0.Build();
275+
276+
List<Uri> uris1 = [uri0, uri1, uri2_1];
277+
ConnectionSettingsBuilder connectionSettingsBuilder1 = ConnectionSettingsBuilder.Create()
278+
.Uris(uris1)
279+
.ContainerId(containerId);
280+
ConnectionSettings connectionSettings1 = connectionSettingsBuilder1.Build();
281+
Assert.NotEqual(connectionSettings0, connectionSettings1);
282+
Assert.NotEqual(connectionSettings0.GetHashCode(), connectionSettings1.GetHashCode());
283+
}
284+
223285
[Fact]
224286
public void ConnectionSettingsViaUrisThrowsWithDifferentVirtualHosts()
225287
{

0 commit comments

Comments
 (0)