< Summary

Class:Microsoft.Azure.Batch.AddTaskCollectionResultHandler
Assembly:Microsoft.Azure.Batch
File(s):C:\Git\azure-sdk-for-net\sdk\batch\Microsoft.Azure.Batch\src\AddTaskCollectionResultHandler.cs
Covered lines:12
Uncovered lines:4
Coverable lines:16
Total lines:81
Line coverage:75% (12 of 16)
Covered branches:8
Total branches:12
Branch coverage:66.6% (8 of 12)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
get_ResultHandler()-100%100%
.ctor(...)-80%50%
DefaultAddTaskCollectionResultHandler(...)-70%70%

File(s)

C:\Git\azure-sdk-for-net\sdk\batch\Microsoft.Azure.Batch\src\AddTaskCollectionResultHandler.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License. See License.txt in the project root for license information.
 3
 4using System;
 5using System.Threading;
 6using Microsoft.Azure.Batch.Common;
 7
 8namespace Microsoft.Azure.Batch
 9{
 10    // TODO: the original documentation stated that this is for controlling parallelism but it's not clear what
 11    // you would do here in order to do that - that seems to be more governed by the parallelOptions argument to
 12    // AddTaskAsync.
 13
 14    /// <summary>
 15    /// A <see cref="BatchClientBehavior"/> which you can use to specify under what conditions an operation to
 16    /// add multiple tasks to a job should retry, terminate or be considered successful.
 17    /// </summary>
 18    /// <remarks>You do not need to specify this behavior explicitly; if you do not, a default behavior
 19    /// is used.  This behavior uses the <see cref="DefaultAddTaskCollectionResultHandler(AddTaskResult, CancellationTok
 20    /// criteria.</remarks>
 21    public class AddTaskCollectionResultHandler : BatchClientBehavior
 22    {
 23        /// <summary>
 24        /// Gets or sets the function that defines whether a particular Add Task operation is considered
 25        /// successful or unsuccessful, and whether it may be retried.
 26        /// </summary>
 65127        public Func<AddTaskResult, CancellationToken, AddTaskResultStatus> ResultHandler { get; set; }
 28
 29        /// <summary>
 30        /// Initializes a new instance of the <see cref="AddTaskCollectionResultHandler"/> class with the specified resu
 31        /// </summary>
 32        /// <param name="resultHandler">A function that defines whether a particular Add Task operation is considered
 33        /// successful or unsuccessful, and whether it may be retried.</param>
 65334        public AddTaskCollectionResultHandler(Func<AddTaskResult, CancellationToken, AddTaskResultStatus> resultHandler)
 35        {
 65336            if (resultHandler == null)
 37            {
 038                throw new ArgumentNullException("resultHandler");
 39            }
 40
 65341            this.ResultHandler = resultHandler;
 65342        }
 43
 44        /// <summary>
 45        /// The default result handler for the <see cref="AddTaskCollectionResultHandler"/> behavior. This handler
 46        /// treats success and 'TaskExists' errors as successful, retries server errors (HTTP 5xx), and throws
 47        /// <see cref="AddTaskCollectionTerminatedException"/> on client error (HTTP 4xx).
 48        /// </summary>
 49        /// <param name="addTaskResult">The result of a single Add Task operation.</param>
 50        /// <param name="cancellationToken">The cancellation token associated with the AddTaskCollection operation.</par
 51        /// <returns>An <see cref="AddTaskResultStatus"/> which indicates whether the <paramref name="addTaskResult"/>
 52        /// is classified as a success or as requiring a retry.</returns>
 53        public static AddTaskResultStatus DefaultAddTaskCollectionResultHandler(AddTaskResult addTaskResult, Cancellatio
 54        {
 255            if (addTaskResult == null)
 56            {
 057                throw new ArgumentNullException("addTaskResult");
 58            }
 59
 260            AddTaskResultStatus status = AddTaskResultStatus.Success;
 261            if (addTaskResult.Error != null)
 62            {
 63                //Check status code
 164                if (addTaskResult.Status == AddTaskStatus.ServerError)
 65                {
 066                    status = AddTaskResultStatus.Retry;
 67                }
 168                else if (addTaskResult.Status == AddTaskStatus.ClientError && addTaskResult.Error.Code == BatchErrorCode
 69                {
 070                    status = AddTaskResultStatus.Success; //Count TaskExists as a success always
 71                }
 72                else
 73                {
 74                    //Anything else is a failure -- abort the work flow
 175                    throw new AddTaskCollectionTerminatedException(addTaskResult);
 76                }
 77            }
 178            return status;
 79        }
 80    }
 81}