Skip to content

Commit 03460d8

Browse files
Add retries to CDN downloads (#7881)
Add retries to CDN downloads
1 parent 3d17ac3 commit 03460d8

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/ProjectTemplates/test/CdnScriptTagTests.cs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using AngleSharp.Dom;
66
using AngleSharp.Dom.Html;
77
using AngleSharp.Parser.Html;
8+
using Microsoft.AspNetCore.Server.IntegrationTesting;
9+
using Microsoft.Extensions.Logging.Abstractions;
810
using System;
911
using System.Collections.Generic;
1012
using System.IO;
@@ -112,7 +114,7 @@ public async Task FallbackSrcContent_Matches_CDNContent(ScriptTag scriptTag)
112114
.TrimStart('~')
113115
.TrimStart('/');
114116

115-
var cdnContent = await _httpClient.GetStringAsync(scriptTag.Src);
117+
var cdnContent = await GetStringFromCDN(scriptTag.Src);
116118
var fallbackSrcContent = GetFileContentFromArchive(scriptTag, fallbackSrc);
117119

118120
Assert.Equal(RemoveLineEndings(cdnContent), RemoveLineEndings(fallbackSrcContent));
@@ -145,6 +147,27 @@ public override string ToString()
145147
}
146148
}
147149

150+
private async Task<string> GetStringFromCDN(string src)
151+
{
152+
var response = await GetFromCDN(src);
153+
return await response.Content.ReadAsStringAsync();
154+
}
155+
156+
private async Task<byte[]> GetByteArrayFromCDN(string src)
157+
{
158+
var response = await GetFromCDN(src);
159+
return await response.Content.ReadAsByteArrayAsync();
160+
}
161+
162+
private async Task<HttpResponseMessage> GetFromCDN(string src)
163+
{
164+
var logger = NullLogger.Instance;
165+
return await RetryHelper.RetryRequest(async () => {
166+
var request = new HttpRequestMessage(HttpMethod.Get, new Uri(src));
167+
return await _httpClient.SendAsync(request);
168+
}, logger);
169+
}
170+
148171
private Task<string> GetShaIntegrity(ScriptTag scriptTag)
149172
{
150173
return GetShaIntegrity(scriptTag.Integrity, scriptTag.Src);
@@ -158,7 +181,7 @@ private Task<string> GetShaIntegrity(LinkTag linkTag)
158181
private async Task<string> GetShaIntegrity(string integrity, string src)
159182
{
160183
var prefix = integrity.Substring(0, 6);
161-
using (var respStream = await _httpClient.GetStreamAsync(src))
184+
var respStream = await GetByteArrayFromCDN(src);
162185
using (HashAlgorithm alg = string.Equals(prefix, "sha256") ? (HashAlgorithm)SHA256.Create() : (HashAlgorithm)SHA384.Create())
163186
{
164187
var hash = alg.ComputeHash(respStream);

src/ProjectTemplates/test/ProjectTemplates.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
</ItemGroup>
2828

2929
<ItemGroup>
30+
<ProjectReference Include="$(RepositoryRoot)src\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj" />
3031
<ProjectReference Include="../testassets/DotNetToolsInstaller/DotNetToolsInstaller.csproj" ReferenceOutputAssembly="false" />
3132
<ProjectReference Include="../Web.Client.ItemTemplates/Microsoft.DotNet.Web.Client.ItemTemplates.csproj" ReferenceOutputAssembly="false" />
3233
<ProjectReference Include="../Web.ItemTemplates/Microsoft.DotNet.Web.ItemTemplates.csproj" ReferenceOutputAssembly="false" />

0 commit comments

Comments
 (0)