build-flow.api/tests/BuildFlow.Rag.Tests/RabbitMqExtensionsTests.cs
2026-07-24 13:25:47 +08:00

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();
}