Skip to content

Commit 2dd50e7

Browse files
authored
test(Dtmgrpc.IntegrationTests): add workflow testing support (#95)
- Update project references to include Dtmworkflow - Modify ITTestHelper to support workflow testing - Add new test class WorkflowGrpcTest with workflow test cases
1 parent 477b12b commit 2dd50e7

File tree

3 files changed

+108
-0
lines changed

3 files changed

+108
-0
lines changed

tests/Dtmgrpc.IntegrationTests/Dtmgrpc.IntegrationTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<ItemGroup>
2525
<ProjectReference Include="..\..\src\Dtmgrpc\Dtmgrpc.csproj" />
2626
<ProjectReference Include="..\..\src\DtmSERedisBarrier\DtmSERedisBarrier.csproj" />
27+
<ProjectReference Include="..\..\src\Dtmworkflow\Dtmworkflow.csproj" />
2728
</ItemGroup>
2829

2930
<ItemGroup>

tests/Dtmgrpc.IntegrationTests/ITTestHelper.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Linq;
55
using System.Threading.Tasks;
6+
using Dtmworkflow;
67
using Xunit.Abstractions;
78
using Xunit.Sdk;
89

@@ -13,6 +14,7 @@ public class ITTestHelper
1314
public static string DTMHttpUrl = "http://localhost:36789";
1415
public static string DTMgRPCUrl = "http://localhost:36790";
1516
public static string BuisgRPCUrl = "localhost:5005";
17+
public static string BuisgRPCUrlWithProtocol = "http://localhost:5005";
1618
private static System.Net.Http.HttpClient _client = new System.Net.Http.HttpClient();
1719

1820
public static async Task<string> GetTranStatus(string gid)
@@ -67,6 +69,13 @@ public static ServiceProvider AddDtmGrpc(int dtmTimout = 10000)
6769
services.AddLogging();
6870
services.AddDtmGrpc(x =>
6971
{
72+
x.DtmUrl = DTMHttpUrl;
73+
x.DtmGrpcUrl = DTMgRPCUrl;
74+
x.DtmTimeout = dtmTimout;
75+
});
76+
services.AddDtmWorkflow(x =>
77+
{
78+
x.DtmUrl = DTMHttpUrl;
7079
x.DtmGrpcUrl = DTMgRPCUrl;
7180
x.DtmTimeout = dtmTimout;
7281
});
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
using System;
3+
using System.Text;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using busi;
7+
using Dtmworkflow;
8+
using Grpc.Net.Client;
9+
using Microsoft.Extensions.Logging;
10+
using Newtonsoft.Json;
11+
using Xunit;
12+
13+
namespace Dtmgrpc.IntegrationTests
14+
{
15+
public class WorkflowGrpcTest
16+
{
17+
[Fact]
18+
public async Task Execute_Http_Should_Succeed()
19+
{
20+
var provider = ITTestHelper.AddDtmGrpc();
21+
var workflowFactory = provider.GetRequiredService<IWorkflowFactory>();
22+
var loggerFactory = provider.GetRequiredService<ILoggerFactory>();
23+
WorkflowGlobalTransaction workflowGlobalTransaction = new WorkflowGlobalTransaction(workflowFactory, loggerFactory);
24+
25+
string wfName1 = $"wf-simple-{Guid.NewGuid().ToString("D")[..8]}";
26+
workflowGlobalTransaction.Register(wfName1, async (workflow, data) => await Task.FromResult("my result"u8.ToArray()));
27+
28+
string gid = wfName1 + Guid.NewGuid().ToString()[..8];
29+
var req = ITTestHelper.GenBusiReq(false, false);
30+
await workflowGlobalTransaction.Execute(wfName1, gid, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(req)), isHttp: true);
31+
32+
string status = await ITTestHelper.GetTranStatus(gid);
33+
Assert.Equal("succeed", status);
34+
}
35+
36+
[Fact]
37+
public async Task Execute_gPRC_Should_Succeed()
38+
{
39+
var provider = ITTestHelper.AddDtmGrpc();
40+
var workflowFactory = provider.GetRequiredService<IWorkflowFactory>();
41+
var loggerFactory = provider.GetRequiredService<ILoggerFactory>();
42+
WorkflowGlobalTransaction workflowGlobalTransaction = new WorkflowGlobalTransaction(workflowFactory, loggerFactory);
43+
44+
string wfName1 = $"wf-simple-{Guid.NewGuid().ToString("D")[..8]}";
45+
workflowGlobalTransaction.Register(wfName1, async (workflow, data) => await Task.FromResult("my result"u8.ToArray()));
46+
47+
string gid = wfName1 + Guid.NewGuid().ToString()[..8];
48+
var req = ITTestHelper.GenBusiReq(false, false);
49+
await workflowGlobalTransaction.Execute(wfName1, gid, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(req)), isHttp: false);
50+
51+
string status = await ITTestHelper.GetTranStatus(gid);
52+
Assert.Equal("succeed", status);
53+
}
54+
55+
[Fact]
56+
public async Task Execute_Success()
57+
{
58+
var provider = ITTestHelper.AddDtmGrpc();
59+
var workflowFactory = provider.GetRequiredService<IWorkflowFactory>();
60+
var loggerFactory = provider.GetRequiredService<ILoggerFactory>();
61+
WorkflowGlobalTransaction workflowGlobalTransaction = new WorkflowGlobalTransaction(workflowFactory, loggerFactory);
62+
63+
Busi.BusiClient busiClient = new Busi.BusiClient(GrpcChannel.ForAddress(ITTestHelper.BuisgRPCUrlWithProtocol));
64+
65+
string wfName1 = $"wf-simple-{Guid.NewGuid().ToString("D")[..8]}";
66+
workflowGlobalTransaction.Register(wfName1, async (workflow, data) =>
67+
{
68+
BusiReq request = JsonConvert.DeserializeObject<BusiReq>(Encoding.UTF8.GetString(data));
69+
workflow.NewBranch().OnRollback(async (barrier) =>
70+
{
71+
await busiClient.TransInRevertAsync(request);
72+
});
73+
await busiClient.TransInAsync(request);
74+
75+
workflow.NewBranch().OnRollback(async (barrier) =>
76+
{
77+
await busiClient.TransOutRevertAsync(request);
78+
});
79+
await busiClient.TransOutAsync(request);
80+
81+
return await Task.FromResult("my result"u8.ToArray());
82+
});
83+
84+
string gid = wfName1 + Guid.NewGuid().ToString()[..8];
85+
var req = ITTestHelper.GenBusiReq(false, false);
86+
byte[] result = await workflowGlobalTransaction.Execute(wfName1, gid, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(req)));
87+
Assert.Equal("my result", Encoding.UTF8.GetString(result));
88+
string status = await ITTestHelper.GetTranStatus(gid);
89+
Assert.Equal("succeed", status);
90+
91+
// again
92+
result = await workflowGlobalTransaction.Execute(wfName1, gid, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(req)));
93+
Assert.Equal("my result", Encoding.UTF8.GetString(result));
94+
status = await ITTestHelper.GetTranStatus(gid);
95+
Assert.Equal("succeed", status);
96+
}
97+
}
98+
}

0 commit comments

Comments
 (0)