public async Task TransformationOperationsTest() { using (MockContext context = MockContext.Start(this.GetType().FullName)) { string resourceGroupName = TestUtilities.GenerateName("sjrg"); string jobName = TestUtilities.GenerateName("sj"); string transformationName = TestUtilities.GenerateName("transformation"); var resourceManagementClient = this.GetResourceManagementClient(context); var streamAnalyticsManagementClient = this.GetStreamAnalyticsManagementClient(context); string expectedTransformationType = TestHelper.GetFullRestOnlyResourceType(TestHelper.TransformationResourceType); string expectedTransformationResourceId = TestHelper.GetRestOnlyResourceId(streamAnalyticsManagementClient.SubscriptionId, resourceGroupName, jobName, TestHelper.TransformationResourceType, transformationName); resourceManagementClient.ResourceGroups.CreateOrUpdate(resourceGroupName, new ResourceGroup { Location = TestHelper.DefaultLocation }); Transformation transformation = new Transformation() { Query = "Select Id, Name from inputtest", StreamingUnits = 6 }; // PUT job streamAnalyticsManagementClient.StreamingJobs.CreateOrReplace(TestHelper.GetDefaultStreamingJob(), resourceGroupName, jobName); // PUT transformation var putResponse = await streamAnalyticsManagementClient.Transformations.CreateOrReplaceWithHttpMessagesAsync(transformation, resourceGroupName, jobName, transformationName); ValidationHelper.ValidateTransformation(transformation, putResponse.Body, false); Assert.Equal(expectedTransformationResourceId, putResponse.Body.Id); Assert.Equal(transformationName, putResponse.Body.Name); Assert.Equal(expectedTransformationType, putResponse.Body.Type); // Verify GET request returns expected transformation var getResponse = await streamAnalyticsManagementClient.Transformations.GetWithHttpMessagesAsync(resourceGroupName, jobName, transformationName); ValidationHelper.ValidateTransformation(putResponse.Body, getResponse.Body, true); // ETag should be the same Assert.Equal(putResponse.Headers.ETag, getResponse.Headers.ETag); // PATCH transformation var transformationPatch = new Transformation() { Query = "New query" }; putResponse.Body.Query = transformationPatch.Query; var patchResponse = await streamAnalyticsManagementClient.Transformations.UpdateWithHttpMessagesAsync(transformationPatch, resourceGroupName, jobName, transformationName); ValidationHelper.ValidateTransformation(putResponse.Body, patchResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, patchResponse.Headers.ETag); // Run another GET transformation to verify that it returns the newly updated properties as well getResponse = await streamAnalyticsManagementClient.Transformations.GetWithHttpMessagesAsync(resourceGroupName, jobName, transformationName); ValidationHelper.ValidateTransformation(putResponse.Body, getResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, getResponse.Headers.ETag); Assert.Equal(patchResponse.Headers.ETag, getResponse.Headers.ETag); } }
public async Task FunctionOperationsTest_Scalar_AzureMLWebService() { using (MockContext context = MockContext.Start(this.GetType())) { string resourceGroupName = TestUtilities.GenerateName("sjrg"); string jobName = TestUtilities.GenerateName("sj"); string functionName = TestUtilities.GenerateName("function"); var resourceManagementClient = this.GetResourceManagementClient(context); var streamAnalyticsManagementClient = this.GetStreamAnalyticsManagementClient(context); string expectedFunctionType = TestHelper.GetFullRestOnlyResourceType(TestHelper.FunctionsResourceType); string expectedFunctionResourceId = TestHelper.GetRestOnlyResourceId(streamAnalyticsManagementClient.SubscriptionId, resourceGroupName, jobName, TestHelper.FunctionsResourceType, functionName); resourceManagementClient.ResourceGroups.CreateOrUpdate(resourceGroupName, new ResourceGroup { Location = TestHelper.DefaultLocation }); var expectedFunction = new Function() { Properties = new ScalarFunctionProperties() { Inputs = new List <FunctionInput>() { new FunctionInput() { DataType = @"nvarchar(max)", IsConfigurationParameter = null } }, Output = new FunctionOutput() { DataType = @"nvarchar(max)" }, Binding = new AzureMachineLearningStudioFunctionBinding() { Endpoint = TestHelper.ExecuteEndpoint, ApiKey = null, Inputs = new AzureMachineLearningStudioInputs() { Name = "input1", ColumnNames = new AzureMachineLearningStudioInputColumn[] { new AzureMachineLearningStudioInputColumn() { Name = "tweet", DataType = "string", MapTo = 0 } } }, Outputs = new List <AzureMachineLearningStudioOutputColumn>() { new AzureMachineLearningStudioOutputColumn() { Name = "Sentiment", DataType = "string" } }, BatchSize = 1000 } } }; // PUT job streamAnalyticsManagementClient.StreamingJobs.CreateOrReplace(TestHelper.GetDefaultStreamingJob(), resourceGroupName, jobName); // Retrieve default definition AzureMachineLearningStudioFunctionRetrieveDefaultDefinitionParameters retrieveDefaultDefinitionParameters = new AzureMachineLearningStudioFunctionRetrieveDefaultDefinitionParameters() { UdfType = UdfType.Scalar, ExecuteEndpoint = TestHelper.ExecuteEndpoint }; var function = streamAnalyticsManagementClient.Functions.RetrieveDefaultDefinition(resourceGroupName, jobName, functionName, retrieveDefaultDefinitionParameters); Assert.Equal(functionName, function.Name); Assert.Null(function.Id); Assert.Null(function.Type); ValidationHelper.ValidateFunctionProperties(expectedFunction.Properties, function.Properties, false); // PUT function ((AzureMachineLearningStudioFunctionBinding)((ScalarFunctionProperties)function.Properties).Binding).ApiKey = TestHelper.ApiKey; var putResponse = await streamAnalyticsManagementClient.Functions.CreateOrReplaceWithHttpMessagesAsync(function, resourceGroupName, jobName, functionName); ((AzureMachineLearningStudioFunctionBinding)((ScalarFunctionProperties)function.Properties).Binding).ApiKey = null; // Null out because secrets are not returned in responses ValidationHelper.ValidateFunction(function, putResponse.Body, false); Assert.Equal(expectedFunctionResourceId, putResponse.Body.Id); Assert.Equal(functionName, putResponse.Body.Name); Assert.Equal(expectedFunctionType, putResponse.Body.Type); // Verify GET request returns expected function var getResponse = await streamAnalyticsManagementClient.Functions.GetWithHttpMessagesAsync(resourceGroupName, jobName, functionName); ValidationHelper.ValidateFunction(putResponse.Body, getResponse.Body, true); // ETag should be the same Assert.Equal(putResponse.Headers.ETag, getResponse.Headers.ETag); // Test Function var testResult = streamAnalyticsManagementClient.Functions.Test(resourceGroupName, jobName, functionName); Assert.Equal("TestSucceeded", testResult.Status); Assert.Null(testResult.Error); // PATCH function var functionPatch = new Function() { Properties = new ScalarFunctionProperties() { Binding = new AzureMachineLearningStudioFunctionBinding() { BatchSize = 5000 } } }; ((AzureMachineLearningStudioFunctionBinding)((ScalarFunctionProperties)putResponse.Body.Properties).Binding).BatchSize = ((AzureMachineLearningStudioFunctionBinding)((ScalarFunctionProperties)functionPatch.Properties).Binding).BatchSize; var patchResponse = await streamAnalyticsManagementClient.Functions.UpdateWithHttpMessagesAsync(functionPatch, resourceGroupName, jobName, functionName); ValidationHelper.ValidateFunction(putResponse.Body, patchResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, patchResponse.Headers.ETag); // Run another GET function to verify that it returns the newly updated properties as well getResponse = await streamAnalyticsManagementClient.Functions.GetWithHttpMessagesAsync(resourceGroupName, jobName, functionName); ValidationHelper.ValidateFunction(putResponse.Body, getResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, getResponse.Headers.ETag); Assert.Equal(patchResponse.Headers.ETag, getResponse.Headers.ETag); // List function and verify that the function shows up in the list var listResult = streamAnalyticsManagementClient.Functions.ListByStreamingJob(resourceGroupName, jobName); Assert.Single(listResult); ValidationHelper.ValidateFunction(putResponse.Body, listResult.Single(), true); Assert.Equal(getResponse.Headers.ETag, listResult.Single().Properties.Etag); // Get job with function expanded and verify that the function shows up var getJobResponse = streamAnalyticsManagementClient.StreamingJobs.Get(resourceGroupName, jobName, "functions"); Assert.Single(getJobResponse.Functions); ValidationHelper.ValidateFunction(putResponse.Body, getJobResponse.Functions.Single(), true); Assert.Equal(getResponse.Headers.ETag, getJobResponse.Functions.Single().Properties.Etag); // Delete function streamAnalyticsManagementClient.Functions.Delete(resourceGroupName, jobName, functionName); // Verify that list operation returns an empty list after deleting the function listResult = streamAnalyticsManagementClient.Functions.ListByStreamingJob(resourceGroupName, jobName); Assert.Empty(listResult); // Get job with function expanded and verify that there are no functions after deleting the function getJobResponse = streamAnalyticsManagementClient.StreamingJobs.Get(resourceGroupName, jobName, "functions"); Assert.Empty(getJobResponse.Functions); } }
public async Task InputOperationsTest_Reference_Blob() { using (MockContext context = MockContext.Start(this.GetType())) { string resourceGroupName = TestUtilities.GenerateName("sjrg"); string jobName = TestUtilities.GenerateName("sj"); string inputName = TestUtilities.GenerateName("input"); var resourceManagementClient = this.GetResourceManagementClient(context); var streamAnalyticsManagementClient = this.GetStreamAnalyticsManagementClient(context); string expectedInputType = TestHelper.GetFullRestOnlyResourceType(TestHelper.InputsResourceType); string expectedInputResourceId = TestHelper.GetRestOnlyResourceId(streamAnalyticsManagementClient.SubscriptionId, resourceGroupName, jobName, TestHelper.InputsResourceType, inputName); resourceManagementClient.ResourceGroups.CreateOrUpdate(resourceGroupName, new ResourceGroup { Location = TestHelper.DefaultLocation }); StorageAccount storageAccount = new StorageAccount() { AccountName = TestHelper.AccountName, AccountKey = TestHelper.AccountKey }; Input input = new Input() { Properties = new ReferenceInputProperties() { Serialization = new CsvSerialization() { FieldDelimiter = ",", Encoding = Encoding.UTF8 }, Datasource = new BlobReferenceInputDataSource() { StorageAccounts = new[] { storageAccount }, Container = TestHelper.Container, PathPattern = "{date}/{time}", DateFormat = "yyyy/MM/dd", TimeFormat = "HH" } } }; // PUT job streamAnalyticsManagementClient.StreamingJobs.CreateOrReplace(TestHelper.GetDefaultStreamingJob(), resourceGroupName, jobName); // PUT input var putResponse = await streamAnalyticsManagementClient.Inputs.CreateOrReplaceWithHttpMessagesAsync(input, resourceGroupName, jobName, inputName); storageAccount.AccountKey = null; // Null out because secrets are not returned in responses ValidationHelper.ValidateInput(input, putResponse.Body, false); Assert.Equal(expectedInputResourceId, putResponse.Body.Id); Assert.Equal(inputName, putResponse.Body.Name); Assert.Equal(expectedInputType, putResponse.Body.Type); // Verify GET request returns expected input var getResponse = await streamAnalyticsManagementClient.Inputs.GetWithHttpMessagesAsync(resourceGroupName, jobName, inputName); ValidationHelper.ValidateInput(putResponse.Body, getResponse.Body, true); // ETag should be the same Assert.Equal(putResponse.Headers.ETag, getResponse.Headers.ETag); // Test Input var testResult = streamAnalyticsManagementClient.Inputs.Test(resourceGroupName, jobName, inputName); Assert.Equal("TestSucceeded", testResult.Status); Assert.Null(testResult.Error); // PATCH input var inputPatch = new Input() { Properties = new ReferenceInputProperties() { Serialization = new CsvSerialization() { FieldDelimiter = "|", Encoding = Encoding.UTF8 }, Datasource = new BlobReferenceInputDataSource() { Container = "differentContainer" } } }; ((CsvSerialization)putResponse.Body.Properties.Serialization).FieldDelimiter = ((CsvSerialization)inputPatch.Properties.Serialization).FieldDelimiter; ((BlobReferenceInputDataSource)((ReferenceInputProperties)putResponse.Body.Properties).Datasource).Container = ((BlobReferenceInputDataSource)((ReferenceInputProperties)inputPatch.Properties).Datasource).Container; var patchResponse = await streamAnalyticsManagementClient.Inputs.UpdateWithHttpMessagesAsync(inputPatch, resourceGroupName, jobName, inputName); ValidationHelper.ValidateInput(putResponse.Body, patchResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, patchResponse.Headers.ETag); // Run another GET input to verify that it returns the newly updated properties as well getResponse = await streamAnalyticsManagementClient.Inputs.GetWithHttpMessagesAsync(resourceGroupName, jobName, inputName); ValidationHelper.ValidateInput(putResponse.Body, getResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, getResponse.Headers.ETag); Assert.Equal(patchResponse.Headers.ETag, getResponse.Headers.ETag); // List input and verify that the input shows up in the list var listResult = streamAnalyticsManagementClient.Inputs.ListByStreamingJob(resourceGroupName, jobName); Assert.Single(listResult); ValidationHelper.ValidateInput(putResponse.Body, listResult.Single(), true); Assert.Equal(getResponse.Headers.ETag, listResult.Single().Properties.Etag); // Get job with input expanded and verify that the input shows up var getJobResponse = streamAnalyticsManagementClient.StreamingJobs.Get(resourceGroupName, jobName, "inputs"); Assert.Single(getJobResponse.Inputs); ValidationHelper.ValidateInput(putResponse.Body, getJobResponse.Inputs.Single(), true); Assert.Equal(getResponse.Headers.ETag, getJobResponse.Inputs.Single().Properties.Etag); // Delete input streamAnalyticsManagementClient.Inputs.Delete(resourceGroupName, jobName, inputName); // Verify that list operation returns an empty list after deleting the input listResult = streamAnalyticsManagementClient.Inputs.ListByStreamingJob(resourceGroupName, jobName); Assert.Empty(listResult); // Get job with input expanded and verify that there are no inputs after deleting the input getJobResponse = streamAnalyticsManagementClient.StreamingJobs.Get(resourceGroupName, jobName, "inputs"); Assert.Empty(getJobResponse.Inputs); } }
public async Task FunctionOperationsTest_Scalar_JavaScript() { using (MockContext context = MockContext.Start(this.GetType())) { string resourceGroupName = TestUtilities.GenerateName("sjrg"); string jobName = TestUtilities.GenerateName("sj"); string functionName = TestUtilities.GenerateName("function"); var resourceManagementClient = this.GetResourceManagementClient(context); var streamAnalyticsManagementClient = this.GetStreamAnalyticsManagementClient(context); string expectedFunctionType = TestHelper.GetFullRestOnlyResourceType(TestHelper.FunctionsResourceType); string expectedFunctionResourceId = TestHelper.GetRestOnlyResourceId(streamAnalyticsManagementClient.SubscriptionId, resourceGroupName, jobName, TestHelper.FunctionsResourceType, functionName); resourceManagementClient.ResourceGroups.CreateOrUpdate(resourceGroupName, new ResourceGroup { Location = TestHelper.DefaultLocation }); string javaScriptFunctionCode = @"function (x, y) { return x + y; }"; var function = new Function() { Properties = new ScalarFunctionProperties() { Inputs = new List <FunctionInput>() { new FunctionInput() { DataType = @"Any", IsConfigurationParameter = null } }, Output = new FunctionOutput() { DataType = @"Any" }, Binding = new JavaScriptFunctionBinding() { Script = javaScriptFunctionCode } } }; // PUT job streamAnalyticsManagementClient.StreamingJobs.CreateOrReplace(TestHelper.GetDefaultStreamingJob(), resourceGroupName, jobName); // Retrieve default definition JavaScriptFunctionRetrieveDefaultDefinitionParameters retrieveDefaultDefinitionParameters = new JavaScriptFunctionRetrieveDefaultDefinitionParameters() { UdfType = UdfType.Scalar, Script = javaScriptFunctionCode }; CloudException cloudException = Assert.Throws <CloudException>( () => streamAnalyticsManagementClient.Functions.RetrieveDefaultDefinition(resourceGroupName, jobName, functionName, retrieveDefaultDefinitionParameters)); Assert.Equal(HttpStatusCode.InternalServerError, cloudException.Response.StatusCode); Assert.Contains(@"Retrieve default definition is not supported for function type: Microsoft.StreamAnalytics/JavascriptUdf", cloudException.Response.Content); // PUT function var putResponse = await streamAnalyticsManagementClient.Functions.CreateOrReplaceWithHttpMessagesAsync(function, resourceGroupName, jobName, functionName); ValidationHelper.ValidateFunction(function, putResponse.Body, false); Assert.Equal(expectedFunctionResourceId, putResponse.Body.Id); Assert.Equal(functionName, putResponse.Body.Name); Assert.Equal(expectedFunctionType, putResponse.Body.Type); // Verify GET request returns expected function var getResponse = await streamAnalyticsManagementClient.Functions.GetWithHttpMessagesAsync(resourceGroupName, jobName, functionName); ValidationHelper.ValidateFunction(putResponse.Body, getResponse.Body, true); // ETag should be the same Assert.Equal(putResponse.Headers.ETag, getResponse.Headers.ETag); // Test Function var testResult = streamAnalyticsManagementClient.Functions.Test(resourceGroupName, jobName, functionName); Assert.Equal("TestFailed", testResult.Status); Assert.NotNull(testResult.Error); Assert.Equal("BadRequest", testResult.Error.Code); Assert.Equal(@"Test operation is not supported for function type: Microsoft.StreamAnalytics/JavascriptUdf", testResult.Error.Message); // PATCH function var functionPatch = new Function() { Properties = new ScalarFunctionProperties() { Binding = new JavaScriptFunctionBinding() { Script = @"function (a, b) { return a * b; }" } } }; ((JavaScriptFunctionBinding)((ScalarFunctionProperties)putResponse.Body.Properties).Binding).Script = ((JavaScriptFunctionBinding)((ScalarFunctionProperties)functionPatch.Properties).Binding).Script; var patchResponse = await streamAnalyticsManagementClient.Functions.UpdateWithHttpMessagesAsync(functionPatch, resourceGroupName, jobName, functionName); ValidationHelper.ValidateFunction(putResponse.Body, patchResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, patchResponse.Headers.ETag); // Run another GET function to verify that it returns the newly updated properties as well getResponse = await streamAnalyticsManagementClient.Functions.GetWithHttpMessagesAsync(resourceGroupName, jobName, functionName); ValidationHelper.ValidateFunction(putResponse.Body, getResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, getResponse.Headers.ETag); Assert.Equal(patchResponse.Headers.ETag, getResponse.Headers.ETag); // List function and verify that the function shows up in the list var listResult = streamAnalyticsManagementClient.Functions.ListByStreamingJob(resourceGroupName, jobName); Assert.Single(listResult); ValidationHelper.ValidateFunction(putResponse.Body, listResult.Single(), true); Assert.Equal(getResponse.Headers.ETag, listResult.Single().Properties.Etag); // Get job with function expanded and verify that the function shows up var getJobResponse = streamAnalyticsManagementClient.StreamingJobs.Get(resourceGroupName, jobName, "functions"); Assert.Single(getJobResponse.Functions); ValidationHelper.ValidateFunction(putResponse.Body, getJobResponse.Functions.Single(), true); Assert.Equal(getResponse.Headers.ETag, getJobResponse.Functions.Single().Properties.Etag); // Delete function streamAnalyticsManagementClient.Functions.Delete(resourceGroupName, jobName, functionName); // Verify that list operation returns an empty list after deleting the function listResult = streamAnalyticsManagementClient.Functions.ListByStreamingJob(resourceGroupName, jobName); Assert.Empty(listResult); // Get job with function expanded and verify that there are no functions after deleting the function getJobResponse = streamAnalyticsManagementClient.StreamingJobs.Get(resourceGroupName, jobName, "functions"); Assert.Empty(getJobResponse.Functions); } }
public async Task InputOperationsTest_Stream_IoTHub() { using (MockContext context = MockContext.Start(this.GetType())) { string resourceGroupName = TestUtilities.GenerateName("sjrg"); string jobName = TestUtilities.GenerateName("sj"); string inputName = TestUtilities.GenerateName("input"); var resourceManagementClient = this.GetResourceManagementClient(context); var streamAnalyticsManagementClient = this.GetStreamAnalyticsManagementClient(context); string expectedInputType = TestHelper.GetFullRestOnlyResourceType(TestHelper.InputsResourceType); string expectedInputResourceId = TestHelper.GetRestOnlyResourceId(streamAnalyticsManagementClient.SubscriptionId, resourceGroupName, jobName, TestHelper.InputsResourceType, inputName); resourceManagementClient.ResourceGroups.CreateOrUpdate(resourceGroupName, new ResourceGroup { Location = TestHelper.DefaultLocation }); IoTHubStreamInputDataSource iotHub = new IoTHubStreamInputDataSource() { IotHubNamespace = TestHelper.IoTHubNamespace, SharedAccessPolicyName = TestHelper.IoTSharedAccessPolicyName, SharedAccessPolicyKey = TestHelper.IoTHubSharedAccessPolicyKey, Endpoint = "messages/events", ConsumerGroupName = "sdkconsumergroup" }; Input input = new Input() { Properties = new StreamInputProperties() { Serialization = new AvroSerialization(), Datasource = iotHub } }; // PUT job streamAnalyticsManagementClient.StreamingJobs.CreateOrReplace(TestHelper.GetDefaultStreamingJob(), resourceGroupName, jobName); // PUT input var putResponse = await streamAnalyticsManagementClient.Inputs.CreateOrReplaceWithHttpMessagesAsync(input, resourceGroupName, jobName, inputName); iotHub.SharedAccessPolicyKey = null; // Null out because secrets are not returned in responses ValidationHelper.ValidateInput(input, putResponse.Body, false); Assert.Equal(expectedInputResourceId, putResponse.Body.Id); Assert.Equal(inputName, putResponse.Body.Name); Assert.Equal(expectedInputType, putResponse.Body.Type); // Verify GET request returns expected input var getResponse = await streamAnalyticsManagementClient.Inputs.GetWithHttpMessagesAsync(resourceGroupName, jobName, inputName); ValidationHelper.ValidateInput(putResponse.Body, getResponse.Body, true); // ETag should be the same Assert.Equal(putResponse.Headers.ETag, getResponse.Headers.ETag); // Test Input var testResult = streamAnalyticsManagementClient.Inputs.Test(resourceGroupName, jobName, inputName); Assert.Equal("TestSucceeded", testResult.Status); Assert.Null(testResult.Error); // PATCH input var inputPatch = new Input() { Properties = new StreamInputProperties() { Serialization = new CsvSerialization() { FieldDelimiter = "|", Encoding = Encoding.UTF8 }, Datasource = new IoTHubStreamInputDataSource() { Endpoint = "messages/operationsMonitoringEvents" } } }; putResponse.Body.Properties.Serialization = inputPatch.Properties.Serialization; ((IoTHubStreamInputDataSource)((StreamInputProperties)putResponse.Body.Properties).Datasource).Endpoint = ((IoTHubStreamInputDataSource)((StreamInputProperties)inputPatch.Properties).Datasource).Endpoint; var patchResponse = await streamAnalyticsManagementClient.Inputs.UpdateWithHttpMessagesAsync(inputPatch, resourceGroupName, jobName, inputName); ValidationHelper.ValidateInput(putResponse.Body, patchResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, patchResponse.Headers.ETag); // Run another GET input to verify that it returns the newly updated properties as well getResponse = await streamAnalyticsManagementClient.Inputs.GetWithHttpMessagesAsync(resourceGroupName, jobName, inputName); ValidationHelper.ValidateInput(putResponse.Body, getResponse.Body, true); // ETag should be different after a PATCH operation Assert.NotEqual(putResponse.Headers.ETag, getResponse.Headers.ETag); Assert.Equal(patchResponse.Headers.ETag, getResponse.Headers.ETag); // List input and verify that the input shows up in the list var listResult = streamAnalyticsManagementClient.Inputs.ListByStreamingJob(resourceGroupName, jobName); Assert.Single(listResult); ValidationHelper.ValidateInput(putResponse.Body, listResult.Single(), true); Assert.Equal(getResponse.Headers.ETag, listResult.Single().Properties.Etag); // Get job with input expanded and verify that the input shows up var getJobResponse = streamAnalyticsManagementClient.StreamingJobs.Get(resourceGroupName, jobName, "inputs"); Assert.Single(getJobResponse.Inputs); ValidationHelper.ValidateInput(putResponse.Body, getJobResponse.Inputs.Single(), true); Assert.Equal(getResponse.Headers.ETag, getJobResponse.Inputs.Single().Properties.Etag); // Delete input streamAnalyticsManagementClient.Inputs.Delete(resourceGroupName, jobName, inputName); // Verify that list operation returns an empty list after deleting the input listResult = streamAnalyticsManagementClient.Inputs.ListByStreamingJob(resourceGroupName, jobName); Assert.Empty(listResult); // Get job with input expanded and verify that there are no inputs after deleting the input getJobResponse = streamAnalyticsManagementClient.StreamingJobs.Get(resourceGroupName, jobName, "inputs"); Assert.Empty(getJobResponse.Inputs); } }