5
5
using AngleSharp . Dom ;
6
6
using AngleSharp . Dom . Html ;
7
7
using AngleSharp . Parser . Html ;
8
+ using Microsoft . AspNetCore . Server . IntegrationTesting ;
9
+ using Microsoft . Extensions . Logging . Abstractions ;
8
10
using System ;
9
11
using System . Collections . Generic ;
10
12
using System . IO ;
@@ -112,7 +114,7 @@ public async Task FallbackSrcContent_Matches_CDNContent(ScriptTag scriptTag)
112
114
. TrimStart ( '~' )
113
115
. TrimStart ( '/' ) ;
114
116
115
- var cdnContent = await _httpClient . GetStringAsync ( scriptTag . Src ) ;
117
+ var cdnContent = await GetStringFromCDN ( scriptTag . Src ) ;
116
118
var fallbackSrcContent = GetFileContentFromArchive ( scriptTag , fallbackSrc ) ;
117
119
118
120
Assert . Equal ( RemoveLineEndings ( cdnContent ) , RemoveLineEndings ( fallbackSrcContent ) ) ;
@@ -145,6 +147,27 @@ public override string ToString()
145
147
}
146
148
}
147
149
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
+
148
171
private Task < string > GetShaIntegrity ( ScriptTag scriptTag )
149
172
{
150
173
return GetShaIntegrity ( scriptTag . Integrity , scriptTag . Src ) ;
@@ -158,7 +181,7 @@ private Task<string> GetShaIntegrity(LinkTag linkTag)
158
181
private async Task < string > GetShaIntegrity ( string integrity , string src )
159
182
{
160
183
var prefix = integrity . Substring ( 0 , 6 ) ;
161
- using ( var respStream = await _httpClient . GetStreamAsync ( src ) )
184
+ var respStream = await GetByteArrayFromCDN ( src ) ;
162
185
using ( HashAlgorithm alg = string . Equals ( prefix , "sha256" ) ? ( HashAlgorithm ) SHA256 . Create ( ) : ( HashAlgorithm ) SHA384 . Create ( ) )
163
186
{
164
187
var hash = alg . ComputeHash ( respStream ) ;
0 commit comments