Skip to content

Commit 993b28d

Browse files
committed
Implement support for connecting to ClusterTests
Fixes #95 * Start adding Uris to ConnectionSettings. * Add ClusterTests file.
1 parent ebf2bb6 commit 993b28d

File tree

5 files changed

+70
-7
lines changed

5 files changed

+70
-7
lines changed

RabbitMQ.AMQP.Client/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
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 : IEquatable<ConnectionSettings>
129136
private readonly SaslMechanism _saslMechanism = SaslMechanism.Plain;
130137
private readonly IRecoveryConfiguration _recoveryConfiguration = Impl.RecoveryConfiguration.Create();
131138

132-
public ConnectionSettings(string address, TlsSettings? tlsSettings = null)
139+
public ConnectionSettings(string uri, TlsSettings? 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 @@ bool IEquatable<ConnectionSettings>.Equals(ConnectionSettings? 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/IConnectionSettings.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#if TOOMANYINTERFACES
66
using System;
7+
using System.Collections.Generic;
78
using System.Net.Security;
89
using System.Security.Authentication;
910
using System.Security.Cryptography.X509Certificates;
@@ -25,6 +26,7 @@ public interface ConnectionSettings : IEquatable<ConnectionSettings>
2526
SaslMechanism SaslMechanism { get; }
2627
TlsSettings? TlsSettings { get; }
2728
IRecoveryConfiguration Recovery { get; }
29+
IEnumerable<Uri>? Uris { get; }
2830
}
2931

3032
/// <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/PublicAPI.Unshipped.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ RabbitMQ.AMQP.Client.ConnectionException.ConnectionException(string! message) ->
5151
RabbitMQ.AMQP.Client.ConnectionException.ConnectionException(string! message, System.Exception! innerException) -> void
5252
RabbitMQ.AMQP.Client.ConnectionSettingBuilder
5353
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Build() -> RabbitMQ.AMQP.Client.ConnectionSettings!
54+
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.ConnectionSettingBuilder() -> void
5455
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.ContainerId(string! containerId) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
5556
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Host(string! host) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
5657
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.MaxFrameSize(uint maxFrameSize) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
@@ -59,11 +60,12 @@ RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Port(int port) -> RabbitMQ.AMQP.Cl
5960
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.RecoveryConfiguration(RabbitMQ.AMQP.Client.IRecoveryConfiguration! recoveryConfiguration) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
6061
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.SaslMechanism(RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
6162
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Scheme(string! scheme) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
63+
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.Uris(System.Collections.Generic.IEnumerable<System.Uri!>! uris) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
6264
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.User(string! user) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
6365
RabbitMQ.AMQP.Client.ConnectionSettingBuilder.VirtualHost(string! virtualHost) -> RabbitMQ.AMQP.Client.ConnectionSettingBuilder!
6466
RabbitMQ.AMQP.Client.ConnectionSettings
65-
RabbitMQ.AMQP.Client.ConnectionSettings.ConnectionSettings(string! address, RabbitMQ.AMQP.Client.TlsSettings? tlsSettings = null) -> void
6667
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.IRecoveryConfiguration! recoveryConfiguration, uint maxFrameSize = 0, RabbitMQ.AMQP.Client.TlsSettings? tlsSettings = null) -> void
68+
RabbitMQ.AMQP.Client.ConnectionSettings.ConnectionSettings(string! uri, RabbitMQ.AMQP.Client.TlsSettings? tlsSettings = null) -> void
6769
RabbitMQ.AMQP.Client.ConnectionSettings.ContainerId.get -> string!
6870
RabbitMQ.AMQP.Client.ConnectionSettings.Equals(RabbitMQ.AMQP.Client.ConnectionSettings! other) -> bool
6971
RabbitMQ.AMQP.Client.ConnectionSettings.Host.get -> string!
@@ -75,6 +77,7 @@ RabbitMQ.AMQP.Client.ConnectionSettings.Recovery.get -> RabbitMQ.AMQP.Client.IRe
7577
RabbitMQ.AMQP.Client.ConnectionSettings.SaslMechanism.get -> RabbitMQ.AMQP.Client.SaslMechanism!
7678
RabbitMQ.AMQP.Client.ConnectionSettings.Scheme.get -> string!
7779
RabbitMQ.AMQP.Client.ConnectionSettings.TlsSettings.get -> RabbitMQ.AMQP.Client.TlsSettings?
80+
RabbitMQ.AMQP.Client.ConnectionSettings.Uris.get -> System.Collections.Generic.IEnumerable<System.Uri!>?
7881
RabbitMQ.AMQP.Client.ConnectionSettings.User.get -> string?
7982
RabbitMQ.AMQP.Client.ConnectionSettings.UseSsl.get -> bool
8083
RabbitMQ.AMQP.Client.ConnectionSettings.VirtualHost.get -> string!

Tests/ClusterTests.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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 Xunit;
10+
using Xunit.Abstractions;
11+
12+
namespace Tests;
13+
14+
public class ClusterTests(ITestOutputHelper testOutputHelper)
15+
: IntegrationTest(testOutputHelper, setupConnectionAndManagement: false)
16+
{
17+
[SkippableFact]
18+
public Task CreateConnectionWithEnvironmentAndMultipleUris()
19+
{
20+
Skip.IfNot(SystemUtils.IsCluster);
21+
22+
Assert.Null(_connection);
23+
Assert.Null(_management);
24+
25+
Uri uri0 = new("amqp://localhost:5672");
26+
Uri uri1 = new("amqp://localhost:5673");
27+
Uri uri2 = new("amqp://localhost:5674");
28+
List<Uri> uris = [uri0, uri1, uri2];
29+
30+
ConnectionSettingBuilder connectionSettingBuilder = new();
31+
connectionSettingBuilder.Uris(uris);
32+
ConnectionSettings connectionSettings = connectionSettingBuilder.Build();
33+
34+
/*
35+
IEnvironment env = AmqpEnvironment.Create(ConnectionSettingBuilder.Create().Build());
36+
IConnection connection = await env.CreateConnectionAsync();
37+
Assert.NotNull(connection);
38+
Assert.NotEmpty(env.GetConnections());
39+
await env.CloseAsync();
40+
Assert.Equal(State.Closed, connection.State);
41+
Assert.Empty(env.GetConnections());
42+
*/
43+
44+
return Task.CompletedTask;
45+
}
46+
}

0 commit comments

Comments
 (0)