Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
 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);