diff --git a/sdk/appconfiguration/Azure.Data.AppConfiguration/src/Azure.Data.AppConfiguration.csproj b/sdk/appconfiguration/Azure.Data.AppConfiguration/src/Azure.Data.AppConfiguration.csproj
index 704821720c7c3..c267309506b73 100644
--- a/sdk/appconfiguration/Azure.Data.AppConfiguration/src/Azure.Data.AppConfiguration.csproj
+++ b/sdk/appconfiguration/Azure.Data.AppConfiguration/src/Azure.Data.AppConfiguration.csproj
@@ -25,10 +25,12 @@
+
+
diff --git a/sdk/appconfiguration/Azure.Data.AppConfiguration/src/ConfigurationClient.cs b/sdk/appconfiguration/Azure.Data.AppConfiguration/src/ConfigurationClient.cs
index a4a3fd2f440aa..dea556eda456c 100644
--- a/sdk/appconfiguration/Azure.Data.AppConfiguration/src/ConfigurationClient.cs
+++ b/sdk/appconfiguration/Azure.Data.AppConfiguration/src/ConfigurationClient.cs
@@ -332,7 +332,7 @@ private Request CreateSetRequest(ConfigurationSetting setting, ConditionalReques
request.Headers.Add(s_mediaTypeKeyValueApplicationHeader);
request.Headers.Add(HttpHeader.Common.JsonContentType);
- if (requestOptions != default)
+ if (requestOptions != null)
{
ConditionalRequestOptionsExtensions.ApplyHeaders(request, requestOptions);
}
@@ -484,7 +484,7 @@ private Request CreateDeleteRequest(string key, string label, ConditionalRequest
request.Method = RequestMethod.Delete;
BuildUriForKvRoute(request.Uri, key, label);
- if (requestOptions != default)
+ if (requestOptions != null)
{
ConditionalRequestOptionsExtensions.ApplyHeaders(request, requestOptions);
}
@@ -680,7 +680,7 @@ private Request CreateGetRequest(string key, string label, DateTimeOffset accept
request.Headers.Add(AcceptDatetimeHeader, dateTime);
}
- if (requestOptions != default)
+ if (requestOptions != null)
{
ConditionalRequestOptionsExtensions.ApplyHeaders(request, requestOptions);
}
diff --git a/sdk/core/Azure.Core/src/Shared/ContentTypeUtilities.cs b/sdk/core/Azure.Core/src/Shared/ContentTypeUtilities.cs
index b412940073c17..c13a1047ee7d2 100644
--- a/sdk/core/Azure.Core/src/Shared/ContentTypeUtilities.cs
+++ b/sdk/core/Azure.Core/src/Shared/ContentTypeUtilities.cs
@@ -1,17 +1,22 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
-#nullable enable
+#nullable disable
using System;
-using System.Diagnostics.CodeAnalysis;
using System.Text;
namespace Azure.Core.Pipeline
{
+#if !TESTFRAMEWORK
internal static class ContentTypeUtilities
+#else
+#pragma warning disable SA1649 // File name should match first type name
+ internal static class TestFrameworkContentTypeUtilities
+#pragma warning restore SA1649 // File name should match first type name
+#endif
{
- public static bool TryGetTextEncoding(string? contentType, [NotNullWhen(true)] out Encoding? encoding)
+ public static bool TryGetTextEncoding(string contentType, out Encoding encoding)
{
const string charsetMarker = "; charset=";
const string utf8Charset = "utf-8";
diff --git a/sdk/core/Azure.Core/src/ResponseExceptionExtensions.cs b/sdk/core/Azure.Core/src/Shared/ResponseExceptionExtensions.cs
similarity index 74%
rename from sdk/core/Azure.Core/src/ResponseExceptionExtensions.cs
rename to sdk/core/Azure.Core/src/Shared/ResponseExceptionExtensions.cs
index 2a217959de887..3162034f7fdef 100644
--- a/sdk/core/Azure.Core/src/ResponseExceptionExtensions.cs
+++ b/sdk/core/Azure.Core/src/Shared/ResponseExceptionExtensions.cs
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Text;
@@ -9,16 +10,16 @@
namespace Azure.Core
{
- public static class ResponseExceptionExtensions
+ internal static class ResponseExceptionExtensions
{
private const string DefaultMessage = "Service request failed.";
- public static Task CreateRequestFailedExceptionAsync(this Response response)
+ public static ValueTask CreateRequestFailedExceptionAsync(this Response response)
{
return CreateRequestFailedExceptionAsync(response, DefaultMessage);
}
- public static Task CreateRequestFailedExceptionAsync(this Response response, string message)
+ public static ValueTask CreateRequestFailedExceptionAsync(this Response response, string message)
{
return CreateRequestFailedExceptionAsync(message, response, true);
}
@@ -30,16 +31,18 @@ public static RequestFailedException CreateRequestFailedException(this Response
public static RequestFailedException CreateRequestFailedException(this Response response, string message)
{
- return CreateRequestFailedExceptionAsync(message, response, false).EnsureCompleted();
+ ValueTask messageTask = CreateRequestFailedExceptionAsync(message, response, false);
+ Debug.Assert(messageTask.IsCompleted);
+ return messageTask.GetAwaiter().GetResult();
}
- public static async Task CreateRequestFailedExceptionAsync(string message, Response response, bool async)
+ public static async ValueTask CreateRequestFailedExceptionAsync(string message, Response response, bool async)
{
message = await CreateRequestFailedMessageAsync(message, response, async).ConfigureAwait(false);
return new RequestFailedException(response.Status, message);
}
- public static async Task CreateRequestFailedMessageAsync(string message, Response response, bool async)
+ public static async ValueTask CreateRequestFailedMessageAsync(string message, Response response, bool async)
{
StringBuilder messageBuilder = new StringBuilder()
.AppendLine(message)
diff --git a/sdk/core/Azure.Core/src/Pipeline/RetriableStream.cs b/sdk/core/Azure.Core/src/Shared/RetriableStream.cs
similarity index 86%
rename from sdk/core/Azure.Core/src/Pipeline/RetriableStream.cs
rename to sdk/core/Azure.Core/src/Shared/RetriableStream.cs
index 4d70c7f1c4f5f..f4d39fd213265 100644
--- a/sdk/core/Azure.Core/src/Pipeline/RetriableStream.cs
+++ b/sdk/core/Azure.Core/src/Shared/RetriableStream.cs
@@ -1,8 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+#nullable disable
+
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.IO;
using System.Runtime.ExceptionServices;
using System.Threading;
@@ -10,7 +13,7 @@
namespace Azure.Core.Pipeline
{
- public static class RetriableStream
+ internal static class RetriableStream
{
public static Stream Create(
Func responseFactory,
@@ -40,7 +43,7 @@ public static Stream Create(
return new RetriableStreamImpl(initialResponse, streamFactory, asyncResponseFactory, responseClassifier, maxRetries);
}
- private class RetriableStreamImpl : ReadOnlyStream
+ private class RetriableStreamImpl : Stream
{
private readonly ResponseClassifier _responseClassifier;
@@ -58,7 +61,7 @@ private class RetriableStreamImpl : ReadOnlyStream
private int _retryCount;
- private List? _exceptions;
+ private List _exceptions;
public RetriableStreamImpl(Stream initialStream, Func streamFactory, Func> asyncStreamFactory, ResponseClassifier responseClassifier, int maxRetries)
{
@@ -129,7 +132,9 @@ public override int Read(byte[] buffer, int offset, int count)
}
catch (Exception e)
{
- RetryAsync(e, false).EnsureCompleted();
+ Task task = RetryAsync(e, false);
+ Debug.Assert(task.IsCompleted);
+ task.GetAwaiter().GetResult();
}
}
}
@@ -153,6 +158,23 @@ private static Stream EnsureStream(Stream stream)
return stream;
}
+
+ public override bool CanWrite => false;
+
+ public override void Write(byte[] buffer, int offset, int count)
+ {
+ throw new NotSupportedException();
+ }
+
+ public override void SetLength(long value)
+ {
+ throw new NotSupportedException();
+ }
+
+ public override void Flush()
+ {
+ throw new NotSupportedException();
+ }
}
}
}
diff --git a/sdk/core/Azure.Core/tests/Azure.Core.Tests.csproj b/sdk/core/Azure.Core/tests/Azure.Core.Tests.csproj
index e195bb36d09e3..9f40e8df76216 100644
--- a/sdk/core/Azure.Core/tests/Azure.Core.Tests.csproj
+++ b/sdk/core/Azure.Core/tests/Azure.Core.Tests.csproj
@@ -2,7 +2,7 @@
{84491222-6C36-4FA7-BBAE-1FA804129151}
$(RequiredTargetFrameworks)
- $(DefineConstants);HAS_INTERNALS_VISIBLE_CORE
+ $(DefineConstants);TESTFRAMEWORK;HAS_INTERNALS_VISIBLE_CORE
@@ -21,4 +21,8 @@
Azure.Core
+
+
+
+
diff --git a/sdk/core/Azure.Core/tests/TestFramework.props b/sdk/core/Azure.Core/tests/TestFramework.props
index 7ab98935cca7a..b9ebf0a7dfa91 100644
--- a/sdk/core/Azure.Core/tests/TestFramework.props
+++ b/sdk/core/Azure.Core/tests/TestFramework.props
@@ -1,6 +1,7 @@
SessionRecords
+ $(DefineConstants);TESTFRAMEWORK
diff --git a/sdk/core/Azure.Core/tests/TestFramework/RecordEntry.cs b/sdk/core/Azure.Core/tests/TestFramework/RecordEntry.cs
index 4211c938bc10c..f53f8c1cbd00e 100644
--- a/sdk/core/Azure.Core/tests/TestFramework/RecordEntry.cs
+++ b/sdk/core/Azure.Core/tests/TestFramework/RecordEntry.cs
@@ -266,7 +266,7 @@ private static bool IsTextContentType(IDictionary requestHeade
{
encoding = null;
return TryGetContentType(requestHeaders, out string contentType) &&
- ContentTypeUtilities.TryGetTextEncoding(contentType, out encoding);
+ TestFrameworkContentTypeUtilities.TryGetTextEncoding(contentType, out encoding);
}
public void Sanitize(RecordedTestSanitizer sanitizer)
diff --git a/sdk/identity/Azure.Identity/src/Azure.Identity.csproj b/sdk/identity/Azure.Identity/src/Azure.Identity.csproj
index 1950de20b318c..dbc471623ee45 100644
--- a/sdk/identity/Azure.Identity/src/Azure.Identity.csproj
+++ b/sdk/identity/Azure.Identity/src/Azure.Identity.csproj
@@ -27,6 +27,8 @@
+
+
diff --git a/sdk/keyvault/Azure.Security.KeyVault.Certificates/src/Azure.Security.KeyVault.Certificates.csproj b/sdk/keyvault/Azure.Security.KeyVault.Certificates/src/Azure.Security.KeyVault.Certificates.csproj
index ca24cf1285c4a..099022aaddeb9 100644
--- a/sdk/keyvault/Azure.Security.KeyVault.Certificates/src/Azure.Security.KeyVault.Certificates.csproj
+++ b/sdk/keyvault/Azure.Security.KeyVault.Certificates/src/Azure.Security.KeyVault.Certificates.csproj
@@ -24,9 +24,6 @@
-
-
-
@@ -37,7 +34,10 @@
+
+
+
diff --git a/sdk/keyvault/Azure.Security.KeyVault.Keys/src/Azure.Security.KeyVault.Keys.csproj b/sdk/keyvault/Azure.Security.KeyVault.Keys/src/Azure.Security.KeyVault.Keys.csproj
index f45036dbc156e..c67bf12f21d07 100644
--- a/sdk/keyvault/Azure.Security.KeyVault.Keys/src/Azure.Security.KeyVault.Keys.csproj
+++ b/sdk/keyvault/Azure.Security.KeyVault.Keys/src/Azure.Security.KeyVault.Keys.csproj
@@ -33,7 +33,9 @@
+
+
diff --git a/sdk/keyvault/Azure.Security.KeyVault.Secrets/src/Azure.Security.KeyVault.Secrets.csproj b/sdk/keyvault/Azure.Security.KeyVault.Secrets/src/Azure.Security.KeyVault.Secrets.csproj
index d562e9b161e69..9e7b22bde9265 100644
--- a/sdk/keyvault/Azure.Security.KeyVault.Secrets/src/Azure.Security.KeyVault.Secrets.csproj
+++ b/sdk/keyvault/Azure.Security.KeyVault.Secrets/src/Azure.Security.KeyVault.Secrets.csproj
@@ -31,7 +31,9 @@
-
+
+
+
diff --git a/sdk/storage/Azure.Storage.Blobs/src/Azure.Storage.Blobs.csproj b/sdk/storage/Azure.Storage.Blobs/src/Azure.Storage.Blobs.csproj
index 482d2f575393b..ecd65c1b7f962 100644
--- a/sdk/storage/Azure.Storage.Blobs/src/Azure.Storage.Blobs.csproj
+++ b/sdk/storage/Azure.Storage.Blobs/src/Azure.Storage.Blobs.csproj
@@ -21,4 +21,7 @@
+
+
+
\ No newline at end of file
diff --git a/sdk/storage/Azure.Storage.Files/src/Azure.Storage.Files.csproj b/sdk/storage/Azure.Storage.Files/src/Azure.Storage.Files.csproj
index f5a5e4ada06a1..bcbfd50ba3d41 100644
--- a/sdk/storage/Azure.Storage.Files/src/Azure.Storage.Files.csproj
+++ b/sdk/storage/Azure.Storage.Files/src/Azure.Storage.Files.csproj
@@ -24,4 +24,7 @@
+
+
+
\ No newline at end of file