예제 #1
0
        public static void RejectDeletesTheMessageByReceiptHandleWithItsIAmazonSQS()
        {
            var mockSqs = new Mock <IAmazonSQS>();

            SetupReceiveMessageAsync(mockSqs);
            SetupDeleteMessageAsync(mockSqs);

            using var waitHandle = new AutoResetEvent(false);

            using (var receiver = new SQSReceiver(mockSqs.Object, "foo", new Uri("http://url.com/foo"), autoAcknowledge: false))
            {
                receiver.Start(async m =>
                {
                    await m.RejectAsync().ConfigureAwait(false);
                    waitHandle.Set();
                });

                waitHandle.WaitOne();
            }

            mockSqs.Verify(m => m.DeleteMessageAsync(
                               It.Is <DeleteMessageRequest>(r => r.QueueUrl == "http://url.com/foo" &&
                                                            r.ReceiptHandle == "bar"),
                               It.IsAny <CancellationToken>()));
        }
예제 #2
0
        public static void WhenAutoAcknowledgeIsTrueMessagesAreNotDeletedIfExplicitlyHandled()
        {
            var mockSqs = new Mock <IAmazonSQS>();

            SetupReceiveMessageAsync(mockSqs);
            SetupDeleteMessageAsync(mockSqs);

            using var waitHandle = new AutoResetEvent(false);

            using (var receiver = new SQSReceiver(mockSqs.Object, "foo", new Uri("http://url.com/foo"), autoAcknowledge: false))
            {
                receiver.Start(async m =>
                {
                    await m.RollbackAsync().ConfigureAwait(false);
                    waitHandle.Set();
                });

                waitHandle.WaitOne();
            }

            mockSqs.Verify(m => m.DeleteMessageAsync(
                               It.Is <DeleteMessageRequest>(r => r.QueueUrl == "http://url.com/foo" &&
                                                            r.ReceiptHandle == "bar"),
                               It.IsAny <CancellationToken>()),
                           Times.Never);
        }
예제 #3
0
        public static void WhenTerminateMessageVisibilityTimeoutOnRollbackIsFalseRollbackDoesNotChangeMessageVisibilityByReceiptHandleWithItsIAmazonSQS()
        {
            var mockSqs = new Mock <IAmazonSQS>();

            SetupReceiveMessageAsync(mockSqs);
            SetupChangeMessageVisibilityAsync(mockSqs);

            using var waitHandle = new AutoResetEvent(false);

            using (var receiver = new SQSReceiver(mockSqs.Object, "foo", new Uri("http://url.com/foo"), autoAcknowledge: false, terminateMessageVisibilityTimeoutOnRollback: false))
            {
                receiver.Start(async m =>
                {
                    await m.RollbackAsync().ConfigureAwait(false);
                    waitHandle.Set();
                });

                waitHandle.WaitOne();
            }

            mockSqs.Verify(m => m.ChangeMessageVisibilityAsync(
                               It.IsAny <ChangeMessageVisibilityRequest>(),
                               It.IsAny <CancellationToken>()),
                           Times.Never);
        }
예제 #4
0
        public static void SQSReceiverReceivesMessagesFromItsIAmazonSQS()
        {
            var mockSqs = new Mock <IAmazonSQS>();

            SetupReceiveMessageAsync(mockSqs);

            using var waitHandle = new AutoResetEvent(false);

            string?receivedMessage = null;
            string?quxHeader       = null;

            using (var receiver = new SQSReceiver(mockSqs.Object, "foo", new Uri("http://url.com/foo"), autoAcknowledge: false))
            {
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
                receiver.Start(async m =>
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
                {
                    receivedMessage = m.StringPayload;
                    quxHeader       = m.Headers.GetValue <string>("qux");
                    waitHandle.Set();
                });

                waitHandle.WaitOne();
            }

            mockSqs.Verify(m => m.ReceiveMessageAsync(
                               It.Is <ReceiveMessageRequest>(r => r.MaxNumberOfMessages == 3 &&
                                                             r.QueueUrl == "http://url.com/foo" &&
                                                             r.MessageAttributeNames.Count == 1 &&
                                                             r.MessageAttributeNames[0] == "*"),
                               It.IsAny <CancellationToken>()));

            Assert.Equal("Hello, world!", receivedMessage);
            Assert.Equal("xyz", quxHeader);
        }
예제 #5
0
        public void RollbackDoesNotDeleteTheMessageByReceiptHandleWithItsIAmazonSQS()
        {
            var mockSqs = new Mock <IAmazonSQS>();

            SetupReceiveMessageAsync(mockSqs);
            SetupDeleteMessageAsync(mockSqs);

            var waitHandle = new AutoResetEvent(false);

            using (var receiver = new SQSReceiver(mockSqs.Object, "foo", "http://url.com/foo", autoAcknowledge: false))
            {
                receiver.Start(m =>
                {
                    m.Rollback();
                    waitHandle.Set();
                });

                waitHandle.WaitOne();
            }

            mockSqs.Verify(m => m.DeleteMessageAsync(
                               It.IsAny <DeleteMessageRequest>(),
                               It.IsAny <CancellationToken>()),
                           Times.Never);
        }
예제 #6
0
        public void SQSReceiverReceivesMessagesFromItsIAmazonSQS()
        {
            var mockSqs = new Mock <IAmazonSQS>();

            SetupReceiveMessageAsync(mockSqs);

            var waitHandle = new AutoResetEvent(false);

            string receivedMessage = null;
            string quxHeader       = null;

            using (var receiver = new SQSReceiver(mockSqs.Object, "foo", "http://url.com/foo", autoAcknowledge: false))
            {
                receiver.Start(m =>
                {
                    receivedMessage = m.StringPayload;
                    quxHeader       = m.Headers.GetValue <string>("qux");
                    waitHandle.Set();
                });

                waitHandle.WaitOne();
            }

            mockSqs.Verify(m => m.ReceiveMessageAsync(
                               It.Is <ReceiveMessageRequest>(r => r.MaxNumberOfMessages == 3 &&
                                                             r.QueueUrl == "http://url.com/foo" &&
                                                             r.MessageAttributeNames.Count == 1 &&
                                                             r.MessageAttributeNames[0] == "*"),
                               It.IsAny <CancellationToken>()));

            Assert.Equal("Hello, world!", receivedMessage);
            Assert.Equal("xyz", quxHeader);
        }
예제 #7
0
        public void WhenAutoAcknowledgeIsTrueMessagesAreAutomaticallyDeleted()
        {
            var mockSqs = new Mock <IAmazonSQS>();

            SetupReceiveMessageAsync(mockSqs);
            SetupDeleteMessageAsync(mockSqs);

            var waitHandle = new AutoResetEvent(false);

            using (var receiver = new SQSReceiver(mockSqs.Object, "foo", "http://url.com/foo", autoAcknowledge: true))
            {
                receiver.Start(m =>
                {
                    waitHandle.Set();
                });

                waitHandle.WaitOne();
            }

            mockSqs.Verify(m => m.DeleteMessageAsync(
                               It.Is <DeleteMessageRequest>(r => r.QueueUrl == "http://url.com/foo" &&
                                                            r.ReceiptHandle == "bar"),
                               It.IsAny <CancellationToken>()));
        }