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"]); }
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('"')); }
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); }
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())); }