예제 #1
0
        public async Task Then_Both_Handlers_Receive_The_Message()
        {
            // Arrange
            var handler1 = new ExactlyOnceHandlerWithTimeout();
            var handler2 = new ExactlyOnceHandlerNoTimeout();

            var services = GivenJustSaying()
                           .ConfigureJustSaying((builder) => builder.WithLoopbackTopic <SimpleMessage>(UniqueName))
                           .AddJustSayingHandlers(new[] { handler1, handler2 });

            await WhenAsync(
                services,
                async (publisher, listener, serviceProvider, cancellationToken) =>
            {
                listener.Start(cancellationToken);

                // Act
                await publisher.PublishAsync(new SimpleMessage(), cancellationToken);
                await Task.Delay(5.Seconds());

                // Assert
                handler1.NumberOfTimesIHaveBeenCalled().ShouldBe(1);
                handler2.NumberOfTimesIHaveBeenCalled().ShouldBe(1);
            });
        }
        public async Task Sqs_Policy_Is_Applied_With_Wildcard()
        {
            // Arrange
            var handler = new ExactlyOnceHandlerWithTimeout();

            var services = GivenJustSaying()
                           .ConfigureJustSaying((builder) => builder.WithLoopbackTopic <TopicA>(UniqueName))
                           .ConfigureJustSaying((builder) => builder.WithLoopbackTopic <TopicB>(UniqueName))
                           .AddJustSayingHandler <TopicA, HandlerA>()
                           .AddJustSayingHandler <TopicB, HandlerB>();

            await WhenAsync(
                services,
                async (publisher, listener, serviceProvider, cancellationToken) =>
            {
                listener.Start(cancellationToken);

                var clientFactory = serviceProvider.GetRequiredService <MessagingBusBuilder>().BuildClientFactory();
                var loggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>();
                var client        = clientFactory.GetSqsClient(Region);

                var queue = new SqsQueueByName(Region, UniqueName, client, 0, loggerFactory);

                await Patiently.AssertThatAsync(() => queue.ExistsAsync(), 60.Seconds());

                dynamic policyJson = JObject.Parse(queue.Policy);

                policyJson.Statement.Count.ShouldBe(1, $"Expecting 1 statement in Sqs policy but found {policyJson.Statement.Count}.");
            });
        }
예제 #3
0
        public async Task Then_The_Handler_Only_Receives_The_Message_Once()
        {
            // Arrange
            var handler = new ExactlyOnceHandlerWithTimeout();

            var services = GivenJustSaying()
                           .ConfigureJustSaying((builder) => builder.WithLoopbackTopic <SimpleMessage>(UniqueName))
                           .ConfigureJustSaying((builder) => builder.Services((config) => config.WithMessageLock(() => new MessageLockStore())))
                           .AddJustSayingHandlers(new[] { handler });

            await WhenAsync(
                services,
                async (publisher, listener, serviceProvider, cancellationToken) =>
            {
                listener.Start(cancellationToken);

                var message = new SimpleMessage();

                // Act
                await publisher.PublishAsync(message, cancellationToken);
                await publisher.PublishAsync(message, cancellationToken);
                await Task.Delay(5.Seconds());

                // Assert
                handler.NumberOfTimesIHaveBeenCalled().ShouldBe(1);
            });
        }