Exemple #1
0
        private (Mock <IConnectionMultiplexer> MockConnectionMultiplexer, Mock <ISubscriber> MockSubscriber, Mock <ILogger> MockLogger, RedisDataManager RedisDataManager) MockRedisDataManager(Mock <IConnectionMultiplexerFactory> connectionMultiplexerFactory = null, RedisStreamOptions redisStreamOptions = null)
        {
            var mockConnectionMultiplexer = new Mock <IConnectionMultiplexer> {
                DefaultValue = DefaultValue.Mock
            };
            var mockSubscriber = new Mock <ISubscriber> {
                DefaultValue = DefaultValue.Mock
            };
            var mockLogger = new Mock <ILogger>()
            {
                DefaultValue = DefaultValue.Mock
            };

            mockLogger.Setup(x => x.ForContext <RedisDataManager>()).Callback(() => { int j = 5; }).Returns(mockLogger.Object);

            mockConnectionMultiplexer
            .Setup(x => x.GetSubscriber(It.IsAny <object>()))
            .Returns(mockSubscriber.Object);

            var rdm = new RedisDataManager(
                redisStreamOptions ?? TestConstants.ValidRedisStreamOptions,
                connectionMultiplexerFactory?.Object ?? MockConnectionMultiplexerFactory.Returns(mockConnectionMultiplexer.Object),
                mockLogger.Object,
                TestConstants.ValidQueueName,
                TestConstants.ValidServiceId,
                TestConstants.ValidClusterId);

            return(mockConnectionMultiplexer, mockSubscriber, mockLogger, rdm);
        }
Exemple #2
0
        public async Task QueueMessageBatchAsyncWithSingleEventPublishesToRedisChannel()
        {
            var logger = new Mock <ILogger>()
            {
                DefaultValue = DefaultValue.Mock
            };
            var mockConnectionMultiplexer = new Mock <IConnectionMultiplexer> {
                DefaultValue = DefaultValue.Mock
            };
            var mockSubscriber = new Mock <ISubscriber> {
                DefaultValue = DefaultValue.Mock
            };

            mockConnectionMultiplexer.Setup(x => x.GetSubscriber(It.IsAny <object>())).Returns(mockSubscriber.Object);

            var actualMessages = new List <RedisValue>();

            mockSubscriber
            .Setup(x => x.PublishAsync(It.IsAny <RedisChannel>(), It.IsAny <RedisValue>(), It.IsAny <CommandFlags>()))
            .Callback((RedisChannel channel, RedisValue redisValue, CommandFlags commandFlags) => actualMessages.Add(redisValue))
            .ReturnsAsync(0);

            var mockRedisDataAdapter = new Mock <IRedisDataAdapter> {
                DefaultValue = DefaultValue.Mock
            };

            mockRedisDataAdapter
            .Setup(x => x.ToRedisValue <string>(ValidStreamGuid, ValidStreamNamespace, It.IsAny <IEnumerable <string> >(), null))
            .Returns((Guid streamGuid, string streamNamespace, IEnumerable <string> events, Dictionary <string, object> requestContext) => JsonConvert.SerializeObject(events));

            var mockQueueStreamMapper = new Mock <IStreamQueueMapper> {
                DefaultValue = DefaultValue.Mock
            };

            mockQueueStreamMapper
            .Setup(x => x.GetQueueForStream(ValidStreamGuid, ValidStreamNamespace))
            .Returns(QueueId.GetQueueId(null, 0, 0));

            var rqa = new RedisQueueAdapter(
                ValidRedisStreamOptions,
                MockConnectionMultiplexerFactory.Returns(mockConnectionMultiplexer.Object),
                mockRedisDataAdapter.Object,
                mockQueueStreamMapper.Object,
                logger.Object,
                ValidServiceId,
                ValidClusterId,
                ValidProviderName);

            var expectedMessages = new List <RedisValue>();

            for (var i = 0; i < 100; i++)
            {
                var message = new[] { i.ToString() };
                expectedMessages.Add(JsonConvert.SerializeObject(message));
                await rqa.QueueMessageBatchAsync(ValidStreamGuid, ValidStreamNamespace, message, null, null);
            }

            AssertEx.Equal(expectedMessages, actualMessages);
        }