Beispiel #1
0
        public ResponseWithHeaders <ListSharesResponse, ServiceListSharesSegmentHeaders> ListSharesSegmentNextPage(string nextLink, string prefix = null, string marker = null, int?maxresults = null, IEnumerable <ListSharesIncludeType> include = null, int?timeout = null, CancellationToken cancellationToken = default)
        {
            if (nextLink == null)
            {
                throw new ArgumentNullException(nameof(nextLink));
            }

            using var message = CreateListSharesSegmentNextPageRequest(nextLink, prefix, marker, maxresults, include, timeout);
            _pipeline.Send(message, cancellationToken);
            var headers = new ServiceListSharesSegmentHeaders(message.Response);

            switch (message.Response.Status)
            {
            case 200:
            {
                ListSharesResponse value = default;
                var document             = XDocument.Load(message.Response.ContentStream, LoadOptions.PreserveWhitespace);
                if (document.Element("EnumerationResults") is XElement enumerationResultsElement)
                {
                    value = ListSharesResponse.DeserializeListSharesResponse(enumerationResultsElement);
                }
                return(ResponseWithHeaders.FromValue(value, headers, message.Response));
            }

            default:
                throw _clientDiagnostics.CreateRequestFailedException(message.Response);
            }
        }
        /// <summary>
        /// Core implementation for the ListShares method.
        /// </summary>
        /// <param name="prefix">The share prefix.</param>
        /// <param name="detailsIncluded">The details included.</param>
        /// <param name="currentToken">The continuation token.</param>
        /// <param name="pagination">The pagination.</param>
        /// <param name="setResult">The result report delegate.</param>
        /// <returns>A <see cref="TaskSequence"/> that lists the shares.</returns>
        private RESTCommand <ResultSegment <CloudFileShare> > ListSharesImpl(string prefix, ShareListingDetails detailsIncluded, FileContinuationToken currentToken, int?maxResults, FileRequestOptions options)
        {
            ListingContext listingContext = new ListingContext(prefix, maxResults)
            {
                Marker = currentToken != null ? currentToken.NextMarker : null
            };

            RESTCommand <ResultSegment <CloudFileShare> > getCmd = new RESTCommand <ResultSegment <CloudFileShare> >(this.Credentials, this.StorageUri);

            options.ApplyToStorageCommand(getCmd);
            getCmd.CommandLocationMode    = CommonUtility.GetListingLocationMode(currentToken);
            getCmd.RetrieveResponseStream = true;
            getCmd.Handler             = this.AuthenticationHandler;
            getCmd.BuildClient         = HttpClientFactory.BuildHttpClient;
            getCmd.BuildRequest        = (cmd, uri, builder, cnt, serverTimeout, ctx) => ShareHttpRequestMessageFactory.List(uri, serverTimeout, listingContext, detailsIncluded, cnt, ctx);
            getCmd.PreProcessResponse  = (cmd, resp, ex, ctx) => HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp, null, cmd, ex);
            getCmd.PostProcessResponse = (cmd, resp, ctx) =>
            {
                return(Task.Factory.StartNew(() =>
                {
                    ListSharesResponse listSharesResponse = new ListSharesResponse(cmd.ResponseStream);
                    List <CloudFileShare> sharesList = listSharesResponse.Shares.Select(item => new CloudFileShare(item.Properties, item.Metadata, item.Name, this)).ToList();
                    FileContinuationToken continuationToken = null;
                    if (listSharesResponse.NextMarker != null)
                    {
                        continuationToken = new FileContinuationToken()
                        {
                            NextMarker = listSharesResponse.NextMarker,
                            TargetLocation = cmd.CurrentResult.TargetLocation,
                        };
                    }

                    return new ResultSegment <CloudFileShare>(sharesList)
                    {
                        ContinuationToken = continuationToken,
                    };
                }));
            };

            return(getCmd);
        }
Beispiel #3
0
        public async Task <ResponseWithHeaders <ListSharesResponse, ServiceListSharesSegmentHeaders> > ListSharesSegmentAsync(string prefix = null, string marker = null, int?maxresults = null, IEnumerable <ListSharesIncludeType> include = null, int?timeout = null, CancellationToken cancellationToken = default)
        {
            using var message = CreateListSharesSegmentRequest(prefix, marker, maxresults, include, timeout);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            var headers = new ServiceListSharesSegmentHeaders(message.Response);

            switch (message.Response.Status)
            {
            case 200:
            {
                ListSharesResponse value = default;
                var document             = XDocument.Load(message.Response.ContentStream, LoadOptions.PreserveWhitespace);
                if (document.Element("EnumerationResults") is XElement enumerationResultsElement)
                {
                    value = ListSharesResponse.DeserializeListSharesResponse(enumerationResultsElement);
                }
                return(ResponseWithHeaders.FromValue(value, headers, message.Response));
            }

            default:
                throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(false);
            }
        }
        /// <summary>
        /// Core implementation for the ListShares method.
        /// </summary>
        /// <param name="prefix">The share prefix.</param>
        /// <param name="detailsIncluded">The details included.</param>
        /// <param name="currentToken">The continuation token.</param>
        /// <param name="pagination">The pagination.</param>
        /// <param name="setResult">The result report delegate.</param>
        /// <returns>A <see cref="TaskSequence"/> that lists the shares.</returns>
        private RESTCommand<ResultSegment<CloudFileShare>> ListSharesImpl(string prefix, ShareListingDetails detailsIncluded, FileContinuationToken currentToken, int? maxResults, FileRequestOptions options)
        {
            ListingContext listingContext = new ListingContext(prefix, maxResults)
            {
                Marker = currentToken != null ? currentToken.NextMarker : null
            };

            RESTCommand<ResultSegment<CloudFileShare>> getCmd = new RESTCommand<ResultSegment<CloudFileShare>>(this.Credentials, this.StorageUri);

            options.ApplyToStorageCommand(getCmd);
            getCmd.CommandLocationMode = CommonUtility.GetListingLocationMode(currentToken);
            getCmd.RetrieveResponseStream = true;
            getCmd.Handler = this.AuthenticationHandler;
            getCmd.BuildClient = HttpClientFactory.BuildHttpClient;
            getCmd.BuildRequest = (cmd, uri, builder, cnt, serverTimeout, ctx) => ShareHttpRequestMessageFactory.List(uri, serverTimeout, listingContext, detailsIncluded, cnt, ctx);
            getCmd.PreProcessResponse = (cmd, resp, ex, ctx) => HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp, null, cmd, ex);
            getCmd.PostProcessResponse = (cmd, resp, ctx) =>
            {
                return Task.Factory.StartNew(() =>
                    {
                        ListSharesResponse listSharesResponse = new ListSharesResponse(cmd.ResponseStream);
                        List<CloudFileShare> sharesList = listSharesResponse.Shares.Select(item => new CloudFileShare(item.Properties, item.Metadata, item.Name, this)).ToList();
                        FileContinuationToken continuationToken = null;
                        if (listSharesResponse.NextMarker != null)
                        {
                            continuationToken = new FileContinuationToken()
                            {
                                NextMarker = listSharesResponse.NextMarker,
                                TargetLocation = cmd.CurrentResult.TargetLocation,
                            };
                        }

                        return new ResultSegment<CloudFileShare>(sharesList)
                        {
                            ContinuationToken = continuationToken,
                        };
                    });
            };

            return getCmd;
        }
 public void ListSharesScenarioTest(ListingContext listingContext, HttpStatusCode? expectedError, params string[] expectedShares)
 {
     HttpWebRequest request = FileTests.ListSharesRequest(FileContext, listingContext);
     Assert.IsTrue(request != null, "Failed to create HttpWebRequest");
     if (FileContext.Credentials != null)
     {
         FileTests.SignRequest(request, FileContext);
     }
     HttpWebResponse response = FileTestUtils.GetResponse(request, FileContext);
     try
     {
         FileTests.ListSharesResponse(response, FileContext, expectedError);
         ListSharesResponse listSharesResponse = new ListSharesResponse(response.GetResponseStream());
         int i = 0;
         foreach (FileShareEntry item in listSharesResponse.Shares)
         {
             if (expectedShares == null)
             {
                 Assert.Fail("Should not have shares.");
             }
             Assert.IsTrue(i < expectedShares.Length, "Unexpected share: " + item.Name);
             Assert.AreEqual<string>(expectedShares[i++], item.Name, "Incorrect share.");
         }
         if (expectedShares != null && i < expectedShares.Length)
         {
             Assert.Fail("Missing share: " + expectedShares[i] + "(and " + (expectedShares.Length - i - 1) + " more).");
         }
     }
     finally
     {
         response.Close();
     }
 }