diff --git a/tests/Lykke.RabbitMqBroker.Tests/DealLetterExchangeArgumentsBuilderTests.cs b/tests/Lykke.RabbitMqBroker.Tests/DealLetterExchangeArgumentsBuilderTests.cs new file mode 100644 index 0000000..da36f91 --- /dev/null +++ b/tests/Lykke.RabbitMqBroker.Tests/DealLetterExchangeArgumentsBuilderTests.cs @@ -0,0 +1,39 @@ +using Lykke.RabbitMqBroker.Subscriber; +using Lykke.RabbitMqBroker.Subscriber.MessageReadStrategies; + +using NUnit.Framework; + +namespace Lykke.RabbitMqBroker.Tests; + +[TestFixture] +internal sealed class DealLetterExchangeArgumentsBuilderTests +{ + [Test] + public void WithAtLeastOnceStrategy_AddsAtLeastOnceStrategyArguments() + { + var argsBuilder = new QueueDeclarationArgumentsBuilder() + .AddDeadLetterExchange(DeadLetterExchangeName.Create("exchange")) + .WithAtLeastOnceStrategy(); + + var args = argsBuilder.Build(); + + Assert.That(args, Does.ContainKey("x-dead-letter-strategy")); + Assert.That(args["x-dead-letter-strategy"], Is.EqualTo("at-least-once")); + + Assert.That(args, Does.ContainKey("overflow")); + Assert.That(args["overflow"], Is.EqualTo("reject-publish")); + } + + [Test] + public void WithAtMostOnceStrategy_RemovesAtLeastOnceStrategyArguments() + { + var argsBuilder = new QueueDeclarationArgumentsBuilder() + .AddDeadLetterExchange(DeadLetterExchangeName.Create("exchange")) + .WithAtMostOnceStrategy(); + + var args = argsBuilder.Build(); + + Assert.That(args, Does.Not.ContainKey("x-dead-letter-strategy")); // using default + Assert.That(args, Does.Not.ContainKey("overflow")); // using default + } +} \ No newline at end of file diff --git a/tests/Lykke.RabbitMqBroker.Tests/QueueConfigurationOptionsTests.cs b/tests/Lykke.RabbitMqBroker.Tests/QueueConfigurationOptionsTests.cs new file mode 100644 index 0000000..3302237 --- /dev/null +++ b/tests/Lykke.RabbitMqBroker.Tests/QueueConfigurationOptionsTests.cs @@ -0,0 +1,83 @@ +using JetBrains.Annotations; + +using Lykke.RabbitMqBroker.Subscriber; +using Lykke.RabbitMqBroker.Subscriber.MessageReadStrategies; + +using NUnit.Framework; + +namespace Lykke.RabbitMqBroker.Tests; + +[TestFixture] +internal sealed class QueueConfigurationOptionsTests +{ + [Test] + public void BuildArguments_WhenQueueTypeIsQuorum_AddsQuorumQueueArgument() + { + var options = new QueueConfigurationOptions( + QueueName.Create("queue"), + ExchangeName.Create("exchange"), + QueueType: QueueType.Quorum + ); + + var args = options.BuildArguments(); + + Assert.That(args, Does.ContainKey("x-queue-type")); + Assert.That(args["x-queue-type"], Is.EqualTo("quorum")); + } + + [Test] + public void BuildArguments_WhenDeadLetterExchangeNameIsNotNull_AddsDeadLetterExchangeArgument() + { + var deadLetterExchangeName = DeadLetterExchangeName.Create("dlx"); + var options = new QueueConfigurationOptions( + QueueName.Create("queue"), + ExchangeName.Create("exchange"), + deadLetterExchangeName + ); + + var args = options.BuildArguments(); + + Assert.That(args, Does.ContainKey("x-dead-letter-exchange")); + Assert.That(args["x-dead-letter-exchange"], Is.EqualTo(deadLetterExchangeName.ToString())); + } + + [Test] + public void BuildArguments_WhenDeadLetterExchangeNameIsNotNull_And_QuorumQueue_AddsAtLeastOnceStrategy() + { + var options = new QueueConfigurationOptions( + QueueName.Create("queue"), + ExchangeName.Create("exchange"), + DeadLetterExchangeName.Create("dlx"), + QueueType: QueueType.Quorum + ); + + var args = options.BuildArguments(); + + Assert.That(args, Does.ContainKey("x-dead-letter-strategy")); + Assert.That(args["x-dead-letter-strategy"], Is.EqualTo("at-least-once")); + Assert.That(args, Does.ContainKey("overflow")); + Assert.That(args["overflow"], Is.EqualTo("reject-publish")); + } + + [Test] + public void BuildArguments_WhenDeadLetterExchangeNameIsNotNull_And_ClassicQueue_AddsAtMostOnceStrategy() + { + // at-most-once is the default one + // so we either expect the key to be removed or the value to be "at-most-once" + + var options = new QueueConfigurationOptions( + QueueName.Create("queue"), + ExchangeName.Create("exchange"), + DeadLetterExchangeName.Create("dlx"), + QueueType: QueueType.Classic + ); + + var args = options.BuildArguments(); + + args.TryGetValue("x-dead-letter-strategy", out var strategy); + Assert.That(strategy, Is.AnyOf(null, "at-most-once")); + + args.TryGetValue("overflow", out var overflow); + Assert.That(overflow, Is.AnyOf(null, "drop-head")); + } +} \ No newline at end of file diff --git a/tests/Lykke.RabbitMqBroker.Tests/QueueDeclarationArgumentsBuilderTests.cs b/tests/Lykke.RabbitMqBroker.Tests/QueueDeclarationArgumentsBuilderTests.cs new file mode 100644 index 0000000..21d8f32 --- /dev/null +++ b/tests/Lykke.RabbitMqBroker.Tests/QueueDeclarationArgumentsBuilderTests.cs @@ -0,0 +1,51 @@ +using Lykke.RabbitMqBroker.Subscriber; +using Lykke.RabbitMqBroker.Subscriber.MessageReadStrategies; + +using NUnit.Framework; + +namespace Lykke.RabbitMqBroker.Tests; + +[TestFixture] +internal sealed class QueueDeclarationArgumentsBuilderTests +{ + [Test] + public void UseQuorumQueue_AddsQuorumQueueArgument() + { + var argsBuilder = new QueueDeclarationArgumentsBuilder(); + + argsBuilder.UseQuorumQueue(); + + var args = argsBuilder.Build(); + + Assert.That(args, Does.ContainKey("x-queue-type")); + Assert.That(args["x-queue-type"], Is.EqualTo("quorum")); + } + + [Test] + public void UseClassicQueue_RemovesQuorumQueueArgument() + { + var argsBuilder = new QueueDeclarationArgumentsBuilder(); + + argsBuilder + .UseQuorumQueue() + .UseClassicQueue(); + + var args = argsBuilder.Build(); + + Assert.That(args, Is.Null); + } + + [Test] + public void AddDeadLetterExchange_AddsDeadLetterExchangeArgument() + { + var argsBuilder = new QueueDeclarationArgumentsBuilder(); + + var dlxExchangeName = DeadLetterExchangeName.Create("exchange"); + argsBuilder.AddDeadLetterExchange(dlxExchangeName); + + var args = argsBuilder.Build(); + + Assert.That(args, Does.ContainKey("x-dead-letter-exchange")); + Assert.That(args["x-dead-letter-exchange"], Is.EqualTo(dlxExchangeName.ToString())); + } +}