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