diff --git a/all.sln b/all.sln index 9a163b1d..b0d3e3a6 100644 --- a/all.sln +++ b/all.sln @@ -113,6 +113,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapr.E2E.Test.Actors.Genera EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cryptography", "examples\Client\Cryptography\Cryptography.csproj", "{C74FBA78-13E8-407F-A173-4555AEE41FF3}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapr.Workflow.Test", "test\Dapr.Workflow.Test\Dapr.Workflow.Test.csproj", "{7CA93D67-C551-430E-AA2C-BC64B77F7908}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dapr.Protos", "src\Dapr.Protos\Dapr.Protos.csproj", "{DFBABB04-50E9-42F6-B470-310E1B545638}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dapr.Common", "src\Dapr.Common\Dapr.Common.csproj", "{B445B19C-A925-4873-8CB7-8317898B6970}" @@ -153,8 +155,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jobs", "Jobs", "{D9697361-2 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JobsSample", "examples\Jobs\JobsSample\JobsSample.csproj", "{9CAF360E-5AD3-4C4F-89A0-327EEB70D673}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dapr.Workflow.Test", "test\Dapr.Workflow.Test\Dapr.Workflow.Test.csproj", "{E90114C6-86FC-43B8-AE5C-D9273CF21FE4}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -327,6 +327,10 @@ Global {C74FBA78-13E8-407F-A173-4555AEE41FF3}.Debug|Any CPU.Build.0 = Debug|Any CPU {C74FBA78-13E8-407F-A173-4555AEE41FF3}.Release|Any CPU.ActiveCfg = Release|Any CPU {C74FBA78-13E8-407F-A173-4555AEE41FF3}.Release|Any CPU.Build.0 = Release|Any CPU + {7CA93D67-C551-430E-AA2C-BC64B77F7908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CA93D67-C551-430E-AA2C-BC64B77F7908}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CA93D67-C551-430E-AA2C-BC64B77F7908}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CA93D67-C551-430E-AA2C-BC64B77F7908}.Release|Any CPU.Build.0 = Release|Any CPU {DFBABB04-50E9-42F6-B470-310E1B545638}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DFBABB04-50E9-42F6-B470-310E1B545638}.Debug|Any CPU.Build.0 = Debug|Any CPU {DFBABB04-50E9-42F6-B470-310E1B545638}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -399,10 +403,6 @@ Global {9CAF360E-5AD3-4C4F-89A0-327EEB70D673}.Debug|Any CPU.Build.0 = Debug|Any CPU {9CAF360E-5AD3-4C4F-89A0-327EEB70D673}.Release|Any CPU.ActiveCfg = Release|Any CPU {9CAF360E-5AD3-4C4F-89A0-327EEB70D673}.Release|Any CPU.Build.0 = Release|Any CPU - {E90114C6-86FC-43B8-AE5C-D9273CF21FE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E90114C6-86FC-43B8-AE5C-D9273CF21FE4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E90114C6-86FC-43B8-AE5C-D9273CF21FE4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E90114C6-86FC-43B8-AE5C-D9273CF21FE4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -456,6 +456,7 @@ Global {AF89083D-4715-42E6-93E9-38497D12A8A6} = {DD020B34-460F-455F-8D17-CF4A949F100B} {B5CDB0DC-B26D-48F1-B934-FE5C1C991940} = {DD020B34-460F-455F-8D17-CF4A949F100B} {C74FBA78-13E8-407F-A173-4555AEE41FF3} = {A7F41094-8648-446B-AECD-DCC2CC871F73} + {7CA93D67-C551-430E-AA2C-BC64B77F7908} = {DD020B34-460F-455F-8D17-CF4A949F100B} {DFBABB04-50E9-42F6-B470-310E1B545638} = {27C5D71D-0721-4221-9286-B94AB07B58CF} {B445B19C-A925-4873-8CB7-8317898B6970} = {27C5D71D-0721-4221-9286-B94AB07B58CF} {CDB47863-BEBD-4841-A807-46D868962521} = {DD020B34-460F-455F-8D17-CF4A949F100B} @@ -476,7 +477,6 @@ Global {BF9828E9-5597-4D42-AA6E-6E6C12214204} = {DD020B34-460F-455F-8D17-CF4A949F100B} {D9697361-232F-465D-A136-4561E0E88488} = {D687DDC4-66C5-4667-9E3A-FD8B78ECAA78} {9CAF360E-5AD3-4C4F-89A0-327EEB70D673} = {D9697361-232F-465D-A136-4561E0E88488} - {E90114C6-86FC-43B8-AE5C-D9273CF21FE4} = {DD020B34-460F-455F-8D17-CF4A949F100B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {65220BF2-EAE1-4CB2-AA58-EBE80768CB40} diff --git a/src/Dapr.Workflow/DaprWorkflowActivityContext.cs b/src/Dapr.Workflow/DaprWorkflowActivityContext.cs new file mode 100644 index 00000000..cf902dea --- /dev/null +++ b/src/Dapr.Workflow/DaprWorkflowActivityContext.cs @@ -0,0 +1,37 @@ +// ------------------------------------------------------------------------ +// Copyright 2022 The Dapr Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ------------------------------------------------------------------------ + +namespace Dapr.Workflow +{ + using System; + using Microsoft.DurableTask; + + /// + /// Defines properties and methods for task activity context objects. + /// + public class DaprWorkflowActivityContext : WorkflowActivityContext + { + readonly TaskActivityContext innerContext; + + internal DaprWorkflowActivityContext(TaskActivityContext innerContext) + { + this.innerContext = innerContext ?? throw new ArgumentNullException(nameof(innerContext)); + } + + /// + public override TaskName Name => this.innerContext.Name; + + /// + public override string InstanceId => this.innerContext.InstanceId; + } +} diff --git a/src/Dapr.Workflow/WorkflowActivityContext.cs b/src/Dapr.Workflow/WorkflowActivityContext.cs index eec32f00..a77c3ef9 100644 --- a/src/Dapr.Workflow/WorkflowActivityContext.cs +++ b/src/Dapr.Workflow/WorkflowActivityContext.cs @@ -13,29 +13,21 @@ namespace Dapr.Workflow { - using System; using Microsoft.DurableTask; /// /// Defines properties and methods for task activity context objects. /// - public class WorkflowActivityContext + public abstract class WorkflowActivityContext { - readonly TaskActivityContext innerContext; - - internal WorkflowActivityContext(TaskActivityContext innerContext) - { - this.innerContext = innerContext ?? throw new ArgumentNullException(nameof(innerContext)); - } - /// /// Gets the name of the activity. /// - public TaskName Name => this.innerContext.Name; + public abstract TaskName Name { get; } /// /// Gets the unique ID of the current workflow instance. /// - public string InstanceId => this.innerContext.InstanceId; + public abstract string InstanceId { get; } } } diff --git a/src/Dapr.Workflow/WorkflowRuntimeOptions.cs b/src/Dapr.Workflow/WorkflowRuntimeOptions.cs index 9f008178..9afdfb5e 100644 --- a/src/Dapr.Workflow/WorkflowRuntimeOptions.cs +++ b/src/Dapr.Workflow/WorkflowRuntimeOptions.cs @@ -97,7 +97,7 @@ public void RegisterActivity(string name, Func(name, (innerContext, input) => { - WorkflowActivityContext activityContext = new(innerContext); + WorkflowActivityContext activityContext = new DaprWorkflowActivityContext(innerContext); return implementation(activityContext, input); }); WorkflowLoggingService.LogActivityName(name); @@ -183,7 +183,7 @@ public ActivityWrapper(IWorkflowActivity activity) public Task RunAsync(TaskActivityContext context, object? input) { - return this.activity.RunAsync(new WorkflowActivityContext(context), input); + return this.activity.RunAsync(new DaprWorkflowActivityContext(context), input); } } } diff --git a/test/Dapr.Workflow.Test/Dapr.Workflow.Test.csproj b/test/Dapr.Workflow.Test/Dapr.Workflow.Test.csproj index 531a0b1f..a1f621b6 100644 --- a/test/Dapr.Workflow.Test/Dapr.Workflow.Test.csproj +++ b/test/Dapr.Workflow.Test/Dapr.Workflow.Test.csproj @@ -1,5 +1,4 @@ - enable enable @@ -9,8 +8,15 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + @@ -23,5 +29,4 @@ - diff --git a/test/Dapr.Workflow.Test/WorkflowActivityTest.cs b/test/Dapr.Workflow.Test/WorkflowActivityTest.cs new file mode 100644 index 00000000..9fd96e60 --- /dev/null +++ b/test/Dapr.Workflow.Test/WorkflowActivityTest.cs @@ -0,0 +1,51 @@ +// ------------------------------------------------------------------------ +// Copyright 2021 The Dapr Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ------------------------------------------------------------------------ + +namespace Dapr.Workflow.Test +{ + using Moq; + using System.Threading.Tasks; + using Xunit; + + /// + /// Contains tests for WorkflowActivityContext. + /// + public class WorkflowActivityTest + { + private IWorkflowActivity workflowActivity; + + private Mock workflowActivityContextMock; + + [Fact] + public async Task RunAsync_ShouldReturnCorrectContextInstanceId() + { + this.workflowActivity = new TestDaprWorkflowActivity(); + this.workflowActivityContextMock = new Mock(); + + this.workflowActivityContextMock.Setup((x) => x.InstanceId).Returns("instanceId"); + + string result = (string) await this.workflowActivity.RunAsync(this.workflowActivityContextMock.Object, "input"); + + Assert.Equal("instanceId", result); + } + + + public class TestDaprWorkflowActivity : WorkflowActivity + { + public override Task RunAsync(WorkflowActivityContext context, string input) + { + return Task.FromResult(context.InstanceId); + } + } + } +}