Ejemplo n.º 1
0
        public async Task CompleteProcessingMessageAsync_Failure_AppliesVisibilityTimeout()
        {
            var queuesOptions = new QueuesOptions
            {
                // configure a non-zero visibility timeout
                VisibilityTimeout = TimeSpan.FromMinutes(5)
            };
            Mock <QueueClient> queueClientMock          = new Mock <QueueClient>();
            TimeSpan           updatedVisibilityTimeout = TimeSpan.Zero;

            queueClientMock.Setup(x => x.UpdateMessageAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <TimeSpan>(), It.IsAny <CancellationToken>()))
            .Callback((string messageId, string popReceipt, string messageText, TimeSpan visibilityTimeout, CancellationToken cancellationToken) =>
            {
                updatedVisibilityTimeout = visibilityTimeout;
            })
            .ReturnsAsync(Response.FromValue(QueuesModelFactory.UpdateReceipt("x", DateTimeOffset.UtcNow.AddMinutes(5)), null));

            QueueProcessorFactoryContext context = new QueueProcessorFactoryContext(queueClientMock.Object, null, queuesOptions, _poisonQueue);
            QueueProcessor localProcessor        = new QueueProcessor(context);

            string messageContent = Guid.NewGuid().ToString();
            await _queue.SendMessageAsync(messageContent);

            var          functionResult = new FunctionResult(false);
            QueueMessage message        = (await _queue.ReceiveMessagesAsync(1)).Value.FirstOrDefault();
            await localProcessor.CompleteProcessingMessageAsync(message, functionResult, CancellationToken.None);

            Assert.AreEqual(queuesOptions.VisibilityTimeout, updatedVisibilityTimeout);
        }
Ejemplo n.º 2
0
        public void SetUp()
        {
            _mockQueue = new Mock <QueueClient>(new Uri("https://test.queue.core.windows.net/testqueue"), null);
            _mockQueue.Setup(x => x.Name).Returns("testqueue");

            _mockTriggerExecutor = new Mock <ITriggerExecutor <QueueMessage> >(MockBehavior.Strict);
            Mock <IWebJobsExceptionHandler> mockExceptionDispatcher = new Mock <IWebJobsExceptionHandler>(MockBehavior.Strict);

            _loggerFactory  = new LoggerFactory();
            _loggerProvider = new TestLoggerProvider();
            _loggerFactory.AddProvider(_loggerProvider);
            QueuesOptions         queuesOptions = new QueuesOptions();
            QueueProcessorOptions context       = new QueueProcessorOptions(_mockQueue.Object, _loggerFactory, queuesOptions);

            _mockQueueProcessor = new Mock <QueueProcessor>(MockBehavior.Strict, context);
            QueuesOptions queueConfig = new QueuesOptions
            {
                MaxDequeueCount = 5
            };

            _listener = new QueueListener(_mockQueue.Object, null, _mockTriggerExecutor.Object, mockExceptionDispatcher.Object, _loggerFactory, null, queueConfig, _mockQueueProcessor.Object, new FunctionDescriptor {
                Id = "TestFunction"
            });
            _queueMessage = QueuesModelFactory.QueueMessage("TestId", "TestPopReceipt", "TestMessage", 0);
        }
Ejemplo n.º 3
0
        public async Task InvokeWithCompoundBindingData()
        {
            // Verify that queue binding pattern has uppercase letters in it. These get normalized to lowercase.
            Assert.AreNotEqual(ProgramWithTriggerAndBindingData.QueueOutName, ProgramWithTriggerAndBindingData.QueueOutName.ToLower());

            IHost host = new HostBuilder()
                         .ConfigureDefaultTestHost <ProgramWithTriggerAndCompoundBindingData>(b =>
            {
                b.AddAzureStorageQueues();
                b.UseQueueService(queueServiceClient);
            })
                         .Build();

            var trigger = new ProgramWithTriggerAndCompoundBindingData.Poco
            {
                xyz   = "bad",
                prop1 = new ProgramWithTriggerAndCompoundBindingData.SubOject
                {
                    xyz = "abc"
                }
            };

            await host.GetJobHost().CallAsync <ProgramWithTriggerAndCompoundBindingData>("Func", new
            {
                triggers = QueuesModelFactory.QueueMessage("id", "receipt", JsonConvert.SerializeObject(trigger), 0)
            });

            // Now peek at messages.
            // queue name is normalized to lowercase.
            var queue = queueServiceClient.GetQueueClient("qname-abc");
            var msgs  = (await queue.ReceiveMessagesAsync(10)).Value;

            Assert.AreEqual(1, msgs.Count());
            Assert.AreEqual("123", msgs[0].MessageText);
        }
Ejemplo n.º 4
0
        public async Task CallQueueTrigger_IfArgumentIsIStorageQueueMessage_Binds()
        {
            // Arrange
            QueueMessage expectedMessage = QueuesModelFactory.QueueMessage("id", "receipt", "ignore", 0);

            // Act
            QueueMessage result = await CallQueueTriggerAsync <QueueMessage>(expectedMessage,
                                                                             typeof(BindToCloudQueueMessageProgram), (s) => BindToCloudQueueMessageProgram.TaskSource = s);

            // Assert
            Assert.Same(expectedMessage, result);
        }
Ejemplo n.º 5
0
        public async Task CallQueueTrigger_ProvidesDequeueCountBindingData()
        {
            // Arrange
            const long   expectedDequeueCount = 123;
            QueueMessage message = QueuesModelFactory.QueueMessage("id", "receipt", "ignore", expectedDequeueCount);

            // Act
            long result = await CallQueueTriggerAsync <long>(message, typeof(BindToDequeueCountBindingDataProgram),
                                                             (s) => BindToDequeueCountBindingDataProgram.TaskSource = s);

            // Assert
            Assert.Equal(expectedDequeueCount, result);
        }
Ejemplo n.º 6
0
        public async Task CallQueueTrigger_ProvidesPopReceiptBindingData()
        {
            // Arrange
            const string expectedPopReceipt = "abc";
            QueueMessage message            = QueuesModelFactory.QueueMessage("id", expectedPopReceipt, "ignore", 0);

            // Act
            string result = await CallQueueTriggerAsync <string>(message, typeof(BindToPopReceiptBindingDataProgram),
                                                                 (s) => BindToPopReceiptBindingDataProgram.TaskSource = s);

            // Assert
            Assert.Same(expectedPopReceipt, result);
        }
Ejemplo n.º 7
0
        public async Task CallQueueTrigger_IfNextVisibleTimeIsNull_ProvidesMaxValueNextVisibleTimeBindingData()
        {
            // Arrange
            DateTimeOffset expectedNextVisibleTime = DateTimeOffset.Now;
            QueueMessage   message = QueuesModelFactory.QueueMessage("id", "receipt", "ignore", 0, nextVisibleOn: null);

            // Act
            DateTimeOffset result = await CallQueueTriggerAsync <DateTimeOffset>(message,
                                                                                 typeof(BindToNextVisibleTimeBindingDataProgram),
                                                                                 (s) => BindToNextVisibleTimeBindingDataProgram.TaskSource = s);

            // Assert
            Assert.Equal(DateTimeOffset.MaxValue, result);
        }
Ejemplo n.º 8
0
        public async Task CallQueueTrigger_ProvidesInsertionTimeBindingData()
        {
            // Arrange
            DateTimeOffset expectedInsertionTime = DateTimeOffset.Now;
            QueueMessage   message = QueuesModelFactory.QueueMessage("id", "receipt", "ignore", 0, insertedOn: expectedInsertionTime);

            // Act
            DateTimeOffset result = await CallQueueTriggerAsync <DateTimeOffset>(message,
                                                                                 typeof(BindToInsertionTimeBindingDataProgram),
                                                                                 (s) => BindToInsertionTimeBindingDataProgram.TaskSource = s);

            // Assert
            Assert.Equal(expectedInsertionTime, result);
        }
Ejemplo n.º 9
0
        public async Task CallQueueTrigger_IfInsertionTimeIsNull_ProvidesUtcNowInsertionTimeBindingData()
        {
            // Arrange
            DateTimeOffset expectedInsertionTime = DateTimeOffset.Now;
            QueueMessage   message = QueuesModelFactory.QueueMessage("id", "receipt", "ignore", 0, insertedOn: null);

            // Act
            DateTimeOffset result = await CallQueueTriggerAsync <DateTimeOffset>(message,
                                                                                 typeof(BindToInsertionTimeBindingDataProgram),
                                                                                 (s) => BindToInsertionTimeBindingDataProgram.TaskSource = s);

            // Assert
            Assert.Equal(0, (int)DateTimeOffset.Now.Subtract(result).TotalMinutes);
            Assert.Equal(TimeSpan.Zero, result.Offset);
        }
Ejemplo n.º 10
0
 public QueueMessage Convert(string input)
 {
     return(QueuesModelFactory.QueueMessage(null, null, input, 0));
 }
Ejemplo n.º 11
0
 private static QueueMessage ConvertBinaryDataToCloudQueueMessage(BinaryData arg, QueueAttribute attrResolved)
 {
     return(QueuesModelFactory.QueueMessage(null, null, arg, 0));
 }
Ejemplo n.º 12
0
 public static void FuncWithOutCloudQueueMessage([Queue(OutputQueueName)] out QueueMessage message)
 {
     message = QueuesModelFactory.QueueMessage(null, null, TestQueueMessage, 0);
 }
Ejemplo n.º 13
0
 private static QueueMessage ConvertStringToCloudQueueMessage(string arg, QueueAttribute attrResolved)
 {
     return(QueuesModelFactory.QueueMessage(null, null, arg, 0));
 }
Ejemplo n.º 14
0
 private static QueueMessage ConvertByteArrayToCloudQueueMessage(byte[] arg, QueueAttribute attrResolved)
 {
     // TODO (kasobol-msft) revisit this base64/BinaryData
     return(QueuesModelFactory.QueueMessage(null, null, Encoding.UTF8.GetString(arg), 0));
 }
 private static QueueMessage CreateMessage(string content)
 {
     return(QueuesModelFactory.QueueMessage("testId", "testReceipt", content, 0));
 }
Ejemplo n.º 16
0
 private static QueueMessage CreateMessage(string content)
 {
     return(QueuesModelFactory.QueueMessage(TestQueueMessageId, "testReceipt", content, 0, insertedOn: DateTime.UtcNow));
 }
Ejemplo n.º 17
0
 private static QueueMessage ConvertByteArrayToCloudQueueMessage(byte[] arg, QueueAttribute attrResolved)
 {
     return(QueuesModelFactory.QueueMessage(null, null, new BinaryData(arg), 0));
 }