public void ExecuteAsync_IfMessageIsFunctionIdIsRegistered_GetsETag(BlobType expectedBlobType)
        {
            // Arrange
            string expectedContainerName = "container";
            string expectedBlobName      = TestBlobName;
            string functionId            = "FunctionId";
            Mock <IBlobETagReader> mock  = new Mock <IBlobETagReader>(MockBehavior.Strict);

            mock.Setup(r => r.GetETagAsync(It.Is <IStorageBlob>(b => b.BlobType == (StorageBlobType)expectedBlobType &&
                                                                b.Name == expectedBlobName && b.Container.Name == expectedContainerName),
                                           It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult("ETag"))
            .Verifiable();
            IBlobETagReader          eTagReader = mock.Object;
            BlobQueueTriggerExecutor product    = CreateProductUnderTest(eTagReader);

            product.Register(functionId, CreateDummyTriggeredFunctionExecutor());

            BlobTriggerMessage triggerMessage = new BlobTriggerMessage
            {
                FunctionId    = functionId,
                BlobType      = (StorageBlobType)expectedBlobType,
                ContainerName = expectedContainerName,
                BlobName      = expectedBlobName,
                ETag          = "OriginalETag"
            };
            IStorageQueueMessage message = CreateMessage(triggerMessage);

            // Act
            Task task = product.ExecuteAsync(message, CancellationToken.None);

            // Assert
            task.WaitUntilCompleted();
            mock.Verify();
        }
Ejemplo n.º 2
0
        public void BlobTrigger_IfBindingAlwaysFails_MovesToPoisonQueue()
        {
            // Arrange
            IStorageAccount       account      = CreateFakeStorageAccount();
            IStorageBlobContainer container    = CreateContainer(account, ContainerName);
            IStorageBlockBlob     blob         = container.GetBlockBlobReference(BlobName);
            CloudBlockBlob        expectedBlob = blob.SdkObject;

            blob.UploadText("ignore");

            // Act
            string result = RunTrigger <string>(account, typeof(PoisonBlobProgram),
                                                (s) => PoisonBlobProgram.TaskSource = s,
                                                new string[] { typeof(PoisonBlobProgram).FullName + ".PutInPoisonQueue" });

            // Assert
            BlobTriggerMessage message = JsonConvert.DeserializeObject <BlobTriggerMessage>(result);

            Assert.NotNull(message);
            Assert.Equal(typeof(PoisonBlobProgram).FullName + ".PutInPoisonQueue", message.FunctionId);
            Assert.Equal(StorageBlobType.BlockBlob, message.BlobType);
            Assert.Equal(ContainerName, message.ContainerName);
            Assert.Equal(BlobName, message.BlobName);
            Assert.NotEmpty(message.ETag);
        }
        private async Task <HttpResponseMessage> ProcessEventsAsync(JArray events, string functionName, CancellationToken cancellationToken)
        {
            foreach (JObject jo in events)
            {
                BlobTriggerMessage blobTriggerMessage = GetBlobTriggerMessage(jo, functionName);
                await _blobTriggerQueueWriter.EnqueueAsync(blobTriggerMessage, cancellationToken).ConfigureAwait(false);
            }

            return(new HttpResponseMessage(HttpStatusCode.Accepted));
        }
Ejemplo n.º 4
0
        private static QueueMessage CreateMessage(string functionId, string eTag)
        {
            BlobTriggerMessage triggerMessage = new BlobTriggerMessage
            {
                FunctionId = functionId,
                // BlobType = StorageBlobType.BlockBlob, $$$
                ContainerName = TestContainerName,
                BlobName      = TestBlobName,
                ETag          = eTag
            };

            return(CreateMessage(triggerMessage));
        }
        private static IStorageQueueMessage CreateMessage(string functionId, string eTag)
        {
            BlobTriggerMessage triggerMessage = new BlobTriggerMessage
            {
                FunctionId    = functionId,
                BlobType      = StorageBlobType.BlockBlob,
                ContainerName = "container",
                BlobName      = "blob",
                ETag          = eTag
            };

            return(CreateMessage(triggerMessage));
        }
Ejemplo n.º 6
0
        public void CanSerializeBlobTriggerMessage(string containerName, string blobName, BlobType blobType, string etag, string functionId, string expectedMessage)
        {
            var message = new BlobTriggerMessage()
            {
                ContainerName = containerName,
                BlobName      = blobName,
                BlobType      = blobType,
                ETag          = etag,
                FunctionId    = functionId,
            };

            var serializedMessage = JsonConvert.SerializeObject(message, Formatting.None);

            Assert.AreEqual(expectedMessage, serializedMessage);
        }
Ejemplo n.º 7
0
 private static QueueMessage CreateMessage(BlobTriggerMessage triggerMessage)
 {
     return(CreateMessage(JsonConvert.SerializeObject(triggerMessage)));
 }