WaitForBlobAsync() 공개 정적인 메소드

public static WaitForBlobAsync ( Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob blob ) : System.Threading.Tasks.Task
blob Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
리턴 System.Threading.Tasks.Task
        public async Task BlobTriggerToBlobTest()
        {
            TestHelpers.ClearFunctionLogs("BlobTriggerToBlob");

            // write a binary blob
            string         name      = Guid.NewGuid().ToString();
            CloudBlockBlob inputBlob = Fixture.TestInputContainer.GetBlockBlobReference(name);

            byte[] inputBytes = new byte[] { 1, 2, 3, 4, 5 };
            using (var stream = inputBlob.OpenWrite())
            {
                stream.Write(inputBytes, 0, inputBytes.Length);
            }

            var resultBlob = Fixture.TestOutputContainer.GetBlockBlobReference(name);
            await TestHelpers.WaitForBlobAsync(resultBlob);

            byte[] resultBytes;
            using (var resultStream = resultBlob.OpenRead())
                using (var ms = new MemoryStream())
                {
                    resultStream.CopyTo(ms);
                    resultBytes = ms.ToArray();
                }

            JObject testResult = await GetFunctionTestResult("BlobTriggerToBlob");

            Assert.Equal(inputBytes, resultBytes);
            Assert.True((bool)testResult["isBuffer"]);
            Assert.Equal(5, (int)testResult["length"]);
        }
        public async Task MultipleOutputs()
        {
            string id1 = Guid.NewGuid().ToString();
            string id2 = Guid.NewGuid().ToString();
            string id3 = Guid.NewGuid().ToString();

            JObject input = new JObject
            {
                { "Id1", id1 },
                { "Id2", id2 },
                { "Id3", id3 }
            };
            Dictionary<string, object> arguments = new Dictionary<string, object>
            {
                { "input", input.ToString() }
            };
            await Fixture.Host.CallAsync("MultipleOutputs", arguments);

            // verify all 3 output blobs were written
            var blob = Fixture.TestOutputContainer.GetBlockBlobReference(id1);
            await TestHelpers.WaitForBlobAsync(blob);
            string blobContent = blob.DownloadText();
            Assert.Equal("Test Blob 1", Utility.RemoveUtf8ByteOrderMark(blobContent));

            blob = Fixture.TestOutputContainer.GetBlockBlobReference(id2);
            await TestHelpers.WaitForBlobAsync(blob);
            blobContent = blob.DownloadText();
            Assert.Equal("Test Blob 2", Utility.RemoveUtf8ByteOrderMark(blobContent));

            blob = Fixture.TestOutputContainer.GetBlockBlobReference(id3);
            await TestHelpers.WaitForBlobAsync(blob);
            blobContent = blob.DownloadText();
            Assert.Equal("Test Blob 3", Utility.RemoveUtf8ByteOrderMark(blobContent));
        }
        public async Task ManualTrigger_Invoke_Succeeds()
        {
            CloudBlobContainer outputContainer = _fixture.BlobClient.GetContainerReference("samples-output");
            CloudBlockBlob     outputBlob      = outputContainer.GetBlockBlobReference("result");

            outputBlob.DeleteIfExists();

            CloudBlobContainer inputContainer = _fixture.BlobClient.GetContainerReference("samples-input");
            CloudBlockBlob     statusBlob     = inputContainer.GetBlockBlobReference("status");

            statusBlob.UploadText("{ \"level\": 4, \"detail\": \"All systems are normal :)\" }");

            string             uri     = "admin/functions/manualtrigger";
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, uri);

            request.Headers.Add("x-functions-key", "t8laajal0a1ajkgzoqlfv5gxr4ebhqozebw4qzdy");
            request.Content = new StringContent("{ 'input': 'Hello Manual Trigger!' }");
            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            HttpResponseMessage response = await this._fixture.HttpClient.SendAsync(request);

            Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);

            // wait for completion
            string result = await TestHelpers.WaitForBlobAsync(outputBlob);

            Assert.Equal("All systems are normal :)", result);
        }
        public async Task BlobTriggerToBlobTest()
        {
            // the trigger blob was written by the fixture init code
            // here we just wait for the output blob
            CloudBlobContainer outputContainer = Fixture.BlobClient.GetContainerReference("test-output-powershell");
            var resultBlob = outputContainer.GetBlockBlobReference(Fixture.TestBlobName);
            await TestHelpers.WaitForBlobAsync(resultBlob);

            string resultContents = resultBlob.DownloadText();

            Assert.Equal(Fixture.TestBlobContents, resultContents.Trim());
        }
        public async Task BlobTriggerToBlobTest()
        {
            TestHelpers.ClearFunctionLogs("BlobTriggerToBlob");

            // write a binary blob
            string         name      = Guid.NewGuid().ToString();
            CloudBlockBlob inputBlob = Fixture.TestInputContainer.GetBlockBlobReference(name);

            inputBlob.Metadata.Add("TestMetadataKey", "TestMetadataValue");
            byte[] inputBytes = new byte[] { 1, 2, 3, 4, 5 };
            using (var stream = inputBlob.OpenWrite())
            {
                stream.Write(inputBytes, 0, inputBytes.Length);
            }

            var resultBlob = Fixture.TestOutputContainer.GetBlockBlobReference(name);
            await TestHelpers.WaitForBlobAsync(resultBlob);

            byte[] resultBytes;
            using (var resultStream = resultBlob.OpenRead())
                using (var ms = new MemoryStream())
                {
                    resultStream.CopyTo(ms);
                    resultBytes = ms.ToArray();
                }

            JObject testResult = await GetFunctionTestResult("BlobTriggerToBlob");

            Assert.Equal(inputBytes, resultBytes);
            Assert.True((bool)testResult["isBuffer"]);
            Assert.Equal(5, (int)testResult["length"]);

            var blobMetadata = (JObject)testResult["blobMetadata"];

            Assert.Equal($"test-input-node/{name}", (string)blobMetadata["path"]);

            var metadata = (JObject)blobMetadata["metadata"];

            Assert.Equal("TestMetadataValue", (string)metadata["testMetadataKey"]);

            var properties = (JObject)blobMetadata["properties"];

            Assert.Equal("application/octet-stream", (string)properties["contentType"]);
            Assert.Equal("BlockBlob", (string)properties["blobType"]);
            Assert.Equal(5, properties["length"]);

            string invocationId = (string)testResult["invocationId"];

            Guid.Parse(invocationId);
        }
        public async Task BlobTriggerBatch_Succeeds()
        {
            // write input blob
            CloudBlobContainer inputContainer = _fixture.BlobClient.GetContainerReference("samples-batch");
            string             blobName       = Guid.NewGuid().ToString();
            string             testData       = "This is a test";
            CloudBlockBlob     inputBlob      = inputContainer.GetBlockBlobReference(blobName);
            await inputBlob.UploadTextAsync(testData);

            // wait for function to execute and produce its result blob
            CloudBlobContainer outputContainer = _fixture.BlobClient.GetContainerReference("samples-output");
            CloudBlockBlob     outputBlob      = outputContainer.GetBlockBlobReference(blobName);
            string             result          = await TestHelpers.WaitForBlobAsync(outputBlob);

            // verify results
            Assert.Equal(testData, result.Trim());
        }
        public async Task BlobTriggerToBlobTest()
        {
            string             name           = Guid.NewGuid().ToString();
            string             blobContents   = "My Test Blob";
            CloudBlobContainer inputContainer = Fixture.BlobClient.GetContainerReference("test-input-bash");

            inputContainer.CreateIfNotExists();
            CloudBlockBlob inputBlob = inputContainer.GetBlockBlobReference(name);
            await inputBlob.UploadTextAsync(blobContents);

            CloudBlobContainer outputContainer = Fixture.BlobClient.GetContainerReference("test-output-bash");
            var resultBlob = outputContainer.GetBlockBlobReference(name);
            await TestHelpers.WaitForBlobAsync(resultBlob);

            string resultContents = resultBlob.DownloadText();

            Assert.Equal(blobContents, resultContents.Trim());
        }
        public async Task QueueTriggerBatch_Succeeds()
        {
            // write the input message
            CloudQueue inputQueue = _fixture.QueueClient.GetQueueReference("samples-batch");
            string     id         = Guid.NewGuid().ToString();
            JObject    jsonObject = new JObject
            {
                { "id", id }
            };
            var message = new CloudQueueMessage(jsonObject.ToString(Formatting.None));
            await inputQueue.AddMessageAsync(message);

            // wait for function to execute and produce its result blob
            CloudBlobContainer outputContainer = _fixture.BlobClient.GetContainerReference("samples-output");
            CloudBlockBlob     outputBlob      = outputContainer.GetBlockBlobReference(id);
            string             result          = await TestHelpers.WaitForBlobAsync(outputBlob);

            jsonObject = JObject.Parse(result);
            Assert.Equal(id, (string)jsonObject["id"]);
        }
예제 #9
0
        protected async Task ServiceBusQueueTriggerToBlobTestImpl()
        {
            // ServiceBus tests need the following environment var:
            // "AzureWebJobsServiceBus" -- the connection string for the ServiceBus account
            string testQueueName    = "test-input";
            string connectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);
            var    namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

            await namespaceManager.DeleteQueueAsync(testQueueName);

            await namespaceManager.CreateQueueAsync(testQueueName);

            QueueClient queueClient = QueueClient.CreateFromConnectionString(connectionString, testQueueName);

            var resultBlob = Fixture.TestContainer.GetBlockBlobReference("completed");
            await resultBlob.DeleteIfExistsAsync();

            string  id      = Guid.NewGuid().ToString();
            JObject message = new JObject
            {
                { "count", 0 },
                { "id", id }
            };

            using (Stream stream = new MemoryStream())
                using (TextWriter writer = new StreamWriter(stream))
                {
                    writer.Write(message.ToString());
                    writer.Flush();
                    stream.Position = 0;

                    await queueClient.SendAsync(new BrokeredMessage(stream) { ContentType = "text/plain" });
                }

            queueClient.Close();

            // now wait for function to be invoked
            string result = await TestHelpers.WaitForBlobAsync(resultBlob);

            Assert.Equal(TestHelpers.RemoveByteOrderMarkAndWhitespace(id), TestHelpers.RemoveByteOrderMarkAndWhitespace(result));
        }
        public async Task MultipleOutputs()
        {
            string id1 = Guid.NewGuid().ToString();
            string id2 = Guid.NewGuid().ToString();
            string id3 = Guid.NewGuid().ToString();

            JObject input = new JObject
            {
                { "id1", id1 },
                { "id2", id2 },
                { "id3", id3 }
            };
            Dictionary <string, object> arguments = new Dictionary <string, object>
            {
                { "input", input.ToString() }
            };
            await Fixture.Host.CallAsync("MultipleOutputs", arguments);

            // verify all 3 output blobs were written
            var blob = Fixture.TestOutputContainer.GetBlockBlobReference(id1);
            await TestHelpers.WaitForBlobAsync(blob);

            string blobContent = await blob.DownloadTextAsync();

            // TODO: why required?
            Assert.Equal("Test Blob 1", blobContent.TrimEnd('\0').Trim('"'));

            blob = Fixture.TestOutputContainer.GetBlockBlobReference(id2);
            await TestHelpers.WaitForBlobAsync(blob);

            blobContent = await blob.DownloadTextAsync();

            Assert.Equal("Test Blob 2", blobContent.TrimEnd('\0').Trim('"'));

            blob = Fixture.TestOutputContainer.GetBlockBlobReference(id3);
            await TestHelpers.WaitForBlobAsync(blob);

            blobContent = await blob.DownloadTextAsync();

            Assert.Equal("Test Blob 3", blobContent.TrimEnd('\0').Trim('"'));
        }
예제 #11
0
        protected async Task ApiHubTest()
        {
            // ApiHub needs the following environment vars:
            // "AzureWebJobsDropBox" - the connection string for drop box
            // TODO: this environment variable will be removed once local file based implementation of ApiHub SDK is used,

            string testBlob   = "teste2e";
            string apiHubFile = "teste2e/test.txt";
            var    resultBlob = Fixture.TestContainer.GetBlockBlobReference(testBlob);

            resultBlob.DeleteIfExists();

            var root = ItemFactory.Parse(Environment.GetEnvironmentVariable("AzureWebJobsDropBox"));

            if (root.FileExists(apiHubFile))
            {
                var file = await root.CreateFileAsync(apiHubFile);

                // TODO: this will be removed once updated Api SDK is referenced.
                await file.HandleId;
                await file.DeleteAsync();
            }

            // Test both writing and reading from ApiHub.
            // First, manually invoke a function that has an output binding to write to Dropbox.
            string testData = Guid.NewGuid().ToString();

            Dictionary <string, object> arguments = new Dictionary <string, object>
            {
                { "input", testData },
            };
            await Fixture.Host.CallAsync("ApiHubSender", arguments);

            // Second, there's an ApiHub trigger which will write a blob.
            // Once the blob is written, we know both sender & listener are working.
            // TODO: removing the BOM character from result.
            string result = (await TestHelpers.WaitForBlobAsync(resultBlob)).Remove(0, 1);

            Assert.Equal(testData, result);
        }
예제 #12
0
        public async Task QueueTriggerToBlobTest()
        {
            string            id             = Guid.NewGuid().ToString();
            string            messageContent = string.Format("{{ \"id\": \"{0}\" }}", id);
            CloudQueueMessage message        = new CloudQueueMessage(messageContent);

            await Fixture.TestQueue.AddMessageAsync(message);

            var    resultBlob = Fixture.TestContainer.GetBlockBlobReference(id);
            string result     = await TestHelpers.WaitForBlobAsync(resultBlob);

            Assert.Equal(TestHelpers.RemoveByteOrderMarkAndWhitespace(messageContent), TestHelpers.RemoveByteOrderMarkAndWhitespace(result));

            TraceEvent traceEvent = await WaitForTraceAsync(p => p.Message.Contains(id));

            Assert.Equal(TraceLevel.Verbose, traceEvent.Level);

            string trace = traceEvent.Message;

            Assert.True(trace.Contains("script processed queue message"));
            Assert.True(trace.Replace(" ", string.Empty).Contains(messageContent.Replace(" ", string.Empty)));
        }
        public async Task MultipleInputs()
        {
            string id = Guid.NewGuid().ToString();

            JObject input = new JObject
            {
                { "id", id },
                { "rk1", "001" },
                { "rk2", "002" }
            };
            Dictionary <string, object> arguments = new Dictionary <string, object>
            {
                { "input", input.ToString() }
            };
            await Fixture.Host.CallAsync("MultipleInputs", arguments);

            // verify the correct output blob was written
            var blob = Fixture.TestOutputContainer.GetBlockBlobReference(id);
            await TestHelpers.WaitForBlobAsync(blob);

            string blobContent = blob.DownloadText();

            Assert.Equal("Test Entity 1, Test Entity 2", TestHelpers.RemoveByteOrderMark(blobContent.Trim()));
        }