Skip to content

Commit b5f6176

Browse files
Externally managed SNS/SQS clients were disposed when experimental constructor added in 7.1.0 - 7.1 (#2640)
Co-authored-by: WilliamBZA <[email protected]>
1 parent 2296b49 commit b5f6176

File tree

2 files changed

+45
-7
lines changed

2 files changed

+45
-7
lines changed

src/NServiceBus.Transport.SQS.Tests/SdkClientsDisposeTests.cs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public async Task ShouldDisposeSqsAndSnsClients(bool disposeSqs, bool disposeSns
7373
}
7474

7575
[Test]
76-
public async Task Should_not_dispose_clients_passed_into_transport()
76+
public async Task Should_not_dispose_clients_passed_into_transport_constructor()
7777
{
7878
var mockSqsClient = new MockSqsClient();
7979
var mockSnsClient = new MockSnsClient();
@@ -106,6 +106,42 @@ public async Task Should_not_dispose_clients_passed_into_transport()
106106
});
107107
}
108108

109+
[Test]
110+
public async Task Should_not_dispose_clients_passed_into_transport_constructor_with_delayed_delivery()
111+
{
112+
var mockSqsClient = new MockSqsClient();
113+
var mockSnsClient = new MockSnsClient();
114+
var mockS3Client = new MockS3Client();
115+
116+
#pragma warning disable NSBSQSEXP0001
117+
var transport = new SqsTransport(mockSqsClient, mockSnsClient, enableDelayedDelivery: false)
118+
#pragma warning restore NSBSQSEXP0001
119+
{
120+
S3 = new S3Settings("123", "k", mockS3Client)
121+
};
122+
123+
var hostSettings = new HostSettings(
124+
"Test",
125+
"Test",
126+
new StartupDiagnosticEntries(),
127+
(s, ex, cancel) => { },
128+
false
129+
);
130+
var receivers = Array.Empty<ReceiveSettings>();
131+
var sendingAddresses = Array.Empty<string>();
132+
133+
var infra = await transport.Initialize(hostSettings, receivers, sendingAddresses);
134+
135+
await infra.Shutdown();
136+
137+
Assert.Multiple(() =>
138+
{
139+
Assert.That(mockSqsClient.DisposeInvoked, Is.False);
140+
Assert.That(mockSnsClient.DisposeInvoked, Is.False);
141+
Assert.That(mockS3Client.DisposeInvoked, Is.False);
142+
});
143+
}
144+
109145
[Test]
110146
public async Task Should_dispose_default_clients()
111147
{

src/NServiceBus.Transport.SQS/Configure/SqsTransport.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,17 +241,19 @@ public SqsTransport(
241241
IAmazonSimpleNotificationService snsClient,
242242
bool enableDelayedDelivery
243243
)
244-
: this(
245-
sqsClient,
246-
snsClient,
244+
: base(
245+
TransportTransactionMode.ReceiveOnly,
246+
supportsDelayedDelivery: enableDelayedDelivery,
247247
supportsPublishSubscribe: true,
248-
enableDelayedDelivery: enableDelayedDelivery
248+
supportsTTBR: true
249249
)
250250
{
251-
this.sqsClient = sqsClient;
252-
this.snsClient = snsClient;
251+
// Use properties to ensure `externallyManagedSqsClient` is set
252+
SqsClient = sqsClient;
253+
SnsClient = snsClient;
253254
}
254255

256+
// Only invoke when not using external SQS and SNS clients
255257
internal SqsTransport(
256258
IAmazonSQS sqsClient,
257259
IAmazonSimpleNotificationService snsClient,

0 commit comments

Comments
 (0)