< Summary

Class:Azure.Storage.Files.DataLake.Models.GetFileSystemsAsyncCollection
Assembly:Azure.Storage.Files.DataLake
File(s):C:\Git\azure-sdk-for-net\sdk\storage\Azure.Storage.Files.DataLake\src\Models\GetFileSystemsAsyncCollection.cs
Covered lines:46
Uncovered lines:8
Coverable lines:54
Total lines:200
Line coverage:85.1% (46 of 54)
Covered branches:34
Total branches:44
Branch coverage:77.2% (34 of 44)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
.ctor(...)-100%100%
ConvertPage(...)-100%100%
ConvertItem(...)-100%100%
ConvertCollection(...)-100%100%
ToSyncCollection(...)-100%100%
ToAsyncCollection(...)-100%100%
.ctor(...)-100%100%
AsPages(...)-100%100%
GetEnumerator()-0%100%
.ctor()-0%100%
.ctor(...)-100%100%
AsPages()-100%84.21%
GetAsyncEnumerator()-100%72%

File(s)

C:\Git\azure-sdk-for-net\sdk\storage\Azure.Storage.Files.DataLake\src\Models\GetFileSystemsAsyncCollection.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4using System.Collections.Generic;
 5using System.Linq;
 6using System.Threading;
 7using System.Threading.Tasks;
 8using Azure.Storage.Blobs;
 9using Azure.Storage.Blobs.Models;
 10
 11namespace Azure.Storage.Files.DataLake.Models
 12{
 13    /// <summary>
 14    /// This class wraps the DateLakeServiceClient.GetFileSystemsAsync return values
 15    /// and maps them into DataLake types.
 16    /// </summary>
 17    internal class GetFileSystemsAsyncCollection
 18    {
 19        private readonly BlobServiceClient _client;
 20        private readonly FileSystemTraits _traits;
 21        private readonly string _prefix;
 22
 3223        public GetFileSystemsAsyncCollection(
 3224            BlobServiceClient client,
 3225            FileSystemTraits traits,
 3226            string prefix = default)
 27        {
 3228            _client = client;
 3229            _traits = traits;
 3230            _prefix = prefix;
 3231        }
 32
 33        private static Page<FileSystemItem> ConvertPage(Page<BlobContainerItem> page)
 34        {
 1835            return Page<FileSystemItem>.FromValues(
 1836                page.Values.Select(ConvertItem).ToArray(),
 1837                page.ContinuationToken,
 1838                page.GetRawResponse());
 39        }
 40
 41        private static FileSystemItem ConvertItem(BlobContainerItem item)
 42        {
 1985843            return item.ToFileSystemItem();
 44        }
 45
 46        private static AsyncPageable<BlobContainerItem> ConvertCollection(GetFileSystemsAsyncCollection collection, Canc
 47        {
 1848            return collection._client.GetBlobContainersAsync(
 1849                       (BlobContainerTraits)collection._traits,
 1850                       collection._prefix,
 1851                       cancellationToken);
 52        }
 53
 54        public Pageable<FileSystemItem> ToSyncCollection(CancellationToken cancellationToken)
 55        {
 1456            return new StoragePageable(this, cancellationToken);
 57        }
 58
 59        public AsyncPageable<FileSystemItem> ToAsyncCollection(CancellationToken cancellationToken)
 60        {
 1861            return new StorageAsyncPageable(this, cancellationToken);
 62        }
 63
 64        /// <summary>
 65        /// Abstract the Storage pattern for async iteration.
 66        /// </summary>
 67        private class StoragePageable : Pageable<FileSystemItem>
 68        {
 69            private GetFileSystemsAsyncCollection _collection;
 70
 71            public StoragePageable(GetFileSystemsAsyncCollection collection, CancellationToken cancellationToken)
 1472                : base(cancellationToken)
 73            {
 1474                _collection = collection;
 1475            }
 76
 77            /// <summary>
 78            /// Enumerate the values a <see cref="Page{T}"/> at a time.  This may
 79            /// make mutliple service requests.
 80            /// </summary>
 81            /// <param name="continuationToken">
 82            /// A continuation token indicating where to resume paging or null to
 83            /// begin paging from the beginning.
 84            /// </param>
 85            /// <param name="pageHintSize">
 86            /// The size of <see cref="Page{T}"/>s that should be requested (from
 87            /// service operations that support it).
 88            /// </param>
 89            /// <returns>
 90            /// An async sequence of <see cref="Page{T}"/>s.
 91            /// </returns>
 92            public override IEnumerable<Page<FileSystemItem>> AsPages(
 93                string continuationToken = default,
 94                int? pageHintSize = default)
 95            {
 1496                return _collection._client.GetBlobContainers(
 1497                    (BlobContainerTraits)_collection._traits,
 1498                    _collection._prefix,
 1499                    CancellationToken)
 14100                    .AsPages(continuationToken, pageHintSize)
 14101                    .Select(ConvertPage);
 102            }
 103
 104            /// <summary>
 105            /// Enumerate the values in the collection synchronously.  This may
 106            /// make multiple service requests.
 107            /// </summary>
 108            /// <returns>A sequence of values.</returns>
 109            public override IEnumerator<FileSystemItem> GetEnumerator()
 110            {
 0111                return _collection._client.GetBlobContainers(
 0112                    (BlobContainerTraits)_collection._traits,
 0113                    _collection._prefix,
 0114                    CancellationToken)
 0115                    .Select(ConvertItem)
 0116                    .GetEnumerator();
 117            }
 118        }
 119
 120        /// <summary>
 121        /// Abstract the Storage pattern for async iteration.
 122        /// </summary>
 123        private class StorageAsyncPageable : AsyncPageable<FileSystemItem>
 124        {
 125            private GetFileSystemsAsyncCollection _collection;
 126
 127            // for mocking
 128            protected StorageAsyncPageable()
 0129                : base()
 130            {
 0131            }
 132
 133            public StorageAsyncPageable(GetFileSystemsAsyncCollection collection, CancellationToken cancellationToken)
 18134                : base(cancellationToken)
 135            {
 18136                _collection = collection;
 18137            }
 138
 139            /// <summary>
 140            /// Enumerate the values a <see cref="Page{T}"/> at a time.  This may
 141            /// make mutliple service requests.
 142            /// </summary>
 143            /// <param name="continuationToken">
 144            /// A continuation token indicating where to resume paging or null to
 145            /// begin paging from the beginning.
 146            /// </param>
 147            /// <param name="pageHintSize">
 148            /// The size of <see cref="Page{T}"/>s that should be requested (from
 149            /// service operations that support it).
 150            /// </param>
 151            /// <returns>
 152            /// An async sequence of <see cref="Page{T}"/>s.
 153            /// </returns>
 154            public override async IAsyncEnumerable<Page<FileSystemItem>> AsPages(
 155                string continuationToken = default,
 156                int? pageHintSize = default)
 157            {
 6158                IAsyncEnumerable<Page<BlobContainerItem>> pages =
 6159                    ConvertCollection(_collection, CancellationToken)
 6160                    .AsPages(continuationToken, pageHintSize);
 161
 18162                await foreach (Page<BlobContainerItem> page in pages.ConfigureAwait(false))
 163                {
 4164                    yield return ConvertPage(page);
 165                }
 4166            }
 167
 168            /// <summary>
 169            /// Enumerate the values in the collection asynchronously.  This may
 170            /// make mutliple service requests.
 171            /// </summary>
 172            /// <param name="cancellationToken">
 173            /// The <see cref="CancellationToken"/> used for requests made while
 174            /// enumerating asynchronously.
 175            /// </param>
 176            /// <returns>An async sequence of values.</returns>
 177            public override async IAsyncEnumerator<FileSystemItem> GetAsyncEnumerator(CancellationToken cancellationToke
 178            {
 179                // This is the only method that takes its own CancellationToken, but
 180                // we'll still use the original CancellationToken if one wasn't passed.
 12181                if (cancellationToken == default)
 182                {
 12183                    cancellationToken = CancellationToken;
 184                }
 185
 12186                IAsyncEnumerable<Page<BlobContainerItem>> pages =
 12187                    ConvertCollection(_collection, cancellationToken)
 12188                    .AsPages();
 189
 48190                await foreach (Page<BlobContainerItem> page in pages.ConfigureAwait(false))
 191                {
 19852192                    foreach (BlobContainerItem item in page.Values)
 193                    {
 9914194                        yield return ConvertItem(item);
 195                    }
 196                }
 12197            }
 198        }
 199    }
 200}