Skip to content

Commit 4e9ec7b

Browse files
committed
Update docs for azure-service-bus transport along with config validation
1 parent d67c825 commit 4e9ec7b

File tree

6 files changed

+120
-32
lines changed

6 files changed

+120
-32
lines changed

src/BuslyCLI.Console/Commands/Transport/ListTransportsCommand.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ public string TransportConfigTypeToString(ITransportConfig transportConfig)
5555
return "rabbitmq";
5656
case LearningTransportConfig learningConfig:
5757
return "learning";
58+
case AzureServiceBusTransportConfig azureServiceBusConfig:
59+
return "azure-service-bus";
60+
case AmazonsqsTransportConfig amazonsqsTransportConfig:
61+
return "amazon-sqs";
5862
default:
5963
throw new ApplicationException("Unknown transport type");
6064
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using FluentValidation;
2+
3+
namespace BuslyCLI.Config.Validators;
4+
5+
public class AzureServiceBusTransportConfigValidator : AbstractValidator<AzureServiceBusTransportConfig>
6+
{
7+
public AzureServiceBusTransportConfigValidator()
8+
{
9+
RuleFor(x => x.ConnectionString)
10+
.NotEmpty();
11+
}
12+
}

src/BuslyCLI.Console/Config/Validators/TransportConfigValidator.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@ public TransportConfigValidator()
1010

1111
RuleFor(x => x.Config)
1212
.NotEmpty()
13-
.WithMessage("Transport must define exactly one transport configuration.");
13+
.WithMessage("Transport must define exactly one transport configuration.")
14+
.SetInheritanceValidator(v =>
15+
{
16+
v.Add(new LearningTransportConfigValidator());
17+
v.Add(new RabbitMQTransportConfigValidator());
18+
v.Add(new AzureServiceBusTransportConfigValidator());
19+
});
20+
21+
// RuleFor(x => x.LearningTransportConfig)
22+
// .SetValidator(new LearningTransportConfigValidator())
23+
// .When(x => x.Config is not null);
1424

15-
RuleFor(x => x.LearningTransportConfig)
16-
.SetValidator(new LearningTransportConfigValidator())
17-
.When(x => x.Config is not null);
1825
}
1926
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using BuslyCLI.Config;
2+
using BuslyCLI.Config.Validators;
3+
using FluentValidation.TestHelper;
4+
5+
namespace BuslyCLI.Console.Tests.Config.Validators;
6+
7+
[TestFixture]
8+
public class AzureServiceBusTransportConfigValidatorTests
9+
{
10+
private readonly AzureServiceBusTransportConfigValidator _validator;
11+
12+
public AzureServiceBusTransportConfigValidatorTests()
13+
{
14+
_validator = new AzureServiceBusTransportConfigValidator();
15+
}
16+
17+
[Test]
18+
public async Task ShouldErrorWhenConnectionStringIsNotPassed()
19+
{
20+
// Arrange
21+
var azureServiceBusTransportConfig = new AzureServiceBusTransportConfig
22+
{
23+
ConnectionString = null
24+
};
25+
// Act
26+
var result = await _validator.TestValidateAsync(azureServiceBusTransportConfig);
27+
28+
// Assert
29+
result.ShouldHaveValidationErrorFor(c => c.ConnectionString)
30+
.WithErrorMessage("'Connection String' must not be empty.");
31+
}
32+
33+
[Test]
34+
public async Task ShouldNotErrorStorageDirectoryIsPassed()
35+
{
36+
// Arrange
37+
var azureServiceBusTransportConfig = new AzureServiceBusTransportConfig
38+
{
39+
ConnectionString = "Endpoint=amqp://127.0.0.1:32799/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true"
40+
};
41+
// Act
42+
var result = await _validator.TestValidateAsync(azureServiceBusTransportConfig);
43+
44+
// Assert
45+
result.ShouldNotHaveValidationErrorFor(c => c.ConnectionString);
46+
}
47+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Azure Service Bus
2+
3+
The **Azure Service Bus Transport** is used to communicate to Azure Service Bus.
4+
It is suitable for development, testing, and production environments.
5+
6+
## Configuration
7+
8+
To use the Azure Service Bus Transport, define it under `transports` and reference it as `current-transport`.
9+
10+
### Example
11+
12+
```yaml
13+
current-transport: local-azure-service-bus
14+
15+
transports:
16+
- name: local-azure-service-bus
17+
azure-service-bus-transport-config:
18+
connection-string: Endpoint=amqp://127.0.0.1:32799/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true
19+
```
20+
21+
---
22+
23+
## `azure-service-bus-transport-config` Fields
24+
25+
| Field | Required | Type | Default | Description |
26+
|---------------------|----------|--------|---------|-------------------------------------------------------------------|
27+
| `connection-string` | **Yes** | string | — | Full AMQP connection string used to connect to Azure Service Bus. |
28+
29+
---
30+
31+
## Field Details
32+
33+
### `connection-string` (required)
34+
35+
A standard AMQP URI used to connect to Azure Service Bus.
36+
37+
Examples:
38+
39+
```yaml
40+
amqp-connection-string: Endpoint=sb://[NAMESPACE].servicebus.windows.net/;SharedAccessKeyName=[KEYNAME];SharedAccessKey=[KEY]
41+
```
42+
43+
```yaml
44+
amqp-connection-string: Endpoint=amqp://127.0.0.1:32799/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true
45+
```

website/package-lock.json

Lines changed: 1 addition & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)