From 327b86bf26ada802927d0096f870cf6dcb77ddf1 Mon Sep 17 00:00:00 2001 From: torosent <17064840+torosent@users.noreply.github.com> Date: Fri, 13 Mar 2026 15:13:05 -0700 Subject: [PATCH 1/2] Update all NuGet dependencies to latest versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated packages in Directory.Packages.props to latest compatible versions: - Azure.Core 1.44.1→1.51.1, Azure.Storage.Blobs 12.24→12.27, Queues 12.22→12.25 - Microsoft.Bcl.AsyncInterfaces, Extensions.DI, Collections.Immutable, DiagnosticSource, Text.Json → 10.0.5 - Microsoft.Extensions.Logging/Configuration/Hosting → 10.0.5 (unified net8.0 and non-net8.0 conditional versions) - Microsoft.ServiceFabric 6.4→11.3, Data/Services 3.3→8.3 - Microsoft.SourceLink.GitHub 1.0→10.0.201 - System.Linq.Async 6.0→7.0, System.Reactive 4.4→6.1 - MSTest 3.5→3.11.1, Moq 4.10→4.20.72 - Azure.Identity 1.12→1.19, OpenTelemetry exporters 1.1→1.15 - Azure.Monitor.OpenTelemetry.Exporter 1.0-beta.4→1.6.0 (now stable) - ImpromptuInterface 6.2/7.0→8.0.6 (unified, no conditional needed) - Newtonsoft.Json 13.0.1→13.0.4, Moq 4.10→4.20.72 - Various other minor/patch bumps Code fixes for breaking API changes: - OrchestrationSessionManager: Fix ToDictionaryAsync for System.Linq.Async 7.0 - Test files: [DataTestMethod]→[TestMethod], ThrowsException→ThrowsExactly (MSTest 3.11) - Azure Storage tests: Fix GetBlobsAsync/GetBlobsByHierarchyAsync required params - DeploymentHelper: Suppress CS0618 for deprecated ServiceFabric API - ApplicationInsightsSample: Remove DiagnosticSource VersionOverride - AzureStorageScenarioTests: Fix incorrect 4-arg Assert.AreEqual Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- Directory.Packages.props | 104 +++++++------- .../DurableTaskStorageExceptionTests.cs | 2 +- .../ApplicationInsightsSample.csproj | 2 +- .../OrchestrationSessionManager.cs | 2 +- .../DeploymentUtil/DeploymentHelper.cs | 2 + ...zureServiceFabric.Integration.Tests.csproj | 2 +- .../AsyncAutoResetEventTests.cs | 2 +- .../AzureStorageScaleTests.cs | 8 +- .../AzureStorageScenarioTests.cs | 132 +++++++++--------- .../Correlation/CorrelationScenarioTest.cs | 22 +-- .../Correlation/StringExtensionsTest.cs | 2 +- .../KeySanitationTests.cs | 2 +- .../MessageManagerTests.cs | 6 +- .../Net/UriPathTests.cs | 2 +- .../StressTests.cs | 2 +- .../DispatcherMiddlewareTests.cs | 2 +- .../ExceptionHandlingIntegrationTests.cs | 4 +- .../RetryInterceptorTests.cs | 6 +- .../TraceContextBaseTest.cs | 2 +- .../EmulatorFunctionalTests.cs | 4 +- .../SampleScenarioTests.cs | 6 +- 21 files changed, 157 insertions(+), 159 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 2bdd483f9..7041494bd 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,114 +9,108 @@ - + - - + + - - - + + - + - - - - - - - - - - - + + + + + + + + + + + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + - + \ No newline at end of file diff --git a/Test/DurableTask.AzureStorage.Tests/Storage/DurableTaskStorageExceptionTests.cs b/Test/DurableTask.AzureStorage.Tests/Storage/DurableTaskStorageExceptionTests.cs index f57918638..399ccd2d8 100644 --- a/Test/DurableTask.AzureStorage.Tests/Storage/DurableTaskStorageExceptionTests.cs +++ b/Test/DurableTask.AzureStorage.Tests/Storage/DurableTaskStorageExceptionTests.cs @@ -30,7 +30,7 @@ public void MissingRequestFailedException() Assert.IsFalse(exception.LeaseLost); } - [DataTestMethod] + [TestMethod] [DataRow(true, HttpStatusCode.Conflict, nameof(BlobErrorCode.LeaseLost))] [DataRow(false, HttpStatusCode.Conflict, nameof(BlobErrorCode.LeaseNotPresentWithBlobOperation))] [DataRow(false, HttpStatusCode.NotFound, nameof(BlobErrorCode.BlobNotFound))] diff --git a/samples/DistributedTraceSample/ApplicationInsights/ApplicationInsightsSample.csproj b/samples/DistributedTraceSample/ApplicationInsights/ApplicationInsightsSample.csproj index efbc910c6..19b2a63e8 100644 --- a/samples/DistributedTraceSample/ApplicationInsights/ApplicationInsightsSample.csproj +++ b/samples/DistributedTraceSample/ApplicationInsights/ApplicationInsightsSample.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs b/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs index abf7a58b2..b69593c80 100644 --- a/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs +++ b/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs @@ -277,7 +277,7 @@ async Task> DedupeExecutionStartedMessagesAsync( // "Remote" -> the instance ID info comes from the Instances table that we're querying IAsyncEnumerable instances = this.trackingStore.FetchInstanceStatusAsync(instanceIds, cancellationToken); IDictionary remoteOrchestrationsById = - await instances.ToDictionaryAsync(o => o.State.OrchestrationInstance.InstanceId, cancellationToken); + await instances.ToDictionaryAsync(o => o.State.OrchestrationInstance.InstanceId, comparer: null, cancellationToken); foreach (MessageData message in executionStartedMessages) { diff --git a/test/DurableTask.AzureServiceFabric.Integration.Tests/DeploymentUtil/DeploymentHelper.cs b/test/DurableTask.AzureServiceFabric.Integration.Tests/DeploymentUtil/DeploymentHelper.cs index 20cb25ef8..e2921fa10 100644 --- a/test/DurableTask.AzureServiceFabric.Integration.Tests/DeploymentUtil/DeploymentHelper.cs +++ b/test/DurableTask.AzureServiceFabric.Integration.Tests/DeploymentUtil/DeploymentHelper.cs @@ -54,7 +54,9 @@ public static async Task CleanAsync() var replicas = (await client.QueryManager.GetDeployedReplicaListAsync(node.NodeName, application.ApplicationName)).OfType(); foreach (var replica in replicas) { + #pragma warning disable CS0618 // RemoveReplicaAsync overload is deprecated await client.ServiceManager.RemoveReplicaAsync(node.NodeName, replica.Partitionid, replica.ReplicaId); + #pragma warning restore CS0618 } } } diff --git a/test/DurableTask.AzureServiceFabric.Integration.Tests/DurableTask.AzureServiceFabric.Integration.Tests.csproj b/test/DurableTask.AzureServiceFabric.Integration.Tests/DurableTask.AzureServiceFabric.Integration.Tests.csproj index 09d30327f..3864bd43e 100644 --- a/test/DurableTask.AzureServiceFabric.Integration.Tests/DurableTask.AzureServiceFabric.Integration.Tests.csproj +++ b/test/DurableTask.AzureServiceFabric.Integration.Tests/DurableTask.AzureServiceFabric.Integration.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/test/DurableTask.AzureStorage.Tests/AsyncAutoResetEventTests.cs b/test/DurableTask.AzureStorage.Tests/AsyncAutoResetEventTests.cs index 29d0b0ef9..7b5cb1918 100644 --- a/test/DurableTask.AzureStorage.Tests/AsyncAutoResetEventTests.cs +++ b/test/DurableTask.AzureStorage.Tests/AsyncAutoResetEventTests.cs @@ -21,7 +21,7 @@ namespace DurableTask.AzureStorage.Tests [TestClass] public class AsyncAutoResetEventTests { - [DataTestMethod] + [TestMethod] [DataRow(false, false)] [DataRow(true, true)] public async Task InitialState(bool initiallySignaled, bool expectedResult) diff --git a/test/DurableTask.AzureStorage.Tests/AzureStorageScaleTests.cs b/test/DurableTask.AzureStorage.Tests/AzureStorageScaleTests.cs index 854aa3007..7c6b9a4e0 100644 --- a/test/DurableTask.AzureStorage.Tests/AzureStorageScaleTests.cs +++ b/test/DurableTask.AzureStorage.Tests/AzureStorageScaleTests.cs @@ -195,7 +195,7 @@ async Task EnsureTaskHubAsync( private async Task EnsureLeasesMatchControlQueue(string directoryReference, BlobContainerClient taskHubContainer, ControlQueue[] controlQueues) { - BlobItem[] leaseBlobs = await taskHubContainer.GetBlobsAsync(prefix: directoryReference).ToArrayAsync(); + BlobItem[] leaseBlobs = await taskHubContainer.GetBlobsAsync(BlobTraits.None, BlobStates.None, directoryReference, default).ToArrayAsync(); Assert.AreEqual(controlQueues.Length, leaseBlobs.Length, "Expected to see the same number of control queues and lease blobs."); foreach (BlobItem blobItem in leaseBlobs) { @@ -210,7 +210,7 @@ private async Task EnsureLeasesMatchControlQueue(string directoryReference, Blob /// REQUIREMENT: Workers can be added or removed at any time and control-queue partitions are load-balanced automatically. /// REQUIREMENT: No two workers will ever process the same control queue. /// - [DataTestMethod] + [TestMethod] [DataRow(PartitionManagerType.V1Legacy, 30)] [DataRow(PartitionManagerType.V2Safe, 180)] public async Task MultiWorkerLeaseMovement(PartitionManagerType partitionManagerType, int timeoutInSeconds) @@ -586,7 +586,7 @@ await TestHelpers.WaitFor( await service2.CompleteTaskOrchestrationWorkItemAsync(workItem2, runtimeState, new List(), new List(), new List(), null, null); // Now worker 1 will attempt to complete the same work item. Since this is the first attempt to complete a work item and add a history for the orchestration (by worker 1), // there is no etag stored for the OrchestrationSession, and so the a "conflict" exception will be thrown as worker 2 already created a history for the orchestration. - SessionAbortedException exception = await Assert.ThrowsExceptionAsync(async () => + SessionAbortedException exception = await Assert.ThrowsExactlyAsync(async () => await service1.CompleteTaskOrchestrationWorkItemAsync(workItem1, runtimeState, new List(), new List(), new List(), null, null) ); Assert.IsInstanceOfType(exception.InnerException, typeof(DurableTaskStorageException)); @@ -629,7 +629,7 @@ await TestHelpers.WaitFor( await service1.CompleteTaskOrchestrationWorkItemAsync(workItem1, runtimeState, new List(), new List(), new List(), null, null); // Now worker 2 attempts to complete the same work item. Since this is not the first work item for the orchestration, now an etag exists for the OrchestrationSession, and the exception // that is thrown will be "precondition failed" as the Etag is stale after worker 1 completed the work item. - exception = await Assert.ThrowsExceptionAsync(async () => + exception = await Assert.ThrowsExactlyAsync(async () => await service2.CompleteTaskOrchestrationWorkItemAsync(workItem2, runtimeState, new List(), new List(), new List(), null, null) ); Assert.IsInstanceOfType(exception.InnerException, typeof(DurableTaskStorageException)); diff --git a/test/DurableTask.AzureStorage.Tests/AzureStorageScenarioTests.cs b/test/DurableTask.AzureStorage.Tests/AzureStorageScenarioTests.cs index 3a48ee5ff..1ecd5056f 100644 --- a/test/DurableTask.AzureStorage.Tests/AzureStorageScenarioTests.cs +++ b/test/DurableTask.AzureStorage.Tests/AzureStorageScenarioTests.cs @@ -50,7 +50,7 @@ public class AzureStorageScenarioTests /// /// End-to-end test which validates a simple orchestrator function which doesn't call any activity functions. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task HelloWorldOrchestration_Inline(bool enableExtendedSessions) @@ -73,7 +73,7 @@ public async Task HelloWorldOrchestration_Inline(bool enableExtendedSessions) /// /// End-to-end test which runs a simple orchestrator function that calls a single activity function. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task HelloWorldOrchestration_Activity(bool enableExtendedSessions) @@ -157,7 +157,7 @@ public async Task ParentOfSequentialOrchestration() /// /// End-to-end test which runs a slow orchestrator that causes work item renewal /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LongRunningOrchestrator(bool enableExtendedSessions) @@ -266,7 +266,7 @@ public async Task NoInstancesGetAllOrchestrationStatusesNullContinuationToken() } } - [DataTestMethod] + [TestMethod] [DataRow(false, false)] [DataRow(true, false)] [DataRow(false, true)] @@ -287,7 +287,7 @@ public async Task EventConversation(bool enableExtendedSessions, bool useFireAnd } } - [DataTestMethod] + [TestMethod] [DataRow(false)] [DataRow(true)] public async Task AutoStart(bool enableExtendedSessions) @@ -308,7 +308,7 @@ public async Task AutoStart(bool enableExtendedSessions) } } - [DataTestMethod] + [TestMethod] [DataRow(false)] [DataRow(true)] public async Task ContinueAsNewThenTimer(bool enableExtendedSessions) @@ -557,7 +557,7 @@ private async Task GetBlobCount(string containerName, string directoryName) var containerClient = client.GetBlobContainerClient(containerName); await containerClient.CreateIfNotExistsAsync(); - return await containerClient.GetBlobsAsync(traits: BlobTraits.Metadata, prefix: directoryName).CountAsync(); + return await containerClient.GetBlobsAsync(BlobTraits.Metadata, BlobStates.None, directoryName, default).CountAsync(); } @@ -640,7 +640,7 @@ public async Task PurgeInstanceHistoryForTimePeriodDeletePartially() /// End-to-end test which validates parallel function execution by enumerating all files in the current directory /// in parallel and getting the sum total of all file sizes. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task ParallelOrchestration(bool enableExtendedSessions) @@ -660,7 +660,7 @@ public async Task ParallelOrchestration(bool enableExtendedSessions) } } - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeFanOutOrchestration(bool enableExtendedSessions) @@ -699,7 +699,7 @@ public async Task FanOutOrchestration_LargeHistoryBatches() /// /// End-to-end test which validates the ContinueAsNew functionality by implementing a counter actor pattern. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task ActorOrchestration(bool enableExtendedSessions) @@ -747,7 +747,7 @@ public async Task ActorOrchestration(bool enableExtendedSessions) /// /// End-to-end test which validates the ContinueAsNew functionality by implementing character counter actor pattern. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task ActorOrchestrationForLargeInput(bool enableExtendedSessions) @@ -758,7 +758,7 @@ public async Task ActorOrchestrationForLargeInput(bool enableExtendedSessions) /// /// End-to-end test which validates the deletion of all data generated by the ContinueAsNew functionality in the character counter actor pattern. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task ActorOrchestrationDeleteAllLargeMessageBlobs(bool enableExtendedSessions) @@ -872,7 +872,7 @@ private async Task> ValidateCharacterCoun /// /// End-to-end test which validates the Terminate functionality. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task TerminateOrchestration(bool enableExtendedSessions) @@ -902,7 +902,7 @@ public async Task TerminateOrchestration(bool enableExtendedSessions) /// /// End-to-end test which validates the Suspend-Resume functionality. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task SuspendResumeOrchestration(bool enableExtendedSessions) @@ -941,7 +941,7 @@ public async Task SuspendResumeOrchestration(bool enableExtendedSessions) /// /// Test that a suspended orchestration can be terminated. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task TerminateSuspendedOrchestration(bool enableExtendedSessions) @@ -970,7 +970,7 @@ public async Task TerminateSuspendedOrchestration(bool enableExtendedSessions) /// Test that a pending orchestration can be terminated (including tests with a large termination reason that will need to be /// stored in blob storage). /// - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -1277,7 +1277,7 @@ public async Task RewindNestedSubOrchestrationTest() } } - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task TimerCancellation(bool enableExtendedSessions) @@ -1305,7 +1305,7 @@ public async Task TimerCancellation(bool enableExtendedSessions) /// /// End-to-end test which validates the handling of durable timer expiration. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task TimerExpiration(bool enableExtendedSessions) @@ -1331,7 +1331,7 @@ public async Task TimerExpiration(bool enableExtendedSessions) } } - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task TimerDelay(bool useUtc) @@ -1359,7 +1359,7 @@ public async Task TimerDelay(bool useUtc) } } - [DataTestMethod] + [TestMethod] [DataRow(false)] [DataRow(true)] public async Task OrchestratorStartAtAcceptsAllDateTimeKinds(bool useUtc) @@ -1399,7 +1399,7 @@ public async Task OrchestratorStartAtAcceptsAllDateTimeKinds(bool useUtc) /// /// End-to-end test which validates that orchestrations run concurrently of each other (up to 100 by default). /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task OrchestrationConcurrency(bool enableExtendedSessions) @@ -1438,7 +1438,7 @@ public async Task OrchestrationConcurrency(bool enableExtendedSessions) /// /// End-to-end test which validates the orchestrator's exception handling behavior. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task HandledActivityException(bool enableExtendedSessions) @@ -1461,7 +1461,7 @@ public async Task HandledActivityException(bool enableExtendedSessions) /// /// End-to-end test which validates the handling of unhandled exceptions generated from orchestrator code. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task UnhandledOrchestrationException(bool enableExtendedSessions) @@ -1484,7 +1484,7 @@ public async Task UnhandledOrchestrationException(bool enableExtendedSessions) /// /// End-to-end test which validates the handling of unhandled exceptions generated from activity code. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task UnhandledActivityException(bool enableExtendedSessions) @@ -1507,7 +1507,7 @@ public async Task UnhandledActivityException(bool enableExtendedSessions) /// /// Fan-out/fan-in test which ensures each operation is run only once. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task FanOutToTableStorage(bool enableExtendedSessions) @@ -1551,7 +1551,7 @@ public void ValidateEventSource() /// /// End-to-end test which validates that orchestrations with <=60KB text message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task SmallTextMessagePayloads(bool enableExtendedSessions) @@ -1587,7 +1587,7 @@ public async Task SmallTextMessagePayloads(bool enableExtendedSessions) /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeQueueTextMessagePayloads_BlobUrl(bool enableExtendedSessions) @@ -1614,7 +1614,7 @@ public async Task LargeQueueTextMessagePayloads_BlobUrl(bool enableExtendedSessi /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTableTextMessagePayloads_SizeViolation_BlobUrl(bool enableExtendedSessions) @@ -1698,7 +1698,7 @@ public async Task TagsAreAvailableInOrchestrationState() /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeOverallTextMessagePayloads_BlobUrl(bool enableExtendedSessions) @@ -1735,7 +1735,7 @@ await ValidateLargeMessageBlobUrlAsync( /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTextMessagePayloads_FetchLargeMessages(bool enableExtendedSessions) @@ -1759,7 +1759,7 @@ public async Task LargeTextMessagePayloads_FetchLargeMessages(bool enableExtende /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTableTextMessagePayloads_FetchLargeMessages(bool enableExtendedSessions) @@ -1811,7 +1811,7 @@ public async Task LargeOrchestrationTags() /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task NonBlobUriPayload_FetchLargeMessages_RetainsOriginalPayload(bool enableExtendedSessions) @@ -1835,7 +1835,7 @@ public async Task NonBlobUriPayload_FetchLargeMessages_RetainsOriginalPayload(bo /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTextMessagePayloads_FetchLargeMessages_QueryState(bool enableExtendedSessions) @@ -1863,7 +1863,7 @@ public async Task LargeTextMessagePayloads_FetchLargeMessages_QueryState(bool en /// End-to-end test which validates that exception messages that are considered valid Urls in the Uri.TryCreate() method /// are handled with an additional Uri format check /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTextMessagePayloads_URIFormatCheck(bool enableExtendedSessions) @@ -1927,7 +1927,7 @@ private StringBuilder GenerateMediumRandomStringPayload(int numChars = 128 * 102 /// /// End-to-end test which validates that orchestrations with > 60KB binary bytes message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeBinaryByteMessagePayloads(bool enableExtendedSessions) @@ -1957,7 +1957,7 @@ public async Task LargeBinaryByteMessagePayloads(bool enableExtendedSessions) /// /// End-to-end test which validates that orchestrations with > 60KB binary string message sizes can run successfully. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeBinaryStringMessagePayloads(bool enableExtendedSessions) @@ -1989,7 +1989,7 @@ public async Task LargeBinaryStringMessagePayloads(bool enableExtendedSessions) /// /// End-to-end test which validates that a completed singleton instance can be recreated. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task RecreateCompletedInstance(bool enableExtendedSessions) @@ -2027,7 +2027,7 @@ public async Task RecreateCompletedInstance(bool enableExtendedSessions) /// /// End-to-end test which validates that a failed singleton instance can be recreated. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task RecreateFailedInstance(bool enableExtendedSessions) @@ -2062,7 +2062,7 @@ public async Task RecreateFailedInstance(bool enableExtendedSessions) /// /// End-to-end test which validates that a terminated orchestration can be recreated. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task RecreateTerminatedInstance(bool enableExtendedSessions) @@ -2106,7 +2106,7 @@ public async Task RecreateTerminatedInstance(bool enableExtendedSessions) /// /// End-to-end test which validates that a running orchestration can be recreated. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task RecreateRunningInstance(bool enableExtendedSessions) @@ -2203,7 +2203,7 @@ public async Task ExtendedSessions_SessionTimeout() /// Tests an orchestration that does two consecutive fan-out, fan-ins. /// This is a regression test for https://github.com/Azure/durabletask/issues/241. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task DoubleFanOut(bool enableExtendedSessions) @@ -2236,7 +2236,7 @@ private static async Task ValidateLargeMessageBlobUrlAsync(string taskHubName, s BlobContainerClient container = serviceClient.GetBlobContainerClient(containerName); Assert.IsTrue(await container.ExistsAsync(), $"Blob container {containerName} is expected to exist."); BlobItem blob = await container - .GetBlobsByHierarchyAsync(BlobTraits.Metadata, prefix: sanitizedInstanceId) + .GetBlobsByHierarchyAsync(BlobTraits.Metadata, BlobStates.None, default, sanitizedInstanceId, default) .Where(x => x.IsBlob && x.Blob.Name == sanitizedInstanceId + "/" + blobName) .Select(x => x.Blob) .SingleOrDefaultAsync(); @@ -2251,7 +2251,7 @@ private static async Task ValidateLargeMessageBlobUrlAsync(string taskHubName, s /// /// Tests the behavior of from orchestrations and activities. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task AbortOrchestrationAndActivity(bool enableExtendedSessions) @@ -2276,7 +2276,7 @@ public async Task AbortOrchestrationAndActivity(bool enableExtendedSessions) /// /// /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task ScheduledStart_Inline(bool enableExtendedSessions) @@ -2317,7 +2317,7 @@ public async Task ScheduledStart_Inline(bool enableExtendedSessions) /// /// /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task ScheduledStart_Activity(bool enableExtendedSessions) @@ -2358,7 +2358,7 @@ public async Task ScheduledStart_Activity(bool enableExtendedSessions) /// /// /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task ScheduledStart_Activity_GetStatus_Returns_ScheduledStart(bool enableExtendedSessions) @@ -2403,7 +2403,7 @@ await Task.WhenAll( /// To recover from this, users may set `AllowReplayingTerminalInstances` to true. When this is set, DTFx will not discard /// events for terminal orchestrators, forcing a replay which eventually updates the instances table to the right state. /// - [DataTestMethod] + [TestMethod] [DataRow(true, true, true)] [DataRow(true, true, false)] [DataRow(true, false, true)] @@ -2501,7 +2501,7 @@ public async Task TestAllowReplayingTerminalInstances(bool enableExtendedSession /// the tracking store context object that is part of the orchestration session state which keeps track of the blobs. /// /// - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2593,7 +2593,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallCompletedOrchestrat /// Same as but for a failed orchestration. /// /// - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2685,7 +2685,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallFailedOrchestration /// /// Same as but for a terminated orchestration. /// - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2779,7 +2779,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallTerminatedOrchestra /// Same as but for an orchestration with large input /// and output, which will need to be stored in blob storage. /// - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2872,7 +2872,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallLargeInputOutput(bo /// Same as but for a large termination reason that /// will need to be stored in blob storage. /// - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2969,7 +2969,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallLargeTerminationRea /// Same as but for a large exception message that will need /// to be stored in blob storage. /// - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -3161,7 +3161,7 @@ public async Task OrchestrationRejectsWithVersionMismatch() /// /// The value to use for /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task WorkerAttemptingToUpdateInstanceTableAfterStalling(bool useInstanceEtag) @@ -3225,7 +3225,7 @@ await service.CreateTaskOrchestrationAsync( if (useInstanceEtag) { // Confirm an exception is thrown due to the etag mismatch for the instance table when the worker attempts to complete the work item - SessionAbortedException exception = await Assert.ThrowsExceptionAsync(async () => + SessionAbortedException exception = await Assert.ThrowsExactlyAsync(async () => await service.CompleteTaskOrchestrationWorkItemAsync(workItem, runtimeState, new List(), new List(), new List(), null, null) ); Assert.IsInstanceOfType(exception.InnerException, typeof(DurableTaskStorageException)); @@ -3276,7 +3276,7 @@ await service.CreateTaskOrchestrationAsync( /// /// The value to use for /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task WorkerAttemptingToUpdateInstanceTableAfterStallingForSubOrchestration(bool useInstanceEtag) @@ -3383,7 +3383,7 @@ await service.CreateTaskOrchestrationAsync( { // Confirm an exception is thrown because the worker attempts to insert a new entity for the suborchestration into the instance table // when one already exists - SessionAbortedException exception = await Assert.ThrowsExceptionAsync(async () => + SessionAbortedException exception = await Assert.ThrowsExactlyAsync(async () => await service.CompleteTaskOrchestrationWorkItemAsync(workItem, runtimeState, new List(), new List(), new List(), null, null) ); Assert.IsInstanceOfType(exception.InnerException, typeof(DurableTaskStorageException)); @@ -3417,7 +3417,7 @@ await service.CreateTaskOrchestrationAsync( } } - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task WorkerAttemptingToDequeueMessageForNonExistentInstance(bool extendedSessionsEnabled) @@ -3469,7 +3469,7 @@ await service.SendTaskOrchestrationMessageAsync( } } - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -3562,7 +3562,7 @@ await service.SendTaskOrchestrationMessageAsync( } } - [DataTestMethod] + [TestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -3675,7 +3675,7 @@ await service.SendTaskOrchestrationMessageAsync( /// End-to-end test which validates a simple orchestrator function that calls an activity function /// and checks the OpenTelemetry trace information /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task OpenTelemetry_SayHelloWithActivity(bool enableExtendedSessions) @@ -3749,14 +3749,16 @@ public async Task OpenTelemetry_SayHelloWithActivity(bool enableExtendedSessions Assert.AreEqual(activity9.SpanId, activity8.ParentSpanId); // Checking trace ID values - Assert.AreEqual(activity2.TraceId.ToString(), activity5.TraceId.ToString(), activity8.TraceId.ToString(), activity9.TraceId.ToString()); + Assert.AreEqual(activity2.TraceId.ToString(), activity5.TraceId.ToString()); + Assert.AreEqual(activity2.TraceId.ToString(), activity8.TraceId.ToString()); + Assert.AreEqual(activity2.TraceId.ToString(), activity9.TraceId.ToString()); } /// /// End-to-end test which validates a simple orchestrator function that waits for an external event /// raised through the RaiseEvent API and checks the OpenTelemetry trace information /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task OpenTelemetry_ExternalEvent_RaiseEvent(bool enableExtendedSessions) @@ -3838,7 +3840,7 @@ public async Task OpenTelemetry_ExternalEvent_RaiseEvent(bool enableExtendedSess /// /// End-to-end test which validates a simple orchestrator function that fires a timer and checks the OpenTelemetry trace information /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task OpenTelemetry_TimerFired(bool enableExtendedSessions) @@ -3917,7 +3919,7 @@ public async Task OpenTelemetry_TimerFired(bool enableExtendedSessions) /// End-to-end test which validates a simple orchestrator function that waits for an external event /// raised by calling SendEvent and checks the OpenTelemetry trace information /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task OpenTelemetry_ExternalEvent_SendEvent(bool enableExtendedSessions) diff --git a/test/DurableTask.AzureStorage.Tests/Correlation/CorrelationScenarioTest.cs b/test/DurableTask.AzureStorage.Tests/Correlation/CorrelationScenarioTest.cs index 91643511d..758c76745 100644 --- a/test/DurableTask.AzureStorage.Tests/Correlation/CorrelationScenarioTest.cs +++ b/test/DurableTask.AzureStorage.Tests/Correlation/CorrelationScenarioTest.cs @@ -31,7 +31,7 @@ namespace DurableTask.AzureStorage.Tests.Correlation [TestClass] public class CorrelationScenarioTest { - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -78,7 +78,7 @@ protected override string Execute(TaskContext context, string input) } } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -113,7 +113,7 @@ public async Task SingleOrchestrationWithThrowingExceptionAsync(Protocol protoco ); } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -173,7 +173,7 @@ protected override async Task ExecuteAsync(TaskContext context, string i } } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -217,7 +217,7 @@ public override Task RunTask(OrchestrationContext context, string input) } } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -274,7 +274,7 @@ public override async Task RunTask(OrchestrationContext context, string } } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -338,7 +338,7 @@ protected override string Execute(TaskContext context, string input) } } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -447,7 +447,7 @@ protected override string Execute(TaskContext context, string input) //[TestMethod] ContinueAsNew - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -502,7 +502,7 @@ internal static void Reset() } } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -576,7 +576,7 @@ internal static void Reset() } } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] @@ -718,7 +718,7 @@ internal static void Reset() } } - [DataTestMethod] + [TestMethod] [DataRow(Protocol.W3CTraceContext, false)] [DataRow(Protocol.HttpCorrelationProtocol, false)] [DataRow(Protocol.W3CTraceContext, true)] diff --git a/test/DurableTask.AzureStorage.Tests/Correlation/StringExtensionsTest.cs b/test/DurableTask.AzureStorage.Tests/Correlation/StringExtensionsTest.cs index 164e7ebc0..2ba468c19 100644 --- a/test/DurableTask.AzureStorage.Tests/Correlation/StringExtensionsTest.cs +++ b/test/DurableTask.AzureStorage.Tests/Correlation/StringExtensionsTest.cs @@ -35,7 +35,7 @@ public void TestParseTraceParent() public void TestParseTraceParentThrowsException() { string wrongTraceparentString = "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7"; - Assert.ThrowsException( + Assert.ThrowsExactly( () => { wrongTraceparentString.ToTraceParent(); }); } diff --git a/test/DurableTask.AzureStorage.Tests/KeySanitationTests.cs b/test/DurableTask.AzureStorage.Tests/KeySanitationTests.cs index 326ffc1e3..d631241ac 100644 --- a/test/DurableTask.AzureStorage.Tests/KeySanitationTests.cs +++ b/test/DurableTask.AzureStorage.Tests/KeySanitationTests.cs @@ -24,7 +24,7 @@ namespace DurableTask.AzureStorage.Tests [TestClass] public class KeySanitationTests { - [DataTestMethod] + [TestMethod] [DataRow("\r")] [DataRow("")] [DataRow("hello")] diff --git a/test/DurableTask.AzureStorage.Tests/MessageManagerTests.cs b/test/DurableTask.AzureStorage.Tests/MessageManagerTests.cs index 008a9eac7..e16d13526 100644 --- a/test/DurableTask.AzureStorage.Tests/MessageManagerTests.cs +++ b/test/DurableTask.AzureStorage.Tests/MessageManagerTests.cs @@ -23,7 +23,7 @@ namespace DurableTask.AzureStorage.Tests [TestClass] public class MessageManagerTests { - [DataTestMethod] + [TestMethod] [DataRow("System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib],[System.String, System.Private.CoreLib]]")] [DataRow("System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]]")] public void DeserializesStandardTypes(string dictionaryType) @@ -49,7 +49,7 @@ public void FailsDeserializingUnknownTypes() var messageManager = SetupMessageManager(new KnownTypeBinder()); // When/Then - Assert.ThrowsException(() => messageManager.DeserializeMessageData(message)); + Assert.ThrowsExactly(() => messageManager.DeserializeMessageData(message)); } @@ -69,7 +69,7 @@ public void DeserializesCustomTypes() Assert.AreEqual("tagValue", startedEvent.Tags["tag1"]); } - [DataTestMethod] + [TestMethod] [DataRow("blob.bin", "blob.bin")] [DataRow("@#$%!", "%40%23%24%25%21")] [DataRow("foo/bar/b@z.tar.gz", "foo/bar/b%40z.tar.gz")] diff --git a/test/DurableTask.AzureStorage.Tests/Net/UriPathTests.cs b/test/DurableTask.AzureStorage.Tests/Net/UriPathTests.cs index 78703d5fd..4f528070a 100644 --- a/test/DurableTask.AzureStorage.Tests/Net/UriPathTests.cs +++ b/test/DurableTask.AzureStorage.Tests/Net/UriPathTests.cs @@ -18,7 +18,7 @@ namespace DurableTask.AzureStorage.Net [TestClass] public class UriPathTests { - [DataTestMethod] + [TestMethod] [DataRow("", "", "")] [DataRow("", "bar/baz", "bar/baz")] [DataRow("foo", "", "foo")] diff --git a/test/DurableTask.AzureStorage.Tests/StressTests.cs b/test/DurableTask.AzureStorage.Tests/StressTests.cs index 101dc6b51..9bdbf5542 100644 --- a/test/DurableTask.AzureStorage.Tests/StressTests.cs +++ b/test/DurableTask.AzureStorage.Tests/StressTests.cs @@ -49,7 +49,7 @@ public void Cleanup() /// both in the case where they all share the same instance ID and when they have unique /// instance IDs. /// - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public async Task ConcurrentOrchestrationStarts(bool useSameInstanceId) diff --git a/test/DurableTask.Core.Tests/DispatcherMiddlewareTests.cs b/test/DurableTask.Core.Tests/DispatcherMiddlewareTests.cs index e91b7ef84..b1ff65076 100644 --- a/test/DurableTask.Core.Tests/DispatcherMiddlewareTests.cs +++ b/test/DurableTask.Core.Tests/DispatcherMiddlewareTests.cs @@ -339,7 +339,7 @@ public async Task EnsureActivityDispatcherMiddlewareHasAccessToRuntimeState() Assert.AreEqual("Value", executionContext?.OrchestrationTags?["Test"]); } - [DataTestMethod] + [TestMethod] [DataRow(OrchestrationStatus.Completed)] [DataRow(OrchestrationStatus.Failed)] [DataRow(OrchestrationStatus.Terminated)] diff --git a/test/DurableTask.Core.Tests/ExceptionHandlingIntegrationTests.cs b/test/DurableTask.Core.Tests/ExceptionHandlingIntegrationTests.cs index a82897ca1..04745390d 100644 --- a/test/DurableTask.Core.Tests/ExceptionHandlingIntegrationTests.cs +++ b/test/DurableTask.Core.Tests/ExceptionHandlingIntegrationTests.cs @@ -49,7 +49,7 @@ public ExceptionHandlingIntegrationTests() this.client = new TaskHubClient(service, loggerFactory: loggerFactory); } - [DataTestMethod] + [TestMethod] [DataRow(ErrorPropagationMode.SerializeExceptions)] [DataRow(ErrorPropagationMode.UseFailureDetails)] public async Task CatchInvalidOperationException(ErrorPropagationMode mode) @@ -123,7 +123,7 @@ await this.worker Assert.AreEqual(1, retryPolicyInvokedCount); } - [DataTestMethod] + [TestMethod] [DataRow(ErrorPropagationMode.SerializeExceptions)] [DataRow(ErrorPropagationMode.UseFailureDetails)] public async Task FailureDetailsOnUnhandled(ErrorPropagationMode mode) diff --git a/test/DurableTask.Core.Tests/RetryInterceptorTests.cs b/test/DurableTask.Core.Tests/RetryInterceptorTests.cs index eddd9b12c..d82ad53cc 100644 --- a/test/DurableTask.Core.Tests/RetryInterceptorTests.cs +++ b/test/DurableTask.Core.Tests/RetryInterceptorTests.cs @@ -28,10 +28,10 @@ public async Task Invoke_WithFailingRetryCall_ShouldThrowCorrectException() var interceptor = new RetryInterceptor(this.context, new RetryOptions(TimeSpan.FromMilliseconds(100), 1), () => throw new IOException()); async Task Invoke() => await interceptor.Invoke(); - await Assert.ThrowsExceptionAsync(Invoke, "Interceptor should throw the original exception after exceeding max retry attempts."); + await Assert.ThrowsExactlyAsync(Invoke, "Interceptor should throw the original exception after exceeding max retry attempts."); } - [DataTestMethod] + [TestMethod] [DataRow(1)] [DataRow(2)] [DataRow(3)] @@ -59,7 +59,7 @@ public async Task Invoke_WithFailingRetryCall_ShouldHaveCorrectNumberOfCalls(int Assert.AreEqual(maxAttempts, callCount, 0, $"There should be {maxAttempts} function calls for {maxAttempts} max attempts."); } - [DataTestMethod] + [TestMethod] [DataRow(1)] [DataRow(2)] [DataRow(3)] diff --git a/test/DurableTask.Core.Tests/TraceContextBaseTest.cs b/test/DurableTask.Core.Tests/TraceContextBaseTest.cs index be32719e6..b628e9050 100644 --- a/test/DurableTask.Core.Tests/TraceContextBaseTest.cs +++ b/test/DurableTask.Core.Tests/TraceContextBaseTest.cs @@ -121,7 +121,7 @@ public void GetCurrentOrchestrationRequestTraceContextMultiOrchestratorScenario( public void GetCurrentOrchestrationRequestTraceContextWithNoRequestTraceContextScenario() { TraceContextBase currentContext = new Foo(); - Assert.ThrowsException(() => currentContext.GetCurrentOrchestrationRequestTraceContext()); + Assert.ThrowsExactly(() => currentContext.GetCurrentOrchestrationRequestTraceContext()); } private static Foo GetNewRequestContext(string comment) diff --git a/test/DurableTask.Emulator.Tests/EmulatorFunctionalTests.cs b/test/DurableTask.Emulator.Tests/EmulatorFunctionalTests.cs index 0ba937bbd..064e9cdf7 100644 --- a/test/DurableTask.Emulator.Tests/EmulatorFunctionalTests.cs +++ b/test/DurableTask.Emulator.Tests/EmulatorFunctionalTests.cs @@ -76,9 +76,9 @@ await worker.AddTaskOrchestrations(typeof(SimplestGreetingsOrchestration)) OrchestrationState result = await client.WaitForOrchestrationAsync(id, TimeSpan.FromSeconds(30), new CancellationToken()); Assert.AreEqual(OrchestrationStatus.Completed, result.OrchestrationStatus); - await Assert.ThrowsExceptionAsync(() => client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null)); + await Assert.ThrowsExactlyAsync(() => client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null)); - await Assert.ThrowsExceptionAsync(() => client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null, new[] { OrchestrationStatus.Completed })); + await Assert.ThrowsExactlyAsync(() => client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null, new[] { OrchestrationStatus.Completed })); SimplestGreetingsOrchestration.Result = String.Empty; diff --git a/test/DurableTask.ServiceBus.Tests/SampleScenarioTests.cs b/test/DurableTask.ServiceBus.Tests/SampleScenarioTests.cs index 84319c9b6..457015bd0 100644 --- a/test/DurableTask.ServiceBus.Tests/SampleScenarioTests.cs +++ b/test/DurableTask.ServiceBus.Tests/SampleScenarioTests.cs @@ -104,11 +104,11 @@ await this.taskHub.AddTaskOrchestrations(typeof(SimplestGreetingsOrchestration)) Assert.AreEqual("Greeting send to Gabbar", SimplestGreetingsOrchestration.Result, "Orchestration Result is wrong!!!"); - await Assert.ThrowsExceptionAsync(() => this.client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null)); + await Assert.ThrowsExactlyAsync(() => this.client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null)); - await Assert.ThrowsExceptionAsync(() => this.client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null, null)); + await Assert.ThrowsExactlyAsync(() => this.client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null, null)); - await Assert.ThrowsExceptionAsync(() => this.client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null, new[] { OrchestrationStatus.Completed, OrchestrationStatus.Terminated })); + await Assert.ThrowsExactlyAsync(() => this.client.CreateOrchestrationInstanceAsync(typeof(SimplestGreetingsOrchestration), id.InstanceId, null, new[] { OrchestrationStatus.Completed, OrchestrationStatus.Terminated })); SimplestGreetingsOrchestration.Result = string.Empty; From f68157e1abced50a3ff48fd7f5337d3016e37c47 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 13 Mar 2026 15:47:15 -0700 Subject: [PATCH 2/2] Fix DataTestMethod attributes, OrdinalIgnoreCase dictionary comparer, and explicit blob delimiter (#1317) --- .../OrchestrationSessionManager.cs | 2 +- .../AzureStorageScaleTests.cs | 2 +- .../AzureStorageScenarioTests.cs | 126 +++++++++--------- 3 files changed, 65 insertions(+), 65 deletions(-) diff --git a/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs b/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs index b69593c80..c64cad0e6 100644 --- a/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs +++ b/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs @@ -277,7 +277,7 @@ async Task> DedupeExecutionStartedMessagesAsync( // "Remote" -> the instance ID info comes from the Instances table that we're querying IAsyncEnumerable instances = this.trackingStore.FetchInstanceStatusAsync(instanceIds, cancellationToken); IDictionary remoteOrchestrationsById = - await instances.ToDictionaryAsync(o => o.State.OrchestrationInstance.InstanceId, comparer: null, cancellationToken); + await instances.ToDictionaryAsync(o => o.State.OrchestrationInstance.InstanceId, comparer: StringComparer.OrdinalIgnoreCase, cancellationToken); foreach (MessageData message in executionStartedMessages) { diff --git a/test/DurableTask.AzureStorage.Tests/AzureStorageScaleTests.cs b/test/DurableTask.AzureStorage.Tests/AzureStorageScaleTests.cs index 7c6b9a4e0..cc6f338bb 100644 --- a/test/DurableTask.AzureStorage.Tests/AzureStorageScaleTests.cs +++ b/test/DurableTask.AzureStorage.Tests/AzureStorageScaleTests.cs @@ -210,7 +210,7 @@ private async Task EnsureLeasesMatchControlQueue(string directoryReference, Blob /// REQUIREMENT: Workers can be added or removed at any time and control-queue partitions are load-balanced automatically. /// REQUIREMENT: No two workers will ever process the same control queue. /// - [TestMethod] + [DataTestMethod] [DataRow(PartitionManagerType.V1Legacy, 30)] [DataRow(PartitionManagerType.V2Safe, 180)] public async Task MultiWorkerLeaseMovement(PartitionManagerType partitionManagerType, int timeoutInSeconds) diff --git a/test/DurableTask.AzureStorage.Tests/AzureStorageScenarioTests.cs b/test/DurableTask.AzureStorage.Tests/AzureStorageScenarioTests.cs index 1ecd5056f..93d0ffca2 100644 --- a/test/DurableTask.AzureStorage.Tests/AzureStorageScenarioTests.cs +++ b/test/DurableTask.AzureStorage.Tests/AzureStorageScenarioTests.cs @@ -50,7 +50,7 @@ public class AzureStorageScenarioTests /// /// End-to-end test which validates a simple orchestrator function which doesn't call any activity functions. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task HelloWorldOrchestration_Inline(bool enableExtendedSessions) @@ -73,7 +73,7 @@ public async Task HelloWorldOrchestration_Inline(bool enableExtendedSessions) /// /// End-to-end test which runs a simple orchestrator function that calls a single activity function. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task HelloWorldOrchestration_Activity(bool enableExtendedSessions) @@ -157,7 +157,7 @@ public async Task ParentOfSequentialOrchestration() /// /// End-to-end test which runs a slow orchestrator that causes work item renewal /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LongRunningOrchestrator(bool enableExtendedSessions) @@ -266,7 +266,7 @@ public async Task NoInstancesGetAllOrchestrationStatusesNullContinuationToken() } } - [TestMethod] + [DataTestMethod] [DataRow(false, false)] [DataRow(true, false)] [DataRow(false, true)] @@ -287,7 +287,7 @@ public async Task EventConversation(bool enableExtendedSessions, bool useFireAnd } } - [TestMethod] + [DataTestMethod] [DataRow(false)] [DataRow(true)] public async Task AutoStart(bool enableExtendedSessions) @@ -308,7 +308,7 @@ public async Task AutoStart(bool enableExtendedSessions) } } - [TestMethod] + [DataTestMethod] [DataRow(false)] [DataRow(true)] public async Task ContinueAsNewThenTimer(bool enableExtendedSessions) @@ -640,7 +640,7 @@ public async Task PurgeInstanceHistoryForTimePeriodDeletePartially() /// End-to-end test which validates parallel function execution by enumerating all files in the current directory /// in parallel and getting the sum total of all file sizes. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task ParallelOrchestration(bool enableExtendedSessions) @@ -660,7 +660,7 @@ public async Task ParallelOrchestration(bool enableExtendedSessions) } } - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeFanOutOrchestration(bool enableExtendedSessions) @@ -699,7 +699,7 @@ public async Task FanOutOrchestration_LargeHistoryBatches() /// /// End-to-end test which validates the ContinueAsNew functionality by implementing a counter actor pattern. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task ActorOrchestration(bool enableExtendedSessions) @@ -747,7 +747,7 @@ public async Task ActorOrchestration(bool enableExtendedSessions) /// /// End-to-end test which validates the ContinueAsNew functionality by implementing character counter actor pattern. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task ActorOrchestrationForLargeInput(bool enableExtendedSessions) @@ -758,7 +758,7 @@ public async Task ActorOrchestrationForLargeInput(bool enableExtendedSessions) /// /// End-to-end test which validates the deletion of all data generated by the ContinueAsNew functionality in the character counter actor pattern. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task ActorOrchestrationDeleteAllLargeMessageBlobs(bool enableExtendedSessions) @@ -872,7 +872,7 @@ private async Task> ValidateCharacterCoun /// /// End-to-end test which validates the Terminate functionality. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task TerminateOrchestration(bool enableExtendedSessions) @@ -902,7 +902,7 @@ public async Task TerminateOrchestration(bool enableExtendedSessions) /// /// End-to-end test which validates the Suspend-Resume functionality. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task SuspendResumeOrchestration(bool enableExtendedSessions) @@ -941,7 +941,7 @@ public async Task SuspendResumeOrchestration(bool enableExtendedSessions) /// /// Test that a suspended orchestration can be terminated. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task TerminateSuspendedOrchestration(bool enableExtendedSessions) @@ -970,7 +970,7 @@ public async Task TerminateSuspendedOrchestration(bool enableExtendedSessions) /// Test that a pending orchestration can be terminated (including tests with a large termination reason that will need to be /// stored in blob storage). /// - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -1277,7 +1277,7 @@ public async Task RewindNestedSubOrchestrationTest() } } - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task TimerCancellation(bool enableExtendedSessions) @@ -1305,7 +1305,7 @@ public async Task TimerCancellation(bool enableExtendedSessions) /// /// End-to-end test which validates the handling of durable timer expiration. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task TimerExpiration(bool enableExtendedSessions) @@ -1331,7 +1331,7 @@ public async Task TimerExpiration(bool enableExtendedSessions) } } - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task TimerDelay(bool useUtc) @@ -1359,7 +1359,7 @@ public async Task TimerDelay(bool useUtc) } } - [TestMethod] + [DataTestMethod] [DataRow(false)] [DataRow(true)] public async Task OrchestratorStartAtAcceptsAllDateTimeKinds(bool useUtc) @@ -1399,7 +1399,7 @@ public async Task OrchestratorStartAtAcceptsAllDateTimeKinds(bool useUtc) /// /// End-to-end test which validates that orchestrations run concurrently of each other (up to 100 by default). /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task OrchestrationConcurrency(bool enableExtendedSessions) @@ -1438,7 +1438,7 @@ public async Task OrchestrationConcurrency(bool enableExtendedSessions) /// /// End-to-end test which validates the orchestrator's exception handling behavior. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task HandledActivityException(bool enableExtendedSessions) @@ -1461,7 +1461,7 @@ public async Task HandledActivityException(bool enableExtendedSessions) /// /// End-to-end test which validates the handling of unhandled exceptions generated from orchestrator code. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task UnhandledOrchestrationException(bool enableExtendedSessions) @@ -1484,7 +1484,7 @@ public async Task UnhandledOrchestrationException(bool enableExtendedSessions) /// /// End-to-end test which validates the handling of unhandled exceptions generated from activity code. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task UnhandledActivityException(bool enableExtendedSessions) @@ -1507,7 +1507,7 @@ public async Task UnhandledActivityException(bool enableExtendedSessions) /// /// Fan-out/fan-in test which ensures each operation is run only once. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task FanOutToTableStorage(bool enableExtendedSessions) @@ -1551,7 +1551,7 @@ public void ValidateEventSource() /// /// End-to-end test which validates that orchestrations with <=60KB text message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task SmallTextMessagePayloads(bool enableExtendedSessions) @@ -1587,7 +1587,7 @@ public async Task SmallTextMessagePayloads(bool enableExtendedSessions) /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeQueueTextMessagePayloads_BlobUrl(bool enableExtendedSessions) @@ -1614,7 +1614,7 @@ public async Task LargeQueueTextMessagePayloads_BlobUrl(bool enableExtendedSessi /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTableTextMessagePayloads_SizeViolation_BlobUrl(bool enableExtendedSessions) @@ -1698,7 +1698,7 @@ public async Task TagsAreAvailableInOrchestrationState() /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeOverallTextMessagePayloads_BlobUrl(bool enableExtendedSessions) @@ -1735,7 +1735,7 @@ await ValidateLargeMessageBlobUrlAsync( /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTextMessagePayloads_FetchLargeMessages(bool enableExtendedSessions) @@ -1759,7 +1759,7 @@ public async Task LargeTextMessagePayloads_FetchLargeMessages(bool enableExtende /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTableTextMessagePayloads_FetchLargeMessages(bool enableExtendedSessions) @@ -1811,7 +1811,7 @@ public async Task LargeOrchestrationTags() /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task NonBlobUriPayload_FetchLargeMessages_RetainsOriginalPayload(bool enableExtendedSessions) @@ -1835,7 +1835,7 @@ public async Task NonBlobUriPayload_FetchLargeMessages_RetainsOriginalPayload(bo /// /// End-to-end test which validates that orchestrations with > 60KB text message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTextMessagePayloads_FetchLargeMessages_QueryState(bool enableExtendedSessions) @@ -1863,7 +1863,7 @@ public async Task LargeTextMessagePayloads_FetchLargeMessages_QueryState(bool en /// End-to-end test which validates that exception messages that are considered valid Urls in the Uri.TryCreate() method /// are handled with an additional Uri format check /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeTextMessagePayloads_URIFormatCheck(bool enableExtendedSessions) @@ -1927,7 +1927,7 @@ private StringBuilder GenerateMediumRandomStringPayload(int numChars = 128 * 102 /// /// End-to-end test which validates that orchestrations with > 60KB binary bytes message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeBinaryByteMessagePayloads(bool enableExtendedSessions) @@ -1957,7 +1957,7 @@ public async Task LargeBinaryByteMessagePayloads(bool enableExtendedSessions) /// /// End-to-end test which validates that orchestrations with > 60KB binary string message sizes can run successfully. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task LargeBinaryStringMessagePayloads(bool enableExtendedSessions) @@ -1989,7 +1989,7 @@ public async Task LargeBinaryStringMessagePayloads(bool enableExtendedSessions) /// /// End-to-end test which validates that a completed singleton instance can be recreated. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task RecreateCompletedInstance(bool enableExtendedSessions) @@ -2027,7 +2027,7 @@ public async Task RecreateCompletedInstance(bool enableExtendedSessions) /// /// End-to-end test which validates that a failed singleton instance can be recreated. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task RecreateFailedInstance(bool enableExtendedSessions) @@ -2062,7 +2062,7 @@ public async Task RecreateFailedInstance(bool enableExtendedSessions) /// /// End-to-end test which validates that a terminated orchestration can be recreated. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task RecreateTerminatedInstance(bool enableExtendedSessions) @@ -2106,7 +2106,7 @@ public async Task RecreateTerminatedInstance(bool enableExtendedSessions) /// /// End-to-end test which validates that a running orchestration can be recreated. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task RecreateRunningInstance(bool enableExtendedSessions) @@ -2203,7 +2203,7 @@ public async Task ExtendedSessions_SessionTimeout() /// Tests an orchestration that does two consecutive fan-out, fan-ins. /// This is a regression test for https://github.com/Azure/durabletask/issues/241. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task DoubleFanOut(bool enableExtendedSessions) @@ -2236,7 +2236,7 @@ private static async Task ValidateLargeMessageBlobUrlAsync(string taskHubName, s BlobContainerClient container = serviceClient.GetBlobContainerClient(containerName); Assert.IsTrue(await container.ExistsAsync(), $"Blob container {containerName} is expected to exist."); BlobItem blob = await container - .GetBlobsByHierarchyAsync(BlobTraits.Metadata, BlobStates.None, default, sanitizedInstanceId, default) + .GetBlobsByHierarchyAsync(BlobTraits.Metadata, BlobStates.None, delimiter: "/", sanitizedInstanceId, default) .Where(x => x.IsBlob && x.Blob.Name == sanitizedInstanceId + "/" + blobName) .Select(x => x.Blob) .SingleOrDefaultAsync(); @@ -2251,7 +2251,7 @@ private static async Task ValidateLargeMessageBlobUrlAsync(string taskHubName, s /// /// Tests the behavior of from orchestrations and activities. /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task AbortOrchestrationAndActivity(bool enableExtendedSessions) @@ -2276,7 +2276,7 @@ public async Task AbortOrchestrationAndActivity(bool enableExtendedSessions) /// /// /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task ScheduledStart_Inline(bool enableExtendedSessions) @@ -2317,7 +2317,7 @@ public async Task ScheduledStart_Inline(bool enableExtendedSessions) /// /// /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task ScheduledStart_Activity(bool enableExtendedSessions) @@ -2358,7 +2358,7 @@ public async Task ScheduledStart_Activity(bool enableExtendedSessions) /// /// /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task ScheduledStart_Activity_GetStatus_Returns_ScheduledStart(bool enableExtendedSessions) @@ -2403,7 +2403,7 @@ await Task.WhenAll( /// To recover from this, users may set `AllowReplayingTerminalInstances` to true. When this is set, DTFx will not discard /// events for terminal orchestrators, forcing a replay which eventually updates the instances table to the right state. /// - [TestMethod] + [DataTestMethod] [DataRow(true, true, true)] [DataRow(true, true, false)] [DataRow(true, false, true)] @@ -2501,7 +2501,7 @@ public async Task TestAllowReplayingTerminalInstances(bool enableExtendedSession /// the tracking store context object that is part of the orchestration session state which keeps track of the blobs. /// /// - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2593,7 +2593,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallCompletedOrchestrat /// Same as but for a failed orchestration. /// /// - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2685,7 +2685,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallFailedOrchestration /// /// Same as but for a terminated orchestration. /// - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2779,7 +2779,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallTerminatedOrchestra /// Same as but for an orchestration with large input /// and output, which will need to be stored in blob storage. /// - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2872,7 +2872,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallLargeInputOutput(bo /// Same as but for a large termination reason that /// will need to be stored in blob storage. /// - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -2969,7 +2969,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallLargeTerminationRea /// Same as but for a large exception message that will need /// to be stored in blob storage. /// - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -3060,7 +3060,7 @@ public async Task TestWorkerFailingDuringCompleteWorkItemCallLargeFailureReason( } } - [TestMethod] + [DataTestMethod] [DataRow(VersioningSettings.VersionMatchStrategy.Strict)] [DataRow(VersioningSettings.VersionMatchStrategy.CurrentOrOlder)] [DataRow(VersioningSettings.VersionMatchStrategy.None)] @@ -3091,7 +3091,7 @@ public async Task OrchestrationFailsWithVersionMismatch(VersioningSettings.Versi } } - [TestMethod] + [DataTestMethod] [DataRow(VersioningSettings.VersionMatchStrategy.Strict, "1.0.0")] [DataRow(VersioningSettings.VersionMatchStrategy.CurrentOrOlder, "1.0.0")] [DataRow(VersioningSettings.VersionMatchStrategy.CurrentOrOlder, "0.9.0")] @@ -3161,7 +3161,7 @@ public async Task OrchestrationRejectsWithVersionMismatch() /// /// The value to use for /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task WorkerAttemptingToUpdateInstanceTableAfterStalling(bool useInstanceEtag) @@ -3276,7 +3276,7 @@ await service.CreateTaskOrchestrationAsync( /// /// The value to use for /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task WorkerAttemptingToUpdateInstanceTableAfterStallingForSubOrchestration(bool useInstanceEtag) @@ -3417,7 +3417,7 @@ await service.CreateTaskOrchestrationAsync( } } - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task WorkerAttemptingToDequeueMessageForNonExistentInstance(bool extendedSessionsEnabled) @@ -3469,7 +3469,7 @@ await service.SendTaskOrchestrationMessageAsync( } } - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -3562,7 +3562,7 @@ await service.SendTaskOrchestrationMessageAsync( } } - [TestMethod] + [DataTestMethod] [DataRow(true, true)] [DataRow(false, true)] [DataRow(true, false)] @@ -3675,7 +3675,7 @@ await service.SendTaskOrchestrationMessageAsync( /// End-to-end test which validates a simple orchestrator function that calls an activity function /// and checks the OpenTelemetry trace information /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task OpenTelemetry_SayHelloWithActivity(bool enableExtendedSessions) @@ -3758,7 +3758,7 @@ public async Task OpenTelemetry_SayHelloWithActivity(bool enableExtendedSessions /// End-to-end test which validates a simple orchestrator function that waits for an external event /// raised through the RaiseEvent API and checks the OpenTelemetry trace information /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task OpenTelemetry_ExternalEvent_RaiseEvent(bool enableExtendedSessions) @@ -3840,7 +3840,7 @@ public async Task OpenTelemetry_ExternalEvent_RaiseEvent(bool enableExtendedSess /// /// End-to-end test which validates a simple orchestrator function that fires a timer and checks the OpenTelemetry trace information /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task OpenTelemetry_TimerFired(bool enableExtendedSessions) @@ -3919,7 +3919,7 @@ public async Task OpenTelemetry_TimerFired(bool enableExtendedSessions) /// End-to-end test which validates a simple orchestrator function that waits for an external event /// raised by calling SendEvent and checks the OpenTelemetry trace information /// - [TestMethod] + [DataTestMethod] [DataRow(true)] [DataRow(false)] public async Task OpenTelemetry_ExternalEvent_SendEvent(bool enableExtendedSessions)