From 03460d81cea60f7abae2fda605b1ba36f99b6907 Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Mon, 25 Feb 2019 14:44:22 -0800 Subject: [PATCH] Add retries to CDN downloads (#7881) Add retries to CDN downloads --- .../test/CdnScriptTagTests.cs | 27 +++++++++++++++++-- .../test/ProjectTemplates.Tests.csproj | 1 + 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/ProjectTemplates/test/CdnScriptTagTests.cs b/src/ProjectTemplates/test/CdnScriptTagTests.cs index 89b747ce8e..b92e0f3343 100644 --- a/src/ProjectTemplates/test/CdnScriptTagTests.cs +++ b/src/ProjectTemplates/test/CdnScriptTagTests.cs @@ -5,6 +5,8 @@ using AngleSharp; using AngleSharp.Dom; using AngleSharp.Dom.Html; using AngleSharp.Parser.Html; +using Microsoft.AspNetCore.Server.IntegrationTesting; +using Microsoft.Extensions.Logging.Abstractions; using System; using System.Collections.Generic; using System.IO; @@ -112,7 +114,7 @@ namespace Templates.Test .TrimStart('~') .TrimStart('/'); - var cdnContent = await _httpClient.GetStringAsync(scriptTag.Src); + var cdnContent = await GetStringFromCDN(scriptTag.Src); var fallbackSrcContent = GetFileContentFromArchive(scriptTag, fallbackSrc); Assert.Equal(RemoveLineEndings(cdnContent), RemoveLineEndings(fallbackSrcContent)); @@ -145,6 +147,27 @@ namespace Templates.Test } } + private async Task GetStringFromCDN(string src) + { + var response = await GetFromCDN(src); + return await response.Content.ReadAsStringAsync(); + } + + private async Task GetByteArrayFromCDN(string src) + { + var response = await GetFromCDN(src); + return await response.Content.ReadAsByteArrayAsync(); + } + + private async Task GetFromCDN(string src) + { + var logger = NullLogger.Instance; + return await RetryHelper.RetryRequest(async () => { + var request = new HttpRequestMessage(HttpMethod.Get, new Uri(src)); + return await _httpClient.SendAsync(request); + }, logger); + } + private Task GetShaIntegrity(ScriptTag scriptTag) { return GetShaIntegrity(scriptTag.Integrity, scriptTag.Src); @@ -158,7 +181,7 @@ namespace Templates.Test private async Task GetShaIntegrity(string integrity, string src) { var prefix = integrity.Substring(0, 6); - using (var respStream = await _httpClient.GetStreamAsync(src)) + var respStream = await GetByteArrayFromCDN(src); using (HashAlgorithm alg = string.Equals(prefix, "sha256") ? (HashAlgorithm)SHA256.Create() : (HashAlgorithm)SHA384.Create()) { var hash = alg.ComputeHash(respStream); diff --git a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj index f9c357a09d..9ab06a140a 100644 --- a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj +++ b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj @@ -27,6 +27,7 @@ +