53 lines
1.7 KiB
C#
53 lines
1.7 KiB
C#
using BuildFlow.Infrastructure.Messaging;
|
|
using FluentAssertions;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using RabbitMQ.Client;
|
|
using Xunit;
|
|
|
|
namespace BuildFlow.Rag.Tests;
|
|
|
|
/// <summary>RabbitMQ 连接注册的凭据 fail-closed 行为测试。</summary>
|
|
public sealed class RabbitMqExtensionsTests
|
|
{
|
|
[Theory]
|
|
[InlineData(null)]
|
|
[InlineData("")]
|
|
[InlineData("REPLACE_IN_SECRETS")]
|
|
public void MissingOrPlaceholderPasswordIsRejected(string? password)
|
|
{
|
|
var configuration = BuildConfiguration(password);
|
|
var services = new ServiceCollection();
|
|
services.AddRabbitMq(configuration);
|
|
|
|
var act = () => services.BuildServiceProvider().GetRequiredService<IConnectionFactory>();
|
|
|
|
act.Should()
|
|
.Throw<InvalidOperationException>()
|
|
.WithMessage("*RabbitMq:Password*");
|
|
}
|
|
|
|
[Fact]
|
|
public void ConfiguredPasswordIsUsedWithoutFallback()
|
|
{
|
|
var configuration = BuildConfiguration("configured-secret");
|
|
var services = new ServiceCollection();
|
|
services.AddRabbitMq(configuration);
|
|
|
|
var factory = services.BuildServiceProvider().GetRequiredService<IConnectionFactory>();
|
|
|
|
factory.Password.Should().Be("configured-secret");
|
|
}
|
|
|
|
private static IConfiguration BuildConfiguration(string? password)
|
|
=> new ConfigurationBuilder()
|
|
.AddInMemoryCollection(new Dictionary<string, string?>
|
|
{
|
|
["RabbitMq:Host"] = "rabbitmq.test",
|
|
["RabbitMq:Port"] = "5672",
|
|
["RabbitMq:Username"] = "buildflow",
|
|
["RabbitMq:Password"] = password,
|
|
})
|
|
.Build();
|
|
}
|