Skip to content
This repository was archived by the owner on Apr 29, 2022. It is now read-only.

Commit 755df5b

Browse files
author
Anton Vorontsov
committed
Added tests for batch message handler registering.
1 parent b5e51ab commit 755df5b

File tree

3 files changed

+94
-5
lines changed

3 files changed

+94
-5
lines changed

src/RabbitMQ.Client.Core.DependencyInjection/BatchMessageHandlerDependencyInjectionExtensions.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public static class BatchMessageHandlerDependencyInjectionExtensions
2424
public static IServiceCollection AddBatchMessageHandler<TBatchMessageHandler>(this IServiceCollection services, IConfiguration configuration)
2525
where TBatchMessageHandler : BaseBatchMessageHandler
2626
{
27-
services.CheckIfBatchMessageHandlerAlreadyConfigured<TBatchMessageHandler>();
27+
CheckIfBatchMessageHandlerAlreadyConfigured<TBatchMessageHandler>(services);
2828
var configurationInstance = RabbitMqClientOptionsDependencyInjectionExtensions.GetRabbitMqClientOptionsInstance(configuration);
2929
services.ConfigureBatchConsumerConnectionOptions<TBatchMessageHandler>(configurationInstance);
3030
services.AddHostedService<TBatchMessageHandler>();
@@ -41,7 +41,7 @@ public static IServiceCollection AddBatchMessageHandler<TBatchMessageHandler>(th
4141
public static IServiceCollection AddBatchMessageHandler<TBatchMessageHandler>(this IServiceCollection services, RabbitMqClientOptions configuration)
4242
where TBatchMessageHandler : BaseBatchMessageHandler
4343
{
44-
services.CheckIfBatchMessageHandlerAlreadyConfigured<TBatchMessageHandler>();
44+
CheckIfBatchMessageHandlerAlreadyConfigured<TBatchMessageHandler>(services);
4545
services.ConfigureBatchConsumerConnectionOptions<TBatchMessageHandler>(configuration);
4646
services.AddHostedService<TBatchMessageHandler>();
4747
return services;
@@ -60,14 +60,13 @@ static IServiceCollection ConfigureBatchConsumerConnectionOptions<TBatchMessageH
6060
return services;
6161
}
6262

63-
static IServiceCollection CheckIfBatchMessageHandlerAlreadyConfigured<TBatchMessageHandler>(this IServiceCollection services)
63+
static void CheckIfBatchMessageHandlerAlreadyConfigured<TBatchMessageHandler>(this IServiceCollection services)
6464
{
65-
var descriptor = services.FirstOrDefault(x => x.ServiceType == typeof(TBatchMessageHandler));
65+
var descriptor = services.FirstOrDefault(x => x.ImplementationType == typeof(TBatchMessageHandler));
6666
if (descriptor != null)
6767
{
6868
throw new BatchMessageHandlerAlreadyConfiguredException(typeof(TBatchMessageHandler), $"A batch message handler of type {typeof(TBatchMessageHandler)} has already been configured.");
6969
}
70-
return services;
7170
}
7271
}
7372
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System.Threading.Tasks;
2+
using Microsoft.Extensions.Configuration;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using Moq;
5+
using RabbitMQ.Client.Core.DependencyInjection.Configuration;
6+
using RabbitMQ.Client.Core.DependencyInjection.Exceptions;
7+
using RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests.Stubs;
8+
using Xunit;
9+
10+
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests
11+
{
12+
public class BatchMessageHandlerDependencyInjectionExtensionsTests
13+
{
14+
[Fact]
15+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameBatchMessageHandlerTwiceWithConfiguration()
16+
{
17+
await Assert.ThrowsAsync<BatchMessageHandlerAlreadyConfiguredException>(() =>
18+
{
19+
var configurationMock = new Mock<IConfiguration>();
20+
new ServiceCollection()
21+
.AddBatchMessageHandler<StubBatchMessageHandler>(configurationMock.Object)
22+
.AddBatchMessageHandler<StubBatchMessageHandler>(configurationMock.Object);
23+
return Task.CompletedTask;
24+
});
25+
}
26+
27+
[Fact]
28+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameBatchMessageHandlerTwiceWithOptions()
29+
{
30+
await Assert.ThrowsAsync<BatchMessageHandlerAlreadyConfiguredException>(() =>
31+
{
32+
new ServiceCollection()
33+
.AddBatchMessageHandler<StubBatchMessageHandler>(new RabbitMqClientOptions())
34+
.AddBatchMessageHandler<StubBatchMessageHandler>(new RabbitMqClientOptions());
35+
return Task.CompletedTask;
36+
});
37+
}
38+
39+
[Fact]
40+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameBatchMessageHandlerTwiceWithConfigurationAndOptions()
41+
{
42+
await Assert.ThrowsAsync<BatchMessageHandlerAlreadyConfiguredException>(() =>
43+
{
44+
var configurationMock = new Mock<IConfiguration>();
45+
new ServiceCollection()
46+
.AddBatchMessageHandler<StubBatchMessageHandler>(configurationMock.Object)
47+
.AddBatchMessageHandler<StubBatchMessageHandler>(new RabbitMqClientOptions());
48+
return Task.CompletedTask;
49+
});
50+
}
51+
}
52+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using Microsoft.Extensions.Logging;
7+
using RabbitMQ.Client.Core.DependencyInjection.BatchMessageHandlers;
8+
using RabbitMQ.Client.Core.DependencyInjection.Models;
9+
10+
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests.Stubs
11+
{
12+
public class StubBatchMessageHandler : BaseBatchMessageHandler
13+
{
14+
readonly ILogger<StubBatchMessageHandler> _logger;
15+
16+
public StubBatchMessageHandler(
17+
IEnumerable<BatchConsumerConnectionOptions> batchConsumerConnectionOptions,
18+
ILogger<StubBatchMessageHandler> logger)
19+
: base(batchConsumerConnectionOptions, logger)
20+
{
21+
_logger = logger;
22+
}
23+
24+
protected override ushort PrefetchCount { get; set; } = 3;
25+
26+
protected override string QueueName { get; set; } = "queue.name";
27+
28+
protected override Task HandleMessages(IEnumerable<ReadOnlyMemory<byte>> messages, CancellationToken cancellationToken)
29+
{
30+
foreach (var message in messages)
31+
{
32+
var stringifiedMessage = Encoding.UTF8.GetString(message.ToArray());
33+
_logger.LogInformation(stringifiedMessage);
34+
}
35+
return Task.CompletedTask;
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)