public void TestPatchJob_NewSimpleParameterIsSerialized() { const string jobId = "Foo"; const int newPriority = 5; var protoJob = new Protocol.Models.CloudJob(id: jobId); var newOnAllTasksCompleted = Protocol.Models.OnAllTasksComplete.TerminateJob; Action <CloudJob> modificationFunction = job => { job.Priority = newPriority; job.OnAllTasksComplete = (Microsoft.Azure.Batch.Common.OnAllTasksComplete?)newOnAllTasksCompleted; }; Action <Protocol.Models.JobPatchParameter> assertAction = patchParameters => { Assert.Null(patchParameters.Constraints); Assert.Null(patchParameters.Metadata); Assert.Null(patchParameters.PoolInfo); Assert.NotNull(patchParameters.Priority); Assert.Equal(newPriority, patchParameters.Priority); Assert.NotNull(patchParameters.OnAllTasksComplete); Assert.Equal(newOnAllTasksCompleted, patchParameters.OnAllTasksComplete); }; CommonPatchJobTest(protoJob, modificationFunction, assertAction); }
public void TestPatchJob_NewComplexParameterIsSerialized() { const string jobId = "Foo"; const string newPoolId = "Bar"; var protoJob = new Protocol.Models.CloudJob(id: jobId); Action <CloudJob> modificationFunction = job => { job.PoolInformation = new PoolInformation() { PoolId = newPoolId }; }; Action <Protocol.Models.JobPatchParameter> assertAction = patchParameters => { Assert.Null(patchParameters.Priority); Assert.Null(patchParameters.Constraints); Assert.Null(patchParameters.Metadata); Assert.Null(patchParameters.OnAllTasksComplete); Assert.NotNull(patchParameters.PoolInfo); Assert.Equal(newPoolId, patchParameters.PoolInfo.PoolId); }; CommonPatchJobTest(protoJob, modificationFunction, assertAction); }
public void TestPatchJob_UnchangedChildEntityWithNonemptyListIsIgnored() { const string jobId = "Foo"; var protoJob = new Protocol.Models.CloudJob( id: jobId, poolInfo: new Protocol.Models.PoolInformation( poolId: "Test", autoPoolSpecification: new Protocol.Models.AutoPoolSpecification( Protocol.Models.PoolLifetimeOption.Job, pool: new Protocol.Models.PoolSpecification( "small", applicationPackageReferences: new List <Protocol.Models.ApplicationPackageReference>() { new Protocol.Models.ApplicationPackageReference("a") })))); Action <CloudJob> modificationFunction = job => { //Do nothing }; Action <Protocol.Models.JobPatchParameter> assertAction = patchParameters => { Assert.Null(patchParameters.Priority); Assert.Null(patchParameters.Metadata); Assert.Null(patchParameters.PoolInfo); Assert.Null(patchParameters.OnAllTasksComplete); Assert.Null(patchParameters.Constraints); }; CommonPatchJobTest(protoJob, modificationFunction, assertAction); }
public void TestPatchJob_ChangedComplexParameterIsSerialized() { const string jobId = "Foo"; TimeSpan newMaxWallClock = TimeSpan.FromSeconds(20); var protoJob = new Protocol.Models.CloudJob( id: jobId, constraints: new Protocol.Models.JobConstraints(maxWallClockTime: TimeSpan.FromSeconds(10))); Action <CloudJob> modificationFunction = job => { job.Constraints.MaxWallClockTime = newMaxWallClock; }; Action <Protocol.Models.JobPatchParameter> assertAction = patchParameters => { Assert.Null(patchParameters.Priority); Assert.Null(patchParameters.Metadata); Assert.Null(patchParameters.PoolInfo); Assert.Null(patchParameters.OnAllTasksComplete); Assert.NotNull(patchParameters.Constraints); Assert.Equal(newMaxWallClock, patchParameters.Constraints.MaxWallClockTime); Assert.Null(patchParameters.Constraints.MaxTaskRetryCount); }; CommonPatchJobTest(protoJob, modificationFunction, assertAction); }
public void TestPatchJob_UnchangedEntitiesAreIgnored() { const string jobId = "Foo"; var protoJob = new Protocol.Models.CloudJob( id: jobId, constraints: new Protocol.Models.JobConstraints(maxWallClockTime: TimeSpan.FromSeconds(10)), metadata: new List <Protocol.Models.MetadataItem>() { new Protocol.Models.MetadataItem() }, poolInfo: new Protocol.Models.PoolInformation(poolId: "Test")); Action <CloudJob> modificationFunction = job => { //Do nothing }; Action <Protocol.Models.JobPatchParameter> assertAction = patchParameters => { Assert.Null(patchParameters.Priority); Assert.Null(patchParameters.Metadata); Assert.Null(patchParameters.PoolInfo); Assert.Null(patchParameters.OnAllTasksComplete); Assert.Null(patchParameters.Constraints); }; CommonPatchJobTest(protoJob, modificationFunction, assertAction); }
public void TestPatchJob_ChangedCollectionParameterIsSerialized() { const string jobId = "Foo"; var protoJob = new Protocol.Models.CloudJob( id: jobId, metadata: new List <Protocol.Models.MetadataItem>() { new Protocol.Models.MetadataItem("Foo", "Bar") }); Action <CloudJob> modificationFunction = job => { job.Metadata.Add(new MetadataItem("Baz", "Qux")); }; Action <Protocol.Models.JobPatchParameter> assertAction = patchParameters => { Assert.Null(patchParameters.Priority); Assert.Null(patchParameters.Constraints); Assert.Null(patchParameters.PoolInfo); Assert.Null(patchParameters.OnAllTasksComplete); Assert.NotNull(patchParameters.Metadata); Assert.Equal(2, patchParameters.Metadata.Count); }; CommonPatchJobTest(protoJob, modificationFunction, assertAction); }
public async Task UnboundJobCommitAndRefreshWorks() { using (BatchClient batchClient = ClientUnitTestCommon.CreateDummyClient()) { const string id = "Bar"; const string displayName = "Baz"; var prepTask = new Protocol.Models.JobPreparationTask(id); Protocol.Models.CloudJob protoJob = new Protocol.Models.CloudJob( id: id, displayName: displayName, jobPreparationTask: prepTask); CloudJob job = batchClient.JobOperations.CreateJob(id, new PoolInformation() { PoolId = "Foo" }); await job.CommitAsync(additionalBehaviors : InterceptorFactory.CreateAddJobRequestInterceptor()); await job.RefreshAsync(additionalBehaviors : InterceptorFactory.CreateGetJobRequestInterceptor(protoJob)); Assert.Equal(id, job.Id); Assert.Equal(displayName, job.DisplayName); Assert.Null(job.PoolInformation); Assert.NotNull(job.JobPreparationTask); Assert.Equal(prepTask.Id, job.JobPreparationTask.Id); } }
public void TestRandomBoundCloudJobProperties() { using BatchClient client = ClientUnitTestCommon.CreateDummyClient(); for (int i = 0; i < TestRunCount; i++) { Protocol.Models.CloudJob jobModel = this.customizedObjectFactory.GenerateNew <Protocol.Models.CloudJob>(); CloudJob boundJob = new CloudJob(client.JobOperations.ParentBatchClient, jobModel, client.CustomBehaviors); ObjectComparer.CheckEqualityResult result = this.objectComparer.CheckEquality(boundJob, jobModel); Assert.True(result.Equal, result.Message); } }
public void TestPatchJob_ThrowsOnNullPropertySet() { const string jobId = "Foo"; var protoJob = new Protocol.Models.CloudJob( id: jobId); Action <CloudJob> modificationFunction = job => job.PoolInformation = null; Action <Protocol.Models.JobPatchParameter> assertAction = patchParameters => { Assert.False(true, "Should have failed PATCH validation before issuing the request"); }; //This should throw because we set a property to null which is not supported by PATCH Assert.Throws <InvalidOperationException>(() => CommonPatchJobTest(protoJob, modificationFunction, assertAction)); }
private static void CommonPatchJobTest( Protocol.Models.CloudJob startEntity, Action <CloudJob> modificationFunction, Action <Protocol.Models.JobPatchParameter> assertAction) { using (BatchClient client = ClientUnitTestCommon.CreateDummyClient()) { CloudJob job = client.JobOperations.GetJob( string.Empty, additionalBehaviors: InterceptorFactory.CreateGetJobRequestInterceptor(startEntity)); modificationFunction(job); var patchInterceptor = ShimPatchJob(assertAction); job.CommitChanges(additionalBehaviors: new[] { patchInterceptor }); //Ensure that the job is in readable but unmodifiable state var id = job.Id; var priority = job.Priority; Assert.Throws <InvalidOperationException>(() => job.Priority = 5); } }
public static IEnumerable <Protocol.RequestInterceptor> CreateGetJobRequestInterceptor(Protocol.Models.CloudJob jobToReturn) { return(CreateGetRequestInterceptor <Protocol.Models.JobGetOptions, Protocol.Models.CloudJob, Protocol.Models.JobGetHeaders>(jobToReturn)); }
public void TestPatchJob_NewComplexParameterIsSerialized() { const string jobId = "Foo"; const string newPoolId = "Bar"; var protoJob = new Protocol.Models.CloudJob(id: jobId);