Skip to content

Commit 1265de2

Browse files
authored
Merge pull request #132 from TraGicCode/chore/add-support-for-sql-server-transport
Add support for SqlServer Transport
2 parents b16e812 + da23851 commit 1265de2

14 files changed

Lines changed: 271 additions & 3 deletions

src/BuslyCLI.Console/BuslyCLI.Console.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
<PackageReference Include="NServiceBus.AmazonSQS" Version="8.0.0" />
3434
<PackageReference Include="NServiceBus.RabbitMQ" Version="10.1.6" />
3535
<PackageReference Include="NServiceBus.Transport.AzureServiceBus" Version="5.1.2" />
36+
<PackageReference Include="NServiceBus.Transport.SqlServer" Version="8.1.10" />
3637
<PackageReference Include="Spectre.Console.Cli" Version="0.53.1" />
3738
<PackageReference Include="Spectre.Console.Cli.Extensions.DependencyInjection" Version="0.20.0" />
3839
<PackageReference Include="YamlDotNet" Version="16.3.0" />

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public string TransportConfigTypeToString(ITransportConfig transportConfig)
5959
return "azure-service-bus";
6060
case AmazonsqsTransportConfig amazonsqsTransportConfig:
6161
return "amazon-sqs";
62+
case SqlServerTransportConfig sqlServerTransportConfig:
63+
return "sql-server";
6264
default:
6365
throw new ApplicationException("Unknown transport type");
6466
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace BuslyCLI.Config;
2+
3+
public class SqlServerTransportConfig : ITransportConfig
4+
{
5+
public string ConnectionString { get; set; }
6+
}

src/BuslyCLI.Console/Config/TransportConfig.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ public class TransportConfig
1010
public AmazonsqsTransportConfig AmazonsqsTransportConfig { get; set; }
1111
public AzureServiceBusTransportConfig AzureServiceBusTransportConfig { get; set; }
1212

13+
public SqlServerTransportConfig SqlServerTransportConfig { get; set; }
14+
1315
// Helper property to unify config access:
1416
[YamlIgnore]
1517
public ITransportConfig Config => (ITransportConfig)LearningTransportConfig
1618
?? (ITransportConfig)RabbitmqTransportConfig
1719
?? (ITransportConfig)AmazonsqsTransportConfig
18-
?? (ITransportConfig)AzureServiceBusTransportConfig;
20+
?? (ITransportConfig)AzureServiceBusTransportConfig
21+
?? SqlServerTransportConfig;
1922
}
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 SqlServerTransportConfigValidator : AbstractValidator<SqlServerTransportConfig>
6+
{
7+
public SqlServerTransportConfigValidator()
8+
{
9+
RuleFor(x => x.ConnectionString)
10+
.NotEmpty();
11+
}
12+
}

src/BuslyCLI.Console/DependencyInjection/ServiceCollectionExtensions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ private static IServiceCollection AddYamlDeserializer(this IServiceCollection se
3333
{
3434
{ "learning-transport-config", typeof(LearningTransportConfig) },
3535
{ "rabbitmq-transport-config", typeof(RabbitmqTransportConfig) },
36-
{ "amazonsqs-transport-config", typeof(AmazonsqsTransportConfig) }
36+
{ "amazonsqs-transport-config", typeof(AmazonsqsTransportConfig) },
37+
{ "azure-service-bus-transport-config", typeof(AzureServiceBusTransportConfig) },
38+
{ "sql-server-transport-config", typeof(SqlServerTransportConfig) }
3739
};
3840

3941
o.AddUniqueKeyTypeDiscriminator<ITransportConfig>(keyMappings);

src/BuslyCLI.Console/Factories/RawEndpointFactory.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ private TransportDefinition CreateTransport(TransportConfig transportConfig)
3232
return CreateAzureServiceBusTransport(azureServiceBusTransportConfig.ConnectionString);
3333
case AmazonsqsTransportConfig amazonSqsTransportConfig:
3434
return CreateAmazonSQSTransport(amazonSqsTransportConfig);
35+
case SqlServerTransportConfig sqlServerTransportConfig:
36+
return CreateSqlServerTransport(sqlServerTransportConfig);
3537
case LearningTransportConfig learningTransportConfig:
3638
return new LearningTransport
3739
{
@@ -43,6 +45,11 @@ private TransportDefinition CreateTransport(TransportConfig transportConfig)
4345
}
4446
}
4547

48+
private TransportDefinition CreateSqlServerTransport(SqlServerTransportConfig sqlServerTransportConfig)
49+
{
50+
return new SqlServerTransport(sqlServerTransportConfig.ConnectionString);
51+
}
52+
4653
private RabbitMQTransport CreateRabbitMQTransport(RabbitmqTransportConfig rabbitmqTransportConfig)
4754
{
4855
var t = new RabbitMQTransport(RoutingTopology.Conventional(QueueType.Quorum), rabbitmqTransportConfig.AmqpConnectionString);

tests/BuslyCLI.Console.Tests/BuslyCLI.Console.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
2626
<PackageReference Include="Spectre.Console.Cli.Testing" Version="1.0.0-alpha.0.11" />
2727
<PackageReference Include="Testcontainers.LocalStack" Version="4.9.0" />
28+
<PackageReference Include="Testcontainers.MsSql" Version="4.9.0" />
2829
<PackageReference Include="Testcontainers.RabbitMq" Version="4.9.0" />
2930
<PackageReference Include="Testcontainers.ServiceBus" Version="4.9.0" />
3031
<PackageReference Include="YamlDotNet" Version="16.3.0" />

tests/BuslyCLI.Console.Tests/Config/Validators/AzureServiceBusTransportConfigValidatorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public async Task ShouldErrorWhenConnectionStringIsNotPassed()
3131
}
3232

3333
[Test]
34-
public async Task ShouldNotErrorStorageDirectoryIsPassed()
34+
public async Task ShouldNotErrorConnectionStringIsPassed()
3535
{
3636
// Arrange
3737
var azureServiceBusTransportConfig = new AzureServiceBusTransportConfig
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 SqlServerTransportConfigValidatorTests
9+
{
10+
private readonly SqlServerTransportConfigValidator _validator;
11+
12+
public SqlServerTransportConfigValidatorTests()
13+
{
14+
_validator = new SqlServerTransportConfigValidator();
15+
}
16+
17+
[Test]
18+
public async Task ShouldErrorWhenConnectionStringIsNotPassed()
19+
{
20+
// Arrange
21+
var sqlServerTransportConfig = new SqlServerTransportConfig
22+
{
23+
ConnectionString = null
24+
};
25+
// Act
26+
var result = await _validator.TestValidateAsync(sqlServerTransportConfig);
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 ShouldNotErrorConnectionStringIsPassed()
35+
{
36+
// Arrange
37+
var sqlServerTransportConfig = new SqlServerTransportConfig
38+
{
39+
ConnectionString = "Data Source=(local);Initial Catalog=Ordering;Integrated Security=SSPI;Application Name=Busly-CLI;TrustServerCertificate=true"
40+
};
41+
// Act
42+
var result = await _validator.TestValidateAsync(sqlServerTransportConfig);
43+
44+
// Assert
45+
result.ShouldNotHaveValidationErrorFor(c => c.ConnectionString);
46+
}
47+
}

0 commit comments

Comments
 (0)