Skip to content

Commit f33e585

Browse files
committed
* Start adding Uris to ConnectionSettings.
* Add ClusterTests file.
1 parent b1c3a58 commit f33e585

File tree

5 files changed

+72
-7
lines changed

5 files changed

+72
-7
lines changed

RabbitMQ.AMQP.Client/IConnectionSettings.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// Copyright (c) 2017-2024 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
44

55
using System;
6+
using System.Collections.Generic;
67
using System.Net.Security;
78
using System.Security.Authentication;
89
using System.Security.Cryptography.X509Certificates;
@@ -24,6 +25,7 @@ public interface IConnectionSettings : IEquatable<IConnectionSettings>
2425
SaslMechanism SaslMechanism { get; }
2526
ITlsSettings? TlsSettings { get; }
2627
IRecoveryConfiguration Recovery { get; }
28+
IEnumerable<Uri>? Uris { get; }
2729
}
2830

2931
/// <summary>

RabbitMQ.AMQP.Client/Impl/AmqpConnection.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,9 @@ void OnOpened(Amqp.IConnection connection, Open openOnOpened)
359359
}
360360
else
361361
{
362+
// TODO
363+
// There is absolutely NO POINT in having an interface if this
364+
// is what will be done!
362365
connectionSettings = (ConnectionSettings)_connectionSettings;
363366
Address address = connectionSettings.Address;
364367
_nativeConnection = await cf.CreateAsync(address: address, open: open, onOpened: OnOpened)

RabbitMQ.AMQP.Client/Impl/ConnectionSettings.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
// Copyright (c) 2017-2024 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
44

55
using System;
6+
using System.Collections.Generic;
7+
using System.Linq;
68
using System.Net.Security;
79
using System.Security.Authentication;
810
using System.Security.Cryptography.X509Certificates;
911
using Amqp;
1012

1113
namespace RabbitMQ.AMQP.Client.Impl
1214
{
15+
// TODO rename to ConnectionSettingsBuilder
1316
public class ConnectionSettingBuilder
1417
{
1518
// TODO: maybe add the event "LifeCycle" to the builder
@@ -23,10 +26,7 @@ public class ConnectionSettingBuilder
2326
private uint _maxFrameSize = Consts.DefaultMaxFrameSize;
2427
private SaslMechanism _saslMechanism = Client.SaslMechanism.Anonymous;
2528
private IRecoveryConfiguration _recoveryConfiguration = Impl.RecoveryConfiguration.Create();
26-
27-
private ConnectionSettingBuilder()
28-
{
29-
}
29+
private IList<Uri>? _uris;
3030

3131
public static ConnectionSettingBuilder Create()
3232
{
@@ -105,8 +105,15 @@ public ConnectionSettingBuilder RecoveryConfiguration(IRecoveryConfiguration rec
105105
return this;
106106
}
107107

108+
public ConnectionSettingBuilder Uris(IEnumerable<Uri> uris)
109+
{
110+
_uris = uris.ToList();
111+
return this;
112+
}
113+
108114
public ConnectionSettings Build()
109115
{
116+
// TODO this should do something similar to consolidate in the Java code
110117
var c = new ConnectionSettings(_scheme, _host, _port, _user,
111118
_password, _virtualHost,
112119
_containerId, _saslMechanism,
@@ -129,9 +136,9 @@ public class ConnectionSettings : IConnectionSettings
129136
private readonly SaslMechanism _saslMechanism = SaslMechanism.Plain;
130137
private readonly IRecoveryConfiguration _recoveryConfiguration = RecoveryConfiguration.Create();
131138

132-
public ConnectionSettings(string address, ITlsSettings? tlsSettings = null)
139+
public ConnectionSettings(string uri, ITlsSettings? tlsSettings = null)
133140
{
134-
_address = new Address(address);
141+
_address = new Address(uri);
135142
_tlsSettings = tlsSettings;
136143

137144
if (_address.UseSsl && _tlsSettings == null)
@@ -252,6 +259,8 @@ public bool Equals(IConnectionSettings? other)
252259

253260
internal Address Address => _address;
254261

262+
public IEnumerable<Uri>? Uris => throw new NotImplementedException();
263+
255264
// public RecoveryConfiguration RecoveryConfiguration { get; set; } = RecoveryConfiguration.Create();
256265
}
257266

RabbitMQ.AMQP.Client/PublicAPI.Unshipped.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ RabbitMQ.AMQP.Client.IConnectionSettings.Recovery.get -> RabbitMQ.AMQP.Client.IR
116116
RabbitMQ.AMQP.Client.IConnectionSettings.SaslMechanism.get -> RabbitMQ.AMQP.Client.SaslMechanism!
117117
RabbitMQ.AMQP.Client.IConnectionSettings.Scheme.get -> string!
118118
RabbitMQ.AMQP.Client.IConnectionSettings.TlsSettings.get -> RabbitMQ.AMQP.Client.ITlsSettings?
119+
RabbitMQ.AMQP.Client.IConnectionSettings.Uris.get -> System.Collections.Generic.IEnumerable<System.Uri!>?
119120
RabbitMQ.AMQP.Client.IConnectionSettings.User.get -> string?
120121
RabbitMQ.AMQP.Client.IConnectionSettings.UseSsl.get -> bool
121122
RabbitMQ.AMQP.Client.IConnectionSettings.VirtualHost.get -> string!
@@ -475,8 +476,11 @@ RabbitMQ.AMQP.Client.Impl.BindingSpecification._destinationName -> string!
475476
RabbitMQ.AMQP.Client.Impl.BindingSpecification._routingKey -> string!
476477
RabbitMQ.AMQP.Client.Impl.BindingSpecification._sourceName -> string!
477478
RabbitMQ.AMQP.Client.Impl.BindingSpecification._toQueue -> bool
479+
RabbitMQ.AMQP.Client.Impl.ConnectionSettings.ConnectionSettings(string! uri, RabbitMQ.AMQP.Client.ITlsSettings? tlsSettings = null) -> void
480+
RabbitMQ.AMQP.Client.Impl.ConnectionSettings.Uris.get -> System.Collections.Generic.IEnumerable<System.Uri!>?
478481
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder
479482
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.Build() -> RabbitMQ.AMQP.Client.Impl.ConnectionSettings!
483+
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.ConnectionSettingBuilder() -> void
480484
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.ContainerId(string! containerId) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
481485
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.Host(string! host) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
482486
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.MaxFrameSize(uint maxFrameSize) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
@@ -485,10 +489,10 @@ RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.Port(int port) -> RabbitMQ.AM
485489
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.RecoveryConfiguration(RabbitMQ.AMQP.Client.IRecoveryConfiguration! recoveryConfiguration) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
486490
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.SaslMechanism(RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
487491
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.Scheme(string! scheme) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
492+
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.Uris(System.Collections.Generic.IEnumerable<System.Uri!>! uris) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
488493
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.User(string! user) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
489494
RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder.VirtualHost(string! virtualHost) -> RabbitMQ.AMQP.Client.Impl.ConnectionSettingBuilder!
490495
RabbitMQ.AMQP.Client.Impl.ConnectionSettings
491-
RabbitMQ.AMQP.Client.Impl.ConnectionSettings.ConnectionSettings(string! address, RabbitMQ.AMQP.Client.ITlsSettings? tlsSettings = null) -> void
492496
RabbitMQ.AMQP.Client.Impl.ConnectionSettings.ConnectionSettings(string! scheme, string! host, int port, string? user, string? password, string! virtualHost, string! containerId, RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism, RabbitMQ.AMQP.Client.IRecoveryConfiguration! recoveryConfiguration, uint maxFrameSize = 0, RabbitMQ.AMQP.Client.ITlsSettings? tlsSettings = null) -> void
493497
RabbitMQ.AMQP.Client.Impl.ConnectionSettings.ContainerId.get -> string!
494498
RabbitMQ.AMQP.Client.Impl.ConnectionSettings.Equals(RabbitMQ.AMQP.Client.IConnectionSettings? other) -> bool

Tests/ClusterTests.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// This source code is dual-licensed under the Apache License, version 2.0,
2+
// and the Mozilla Public License, version 2.0.
3+
// Copyright (c) 2017-2024 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4+
5+
using System;
6+
using System.Collections.Generic;
7+
using System.Threading.Tasks;
8+
using RabbitMQ.AMQP.Client;
9+
using RabbitMQ.AMQP.Client.Impl;
10+
using Xunit;
11+
using Xunit.Abstractions;
12+
13+
namespace Tests;
14+
15+
public class ClusterTests(ITestOutputHelper testOutputHelper)
16+
: IntegrationTest(testOutputHelper, setupConnectionAndManagement: false)
17+
{
18+
[SkippableFact]
19+
public Task CreateConnectionWithEnvironmentAndMultipleUris()
20+
{
21+
Skip.IfNot(SystemUtils.IsCluster);
22+
23+
Assert.Null(_connection);
24+
Assert.Null(_management);
25+
26+
Uri uri0 = new("amqp://localhost:5672");
27+
Uri uri1 = new("amqp://localhost:5673");
28+
Uri uri2 = new("amqp://localhost:5674");
29+
List<Uri> uris = [uri0, uri1, uri2];
30+
31+
ConnectionSettingBuilder connectionSettingBuilder = new();
32+
connectionSettingBuilder.Uris(uris);
33+
IConnectionSettings connectionSettings = connectionSettingBuilder.Build();
34+
35+
/*
36+
IEnvironment env = AmqpEnvironment.Create(ConnectionSettingBuilder.Create().Build());
37+
IConnection connection = await env.CreateConnectionAsync();
38+
Assert.NotNull(connection);
39+
Assert.NotEmpty(env.GetConnections());
40+
await env.CloseAsync();
41+
Assert.Equal(State.Closed, connection.State);
42+
Assert.Empty(env.GetConnections());
43+
*/
44+
45+
return Task.CompletedTask;
46+
}
47+
}

0 commit comments

Comments
 (0)