public Task <TResult[]> TryAndGetFileContent <TResult>( string id, string version, FlatContainerContentType fileType, ITestOutputHelper logger, Func <string, string, string, FlatContainerContentType, ITestOutputHelper, Task <TResult> > retrieve) { return(RetryUtility.ExecuteWithRetry( async() => { var baseUrls = await _v3IndexClient.GetFlatContainerBaseUrlsAsync(logger); Assert.True(baseUrls.Count > 0, "At least one flat container base URL must be configured."); var tasks = baseUrls .Select(u => retrieve(u, id, version, fileType, logger)) .ToList(); return await Task.WhenAll(tasks); }, ex => ex.HasTypeOrInnerType <SocketException>() || ex.HasTypeOrInnerType <TaskCanceledException>() || (ex.HasTypeOrInnerType <HttpRequestMessageException>(out var hre) && (hre.StatusCode == HttpStatusCode.InternalServerError || hre.StatusCode == HttpStatusCode.BadGateway || hre.StatusCode == HttpStatusCode.ServiceUnavailable || hre.StatusCode == HttpStatusCode.GatewayTimeout)), logger: logger)); }
private async Task <byte[]> TryAndGetFileBinaryContent(string baseUrl, string id, string version, FlatContainerContentType contentType, ITestOutputHelper logger) { await Task.Yield(); string filePath; switch (contentType) { case FlatContainerContentType.Icon: filePath = "icon"; break; default: throw new ArgumentException($"Unsupported content type: {contentType}", nameof(contentType)); } var url = $"{baseUrl}/{id.ToLowerInvariant()}/{version}/{filePath}"; var fileContent = await _httpClient.GetFileBinaryContentAsync( url, allowNotFound : true, logResponseBody : true, logger : logger); logger.WriteLine($"File {Enum.GetName(typeof(FlatContainerContentType), contentType)} for {id} {version} was retrieved from {url}."); return(fileContent); }
public Task <byte[][]> TryAndGetFileBinaryContent(string id, string version, FlatContainerContentType fileType, ITestOutputHelper logger) { return(TryAndGetFileContent(id, version, fileType, logger, TryAndGetFileBinaryContent)); }
private async Task <string> TryAndGetFileStringContent(string baseUrl, string id, string version, FlatContainerContentType stringFileType, ITestOutputHelper logger) { await Task.Yield(); string filePath; switch (stringFileType) { case FlatContainerContentType.License: filePath = "license"; break; default: throw new ArgumentException($"Unsupported content type: {stringFileType}", nameof(stringFileType)); } var url = $"{baseUrl}/{id.ToLowerInvariant()}/{version}/{filePath}"; var fileContent = await _httpClient.GetFileStringContentAsync( url, allowNotFound : true, logResponseBody : true, logger : logger); logger.WriteLine($"File {Enum.GetName(typeof(FlatContainerContentType), stringFileType)} in Package {id} {version} was gotten on {url}."); return(fileContent); }