Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public Task <byte[][]> TryAndGetFileBinaryContent(string id, string version, FlatContainerContentType fileType, ITestOutputHelper logger)
 {
     return(TryAndGetFileContent(id, version, fileType, logger, TryAndGetFileBinaryContent));
 }
Ejemplo n.º 4
0
        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);
        }