< Summary

Class:Microsoft.Azure.Batch.AsyncListSubtasksEnumerator
Assembly:Microsoft.Azure.Batch
File(s):C:\Git\azure-sdk-for-net\sdk\batch\Microsoft.Azure.Batch\src\AsyncListSubtasks.cs
Covered lines:20
Uncovered lines:10
Coverable lines:30
Total lines:91
Line coverage:66.6% (20 of 30)
Covered branches:2
Total branches:8
Branch coverage:25% (2 of 8)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
.ctor(...)-100%100%
get_Current()-0%100%
GetNextBatchFromServerAsync()-57.14%25%

File(s)

C:\Git\azure-sdk-for-net\sdk\batch\Microsoft.Azure.Batch\src\AsyncListSubtasks.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
 4namespace Microsoft.Azure.Batch
 5{
 6    using System.Diagnostics;
 7    using System.Linq;
 8    using System.Threading;
 9    using Models = Microsoft.Azure.Batch.Protocol.Models;
 10
 11    internal class AsyncListSubtasksEnumerator : PagedEnumeratorBase<SubtaskInformation>
 12    {
 13        private readonly JobOperations _parentJobOperations;
 14        private readonly string _jobId;
 15        private readonly string _taskId;
 16        private readonly BehaviorManager _behaviorMgr;
 17        private readonly DetailLevel _detailLevel;
 18
 19#region // constructors
 20
 121        internal AsyncListSubtasksEnumerator(
 122                JobOperations parentJobOperations,
 123                string jobId,
 124                string taskId,
 125                BehaviorManager behaviorMgr,
 126                DetailLevel detailLevel)
 27        {
 128            _parentJobOperations = parentJobOperations;
 129            _jobId = jobId;
 130            _taskId = taskId;
 131            _behaviorMgr = behaviorMgr;
 132            _detailLevel = detailLevel;
 133        }
 34
 35#endregion // constructors
 36
 37        public override SubtaskInformation Current  // for IPagedEnumerator<T> and IEnumerator<T>
 38        {
 39            get
 40            {
 41                // start with the current object off of base
 042                object curObj = base._currentBatch[base._currentIndex];
 43
 44                // it must be a protocol object from previous call
 045                Models.SubtaskInformation protoSubtask = curObj as Models.SubtaskInformation;
 46
 47                Debug.Assert(null != protoSubtask);
 48
 49                // wrap protocol object
 050                SubtaskInformation wrapped = new SubtaskInformation(protoSubtask);
 51
 052                return wrapped;
 53            }
 54        }
 55
 56        /// <summary>
 57        /// fetch another batch of objects from the server
 58        /// </summary>
 59        protected async override System.Threading.Tasks.Task GetNextBatchFromServerAsync(SkipTokenHandler skipHandler, C
 60        {
 61            do
 62            {
 63                // start the protocol layer call
 164                var asyncTask = _parentJobOperations.ParentBatchClient.ProtocolLayer.ListSubtasks(
 165                    _jobId,
 166                    _taskId,
 167                    skipHandler.SkipToken,
 168                    _behaviorMgr,
 169                    _detailLevel,
 170                    cancellationToken);
 71
 172                var response = await asyncTask.ConfigureAwait(continueOnCapturedContext: false);
 73
 74                //TODO: For now this is always null because the service doesn't ever return a skiptoken for this operati
 75                //TODO: Do not follow this code pattern elsewhere as it will not correctly traverse the skiptoken.
 76                //TODO: Note that setting this to null sets the "_hasBeenCalled" boolean which is important for the func
 77                //TODO: list functionality (see the code).
 078                skipHandler.SkipToken = null;
 79                // remember the protocol tasks returned
 080                base._currentBatch = null;
 81
 082                if (null != response.Body.Value.GetEnumerator())
 83                {
 084                    base._currentBatch = response.Body.Value.ToArray();
 85                }
 86            }
 87            // it is possible for there to be no results so we keep trying
 088            while (skipHandler.ThereIsMoreData && ((null == base._currentBatch) || base._currentBatch.Length <= 0));
 089        }
 90    }
 91}