Skip to content

Commit da5b63c

Browse files
Migrate storage tests to test proxy (Azure#26662)
* Migrate storage tests to test proxy * Remove unused method * Update empty request body recordings * Reset upstream URI on each retry * remove pct encoding from header values * Datalake session file fixes * more decoding * datalake passing .net 6 * Datalake passing on all platforms * Files passing * .NET framework sanitization * Avoid nesting proxy transport * Fix sanitizer * Undo unnecessary re-recording * revert more * fix
1 parent 1642dcd commit da5b63c

File tree

305 files changed

+708
-781
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

305 files changed

+708
-781
lines changed

sdk/core/Azure.Core.TestFramework/src/ProxyTransport.cs

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,49 @@ public ProxyTransport(TestProxy proxy, HttpPipelineTransport transport, TestReco
4545
_filter = filter;
4646
}
4747

48-
public override void Process(HttpMessage message)
49-
{
50-
RedirectToTestProxy(message);
51-
_innerTransport.Process(message);
52-
ProcessResponseAsync(message, false).EnsureCompleted();
53-
}
48+
public override void Process(HttpMessage message) =>
49+
ProcessAsyncInternalAsync(message, false).EnsureCompleted();
5450

55-
public override async ValueTask ProcessAsync(HttpMessage message)
51+
public override async ValueTask ProcessAsync(HttpMessage message) =>
52+
await ProcessAsyncInternalAsync(message, true);
53+
54+
private async Task ProcessAsyncInternalAsync(HttpMessage message, bool async)
5655
{
57-
RedirectToTestProxy(message);
58-
await _innerTransport.ProcessAsync(message);
59-
await ProcessResponseAsync(message, true);
56+
try
57+
{
58+
RedirectToTestProxy(message);
59+
if (async)
60+
{
61+
await _innerTransport.ProcessAsync(message);
62+
}
63+
else
64+
{
65+
_innerTransport.Process(message);
66+
}
67+
68+
await ProcessResponseAsync(message, true);
69+
}
70+
finally
71+
{
72+
// revert the original URI - this is important for tests that rely on aspects of the URI in the pipeline
73+
// e.g. KeyVault caches tokens based on URI
74+
message.Request.Headers.TryGetValue("x-recording-upstream-base-uri", out string original);
75+
76+
var originalBaseUri = new Uri(original);
77+
message.Request.Uri.Scheme = originalBaseUri.Scheme;
78+
message.Request.Uri.Host = originalBaseUri.Host;
79+
message.Request.Uri.Port = originalBaseUri.Port;
80+
81+
if (_isWebRequestTransport)
82+
{
83+
ServicePointManager.ServerCertificateValidationCallback -= ServerCertificateCustomValidationCallback;
84+
}
85+
}
6086
}
6187

6288
private async Task ProcessResponseAsync(HttpMessage message, bool async)
6389
{
64-
if (message.Response.Headers.Contains("x-request-mismatch"))
90+
if (message.HasResponse && message.Response.Headers.Contains("x-request-mismatch"))
6591
{
6692
var streamReader = new StreamReader(message.Response.ContentStream);
6793
string response;
@@ -76,20 +102,6 @@ private async Task ProcessResponseAsync(HttpMessage message, bool async)
76102
using var doc = JsonDocument.Parse(response);
77103
throw new TestRecordingMismatchException(doc.RootElement.GetProperty("Message").GetString());
78104
}
79-
80-
// revert the original URI - this is important for tests that rely on aspects of the URI in the pipeline
81-
// e.g. KeyVault caches tokens based on URI
82-
message.Request.Headers.TryGetValue("x-recording-upstream-base-uri", out string original);
83-
84-
var originalBaseUri = new Uri(original);
85-
message.Request.Uri.Scheme = originalBaseUri.Scheme;
86-
message.Request.Uri.Host = originalBaseUri.Host;
87-
message.Request.Uri.Port = originalBaseUri.Port;
88-
89-
if (_isWebRequestTransport)
90-
{
91-
ServicePointManager.ServerCertificateValidationCallback -= ServerCertificateCustomValidationCallback;
92-
}
93105
}
94106

95107
public override Request CreateRequest()
@@ -137,17 +149,14 @@ private void RedirectToTestProxy(HttpMessage message)
137149
request.Headers.SetValue("x-recording-id", _recording.RecordingId);
138150
request.Headers.SetValue("x-recording-mode", _recording.Mode.ToString().ToLower());
139151

140-
// Ensure x-recording-upstream-base-uri header is only set once, since the same HttpMessage will be reused on retries
141-
if (!request.Headers.Contains("x-recording-upstream-base-uri"))
152+
// Intentionally reset the upstream URI in case the request URI changes between retries - e.g. when using GeoRedundant secondary Storage
153+
var baseUri = new RequestUriBuilder()
142154
{
143-
var baseUri = new RequestUriBuilder()
144-
{
145-
Scheme = request.Uri.Scheme,
146-
Host = request.Uri.Host,
147-
Port = request.Uri.Port,
148-
};
149-
request.Headers.SetValue("x-recording-upstream-base-uri", baseUri.ToString());
150-
}
155+
Scheme = request.Uri.Scheme,
156+
Host = request.Uri.Host,
157+
Port = request.Uri.Port,
158+
};
159+
request.Headers.SetValue("x-recording-upstream-base-uri", baseUri.ToString());
151160

152161
// for some reason using localhost instead of the ip address causes slowness when combined with SSL callback being specified
153162
request.Uri.Host = TestProxy.IpAddress;

sdk/core/Azure.Core.TestFramework/src/TestRecording.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,10 @@ public HttpPipelineTransport CreateTransport(HttpPipelineTransport currentTransp
343343
{
344344
if (!_useLegacyTransport && Mode != RecordedTestMode.Live)
345345
{
346+
if (currentTransport is ProxyTransport)
347+
{
348+
return currentTransport;
349+
}
346350
return new ProxyTransport(_proxy, currentTransport, this, () => _disableRecording.Value);
347351
}
348352
return Mode switch

sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/Ctor_AzureSasCredential.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/Ctor_AzureSasCredentialAsync.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/Ctor_AzureSasCredential_UserDelegationSAS.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/Ctor_AzureSasCredential_UserDelegationSASAsync.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/DownloadAsync_ZeroSizeBlob.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/DownloadAsync_ZeroSizeBlobAsync.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/DownloadAsync_ZeroSizeBlob_BinaryData.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/DownloadAsync_ZeroSizeBlob_BinaryDataAsync.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)