Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions docs/modules/servicebus.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,13 @@ The Service Bus module depends on an MSSQL container instance. The module automa
=== "Reuse Existing Resources"
```csharp
--8<-- "tests/Testcontainers.ServiceBus.Tests/ServiceBusContainerTest.cs:ReuseExistingMsSqlContainer"
```

## Use a custom Config.json

The Azure Service Bus Emulator provides a [default](https://learn.microsoft.com/en-us/azure/service-bus-messaging/test-locally-with-service-bus-emulator?tabs=automated-script#interact-with-the-emulator) configuration. If a custom configuration is desired, you can use the following method to provide a custom JSON file to the builder accordingly:

=== "Use Custom Configuration"
```csharp
--8<-- "tests/Testcontainers.ServiceBus.Tests/ServiceBusContainerTest.cs:UseCustomConfiguration"
```
13 changes: 13 additions & 0 deletions src/Testcontainers.ServiceBus/ServiceBusBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,19 @@ public ServiceBusBuilder WithMsSqlContainer(
.WithEnvironment("MSSQL_SA_PASSWORD", password);
}

/// <summary>
/// Sets the configuration for the Azure Service Bus Emulator.
/// </summary>
/// <remarks>
/// Default emulator configuration: https://learn.microsoft.com/en-us/azure/service-bus-messaging/test-locally-with-service-bus-emulator?tabs=automated-script#interact-with-the-emulator.
/// </remarks>
/// <param name="configFilePath">The path to the JSON file containing the Azure Service Bus Emulator configuration.</param>
/// <returns>A configured instance of <see cref="ServiceBusBuilder" />.</returns>
public ServiceBusBuilder WithConfig(string configFilePath)
{
return WithResourceMapping(new FileInfo(configFilePath), new FileInfo("/ServiceBus_Emulator/ConfigFiles/Config.json"));
}

/// <inheritdoc />
public override ServiceBusContainer Build()
{
Expand Down
1 change: 1 addition & 0 deletions src/Testcontainers.ServiceBus/Usings.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
global using System;
global using System.Collections.Generic;
global using System.IO;
global using System.Linq;
global using System.Threading;
global using System.Threading.Tasks;
Expand Down
23 changes: 20 additions & 3 deletions tests/Testcontainers.ServiceBus.Tests/ServiceBusContainerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ private ServiceBusContainerTest(ServiceBusContainer serviceBusContainer)
_serviceBusContainer = serviceBusContainer;
}

protected virtual string QueueName => "queue.1";

// # --8<-- [start:UseServiceBusContainer]
public Task InitializeAsync()
{
Expand All @@ -33,15 +35,14 @@ public async Task ReceiveMessageReturnsSentMessage()
// Upload a custom configuration before the container starts using the
// `WithResourceMapping(string, string)` API or one of its overloads:
// `WithResourceMapping("Config.json", "/ServiceBus_Emulator/ConfigFiles/")`.
const string queueName = "queue.1";

var message = new ServiceBusMessage(helloServiceBus);

await using var client = new ServiceBusClient(_serviceBusContainer.GetConnectionString());

var sender = client.CreateSender(queueName);
var sender = client.CreateSender(QueueName);

var receiver = client.CreateReceiver(queueName);
var receiver = client.CreateReceiver(QueueName);

// When
await sender.SendMessageAsync(message)
Expand Down Expand Up @@ -82,6 +83,22 @@ public ServiceBusCustomMsSqlConfiguration(DatabaseFixture fixture)
}
}

[UsedImplicitly]
public sealed class ServiceBusCustomQueueConfiguration : ServiceBusContainerTest, IClassFixture<DatabaseFixture>
{
public ServiceBusCustomQueueConfiguration()
: base(new ServiceBusBuilder()
.WithAcceptLicenseAgreement(true)
// # --8<-- [start:UseCustomConfiguration]
.WithConfig("custom-queue-config.json")
// # --8<-- [end:UseCustomConfiguration]
.Build())
{
}

protected override string QueueName => "custom-queue.1";
}

[UsedImplicitly]
public sealed class DatabaseFixture
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,9 @@
<ProjectReference Include="../../src/Testcontainers.ServiceBus/Testcontainers.ServiceBus.csproj"/>
<ProjectReference Include="../Testcontainers.Commons/Testcontainers.Commons.csproj"/>
</ItemGroup>
<ItemGroup>
<None Update="custom-queue-config.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
28 changes: 28 additions & 0 deletions tests/Testcontainers.ServiceBus.Tests/custom-queue-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"UserConfig": {
"Namespaces": [
{
"Name": "sbemulatorns",
"Queues": [
{
"Name": "custom-queue.1",
"Properties": {
"DeadLetteringOnMessageExpiration": false,
"DefaultMessageTimeToLive": "PT1H",
"DuplicateDetectionHistoryTimeWindow": "PT20S",
"ForwardDeadLetteredMessagesTo": "",
"ForwardTo": "",
"LockDuration": "PT1M",
"MaxDeliveryCount": 3,
"RequiresDuplicateDetection": false,
"RequiresSession": false
}
}
]
}
],
"Logging": {
"Type": "File"
}
}
}