89 lines
4.9 KiB
C#
89 lines
4.9 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using Moq;
|
|
using Orleans.Configuration;
|
|
using Orleans.Providers.Streams.Common;
|
|
using Orleans.Streams;
|
|
using StackExchange.Redis;
|
|
using Universley.OrleansContrib.StreamsProvider.Redis;
|
|
|
|
namespace RedisStreamsProvider.UnitTests
|
|
{
|
|
public class RedisStreamFactoryTests
|
|
{
|
|
private readonly Mock<IConnectionMultiplexer> _mockConnectionMultiplexer;
|
|
private readonly Mock<ILoggerFactory> _mockLoggerFactory;
|
|
private readonly Mock<IServiceProvider> _mockServiceProvider;
|
|
private readonly Mock<IStreamFailureHandler> _mockStreamFailureHandler;
|
|
private readonly SimpleQueueCacheOptions _simpleQueueCacheOptions;
|
|
private readonly HashRingStreamQueueMapperOptions _hashRingStreamQueueMapperOptions;
|
|
private readonly string _providerName = "TestProvider";
|
|
|
|
public RedisStreamFactoryTests()
|
|
{
|
|
_mockConnectionMultiplexer = new Mock<IConnectionMultiplexer>();
|
|
_mockConnectionMultiplexer.Setup(x => x.GetDatabase(It.IsAny<int>(), It.IsAny<object>())).Returns(new Mock<IDatabase>().Object);
|
|
|
|
_mockLoggerFactory = new Mock<ILoggerFactory>();
|
|
_mockServiceProvider = new Mock<IServiceProvider>();
|
|
_mockStreamFailureHandler = new Mock<IStreamFailureHandler>();
|
|
_simpleQueueCacheOptions = new SimpleQueueCacheOptions();
|
|
_hashRingStreamQueueMapperOptions = new HashRingStreamQueueMapperOptions();
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_ShouldThrowArgumentNullException_WhenAnyArgumentIsNull()
|
|
{
|
|
Assert.Throws<ArgumentNullException>(() => new RedisStreamFactory(null, _mockLoggerFactory.Object, _providerName, _mockStreamFailureHandler.Object, _simpleQueueCacheOptions, _hashRingStreamQueueMapperOptions));
|
|
Assert.Throws<ArgumentNullException>(() => new RedisStreamFactory(_mockConnectionMultiplexer.Object, null, _providerName, _mockStreamFailureHandler.Object, _simpleQueueCacheOptions, _hashRingStreamQueueMapperOptions));
|
|
Assert.Throws<ArgumentNullException>(() => new RedisStreamFactory(_mockConnectionMultiplexer.Object, _mockLoggerFactory.Object, null, _mockStreamFailureHandler.Object, _simpleQueueCacheOptions, _hashRingStreamQueueMapperOptions));
|
|
Assert.Throws<ArgumentNullException>(() => new RedisStreamFactory(_mockConnectionMultiplexer.Object, _mockLoggerFactory.Object, _providerName, null, _simpleQueueCacheOptions, _hashRingStreamQueueMapperOptions));
|
|
Assert.Throws<ArgumentNullException>(() => new RedisStreamFactory(_mockConnectionMultiplexer.Object, _mockLoggerFactory.Object, _providerName, _mockStreamFailureHandler.Object, null, _hashRingStreamQueueMapperOptions));
|
|
Assert.Throws<ArgumentNullException>(() => new RedisStreamFactory(_mockConnectionMultiplexer.Object, _mockLoggerFactory.Object, _providerName, _mockStreamFailureHandler.Object, _simpleQueueCacheOptions, null));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task CreateAdapter_ShouldReturnRedisStreamAdapterInstance()
|
|
{
|
|
var factory = new RedisStreamFactory(_mockConnectionMultiplexer.Object, _mockLoggerFactory.Object, _providerName, _mockStreamFailureHandler.Object, _simpleQueueCacheOptions, _hashRingStreamQueueMapperOptions);
|
|
|
|
var adapter = await factory.CreateAdapter();
|
|
|
|
Assert.NotNull(adapter);
|
|
Assert.IsType<RedisStreamAdapter>(adapter);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetDeliveryFailureHandler_ShouldReturnStreamFailureHandler()
|
|
{
|
|
var factory = new RedisStreamFactory(_mockConnectionMultiplexer.Object, _mockLoggerFactory.Object, _providerName, _mockStreamFailureHandler.Object, _simpleQueueCacheOptions, _hashRingStreamQueueMapperOptions);
|
|
|
|
var handler = await factory.GetDeliveryFailureHandler(new QueueId());
|
|
|
|
Assert.NotNull(handler);
|
|
Assert.Equal(_mockStreamFailureHandler.Object, handler);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetQueueAdapterCache_ShouldReturnSimpleQueueAdapterCacheInstance()
|
|
{
|
|
var factory = new RedisStreamFactory(_mockConnectionMultiplexer.Object, _mockLoggerFactory.Object, _providerName, _mockStreamFailureHandler.Object, _simpleQueueCacheOptions, _hashRingStreamQueueMapperOptions);
|
|
|
|
var cache = factory.GetQueueAdapterCache();
|
|
|
|
Assert.NotNull(cache);
|
|
Assert.IsType<SimpleQueueAdapterCache>(cache);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetStreamQueueMapper_ShouldReturnHashRingBasedStreamQueueMapperInstance()
|
|
{
|
|
var factory = new RedisStreamFactory(_mockConnectionMultiplexer.Object, _mockLoggerFactory.Object, _providerName, _mockStreamFailureHandler.Object, _simpleQueueCacheOptions, _hashRingStreamQueueMapperOptions);
|
|
|
|
var mapper = factory.GetStreamQueueMapper();
|
|
|
|
Assert.NotNull(mapper);
|
|
Assert.IsType<HashRingBasedStreamQueueMapper>(mapper);
|
|
}
|
|
}
|
|
}
|