Esempio n. 1
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 string CreateAblobAndUploadToContainer(IStorageBlobContainer container, string blobContent = "test")
        {
            string            blobName = Path.GetRandomFileName().Replace(".", "");
            IStorageBlockBlob blob     = container.GetBlockBlobReference(blobName);

            container.CreateIfNotExists();
            blob.UploadText(blobContent);
            return(blobName);
        }
Esempio n. 3
0
        public void BlobTrigger_IfBoundToCloudBlob_Binds()
        {
            // Arrange
            IStorageAccount       account      = CreateFakeStorageAccount();
            IStorageBlobContainer container    = CreateContainer(account, ContainerName);
            IStorageBlockBlob     blob         = container.GetBlockBlobReference(BlobName);
            CloudBlockBlob        expectedBlob = blob.SdkObject;

            blob.UploadText("ignore");

            // Act
            ICloudBlob result = RunTrigger <ICloudBlob>(account, typeof(BindToCloudBlobProgram),
                                                        (s) => BindToCloudBlobProgram.TaskSource = s);

            // Assert
            Assert.Equal(expectedBlob.Uri, result.Uri);
        }
Esempio n. 4
0
        public void BlobTriggerToQueueTriggerToBlob_WritesFinalBlob()
        {
            // Arrange
            IStorageAccount       account   = CreateFakeStorageAccount();
            IStorageBlobContainer container = CreateContainer(account, ContainerName);
            IStorageBlockBlob     inputBlob = container.GetBlockBlobReference(BlobName);

            inputBlob.UploadText("15");

            // Act
            RunTrigger <object>(account, typeof(BlobTriggerToQueueTriggerToBlobProgram),
                                (s) => BlobTriggerToQueueTriggerToBlobProgram.TaskSource = s);

            // Assert
            IStorageBlockBlob outputBlob = container.GetBlockBlobReference(OutputBlobName);
            string            content    = outputBlob.DownloadText();

            Assert.Equal("16", content);
        }
Esempio n. 5
0
        public void BlobTrigger_IfWritesToSecondBlobTrigger_TriggersOutputQuickly()
        {
            // Arrange
            IStorageAccount       account   = CreateFakeStorageAccount();
            IStorageBlobContainer container = CreateContainer(account, ContainerName);
            IStorageBlockBlob     inputBlob = container.GetBlockBlobReference(BlobName);

            inputBlob.UploadText("abc");

            // Act
            RunTrigger <object>(account, typeof(BlobTriggerToBlobTriggerProgram),
                                (s) => BlobTriggerToBlobTriggerProgram.TaskSource = s);

            // Assert
            IStorageBlockBlob outputBlob = container.GetBlockBlobReference(OutputBlobName);
            string            content    = outputBlob.DownloadText();

            Assert.Equal("*abc*", content);
        }
Esempio n. 6
0
        public void TestBlobListener()
        {
            const string              containerName = "container";
            IStorageAccount           account       = CreateFakeStorageAccount();
            IStorageBlobContainer     container     = account.CreateBlobClient().GetContainerReference(containerName);
            IBlobListenerStrategy     product       = new ScanContainersStrategy();
            LambdaBlobTriggerExecutor executor      = new LambdaBlobTriggerExecutor();

            product.Register(container, executor);
            product.Start();

            executor.ExecuteLambda = (_) =>
            {
                throw new InvalidOperationException("shouldn't be any blobs in the container");
            };
            product.Execute();

            const string      expectedBlobName = "foo1.csv";
            IStorageBlockBlob blob             = container.GetBlockBlobReference(expectedBlobName);

            container.CreateIfNotExists();
            blob.UploadText("ignore");

            int count = 0;

            executor.ExecuteLambda = (b) =>
            {
                count++;
                Assert.Equal(expectedBlobName, b.Name);
                return(true);
            };
            product.Execute();
            Assert.Equal(1, count);

            // Now run again; shouldn't show up.
            executor.ExecuteLambda = (_) =>
            {
                throw new InvalidOperationException("shouldn't retrigger the same blob");
            };
            product.Execute();
        }