@@ -255,8 +255,114 @@ public async void Commit_Should_Be_Executed()
255
255
rollBackFunc . Verify ( x => x . Invoke ( It . IsAny < BranchBarrier > ( ) ) , Times . Never ) ;
256
256
commitFunc . Verify ( x => x . Invoke ( It . IsAny < BranchBarrier > ( ) ) , Times . Once ) ;
257
257
}
258
+
259
+ [ Fact ]
260
+ public async Task Execute_Result_Should_Be_WfFunc2 ( )
261
+ {
262
+ var factory = new Mock < IWorkflowFactory > ( ) ;
263
+ var httpClient = new Mock < IDtmClient > ( ) ;
264
+ var grpcClient = new Mock < IDtmgRPCClient > ( ) ;
265
+ var httpBb = new Mock < Dtmcli . IBranchBarrierFactory > ( ) ;
266
+
267
+ SetupPrepareWorkflow ( httpClient , DtmCommon . Constant . StatusPrepared , null ) ;
268
+ var wf = SetupWorkFlow ( httpClient , grpcClient , httpBb ) ;
269
+
270
+ factory . Setup ( x => x . NewWorkflow ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < byte [ ] > ( ) , It . IsAny < bool > ( ) ) ) . Returns ( wf . Object ) ;
271
+
272
+ var wfgt = new WorkflowGlobalTransaction ( factory . Object , NullLoggerFactory . Instance ) ;
273
+
274
+ var wfName = nameof ( Execute_Result_Should_Be_WfFunc2 ) ;
275
+ var gid = Guid . NewGuid ( ) . ToString ( "N" ) ;
276
+
277
+ wfgt . Register ( wfName , ( workflow , data ) => Task . FromResult ( Encoding . UTF8 . GetBytes ( "return value from WfFunc2" ) ) ) ;
278
+
279
+ var req = JsonSerializer . Serialize ( new { userId = "1" , amount = 30 } ) ;
280
+ var res = await wfgt . Execute ( wfName , gid , Encoding . UTF8 . GetBytes ( req ) , true ) ;
281
+
282
+ Assert . Equal ( "return value from WfFunc2" , Encoding . UTF8 . GetString ( res ) ) ;
283
+ }
284
+
285
+ [ Fact ]
286
+ public async Task Execute_Result_Should_Be_Previous ( )
287
+ {
288
+ var factory = new Mock < IWorkflowFactory > ( ) ;
289
+ var httpClient = new Mock < IDtmClient > ( ) ;
290
+ var grpcClient = new Mock < IDtmgRPCClient > ( ) ;
291
+ var httpBb = new Mock < Dtmcli . IBranchBarrierFactory > ( ) ;
292
+
293
+ SetupPrepareWorkflow ( httpClient , DtmCommon . Constant . StatusSucceed , "return value from previous" ) ;
294
+ var wf = SetupWorkFlow ( httpClient , grpcClient , httpBb ) ;
295
+
296
+ factory . Setup ( x => x . NewWorkflow ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < byte [ ] > ( ) , It . IsAny < bool > ( ) ) ) . Returns ( wf . Object ) ;
297
+
298
+ var wfgt = new WorkflowGlobalTransaction ( factory . Object , NullLoggerFactory . Instance ) ;
299
+
300
+ var wfName = nameof ( Execute_Result_Should_Be_Previous ) ;
301
+ var gid = Guid . NewGuid ( ) . ToString ( "N" ) ;
302
+
303
+ wfgt . Register ( wfName , ( workflow , data ) => Task . FromResult ( Encoding . UTF8 . GetBytes ( "return value from WfFunc2" ) ) ) ;
304
+
305
+ var req = JsonSerializer . Serialize ( new { userId = "1" , amount = 30 } ) ;
306
+ var res = await wfgt . Execute ( wfName , gid , Encoding . UTF8 . GetBytes ( req ) , true ) ;
307
+
308
+ Assert . Equal ( "return value from previous" , Encoding . UTF8 . GetString ( res ) ) ;
309
+ }
310
+
311
+ [ Fact ]
312
+ public async Task Execute_Again_Result_Should_Be_Previous ( )
313
+ {
314
+ var factory = new Mock < IWorkflowFactory > ( ) ;
315
+ var httpClient1 = new Mock < IDtmClient > ( ) ;
316
+ var httpClient2 = new Mock < IDtmClient > ( ) ;
317
+ var grpcClient = new Mock < IDtmgRPCClient > ( ) ;
318
+ var httpBb = new Mock < Dtmcli . IBranchBarrierFactory > ( ) ;
319
+
320
+ // first
321
+ SetupPrepareWorkflow ( httpClient1 , DtmCommon . Constant . StatusPrepared , null ) ;
322
+ var wf = SetupWorkFlow ( httpClient1 , grpcClient , httpBb ) ;
323
+ factory . Setup ( x => x . NewWorkflow ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < byte [ ] > ( ) , It . IsAny < bool > ( ) ) ) . Returns ( wf . Object ) ;
324
+ var wfgt = new WorkflowGlobalTransaction ( factory . Object , NullLoggerFactory . Instance ) ;
325
+ var wfName = nameof ( Execute_Again_Result_Should_Be_Previous ) ;
326
+ var gid = Guid . NewGuid ( ) . ToString ( "N" ) ;
327
+ wfgt . Register ( wfName , ( workflow , data ) => Task . FromResult ( Encoding . UTF8 . GetBytes ( "return value from WfFunc2" ) ) ) ;
328
+ var req = JsonSerializer . Serialize ( new { userId = "1" , amount = 30 } ) ;
329
+ var res = await wfgt . Execute ( wfName , gid , Encoding . UTF8 . GetBytes ( req ) , true ) ;
330
+ Assert . Equal ( "return value from WfFunc2" , Encoding . UTF8 . GetString ( res ) ) ;
331
+
332
+ // again
333
+ SetupPrepareWorkflow ( httpClient2 , DtmCommon . Constant . StatusSucceed , "return value from previous" ) ;
334
+ wf = SetupWorkFlow ( httpClient2 , grpcClient , httpBb ) ;
335
+ factory . Setup ( x => x . NewWorkflow ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < byte [ ] > ( ) , It . IsAny < bool > ( ) ) ) . Returns ( wf . Object ) ;
336
+ wfgt = new WorkflowGlobalTransaction ( factory . Object , NullLoggerFactory . Instance ) ;
337
+ gid = Guid . NewGuid ( ) . ToString ( "N" ) ;
338
+ wfgt . Register ( wfName , ( workflow , data ) => Task . FromResult ( Encoding . UTF8 . GetBytes ( "return value from WfFunc2" ) ) ) ;
339
+ req = JsonSerializer . Serialize ( new { userId = "1" , amount = 30 } ) ;
340
+ res = await wfgt . Execute ( wfName , gid , Encoding . UTF8 . GetBytes ( req ) , true ) ;
341
+ Assert . Equal ( "return value from previous" , Encoding . UTF8 . GetString ( res ) ) ;
342
+ }
343
+
344
+ [ Fact ]
345
+ public async Task Execute_Again_Result_StringEmpty ( )
346
+ {
347
+ var factory = new Mock < IWorkflowFactory > ( ) ;
348
+ var httpClient = new Mock < IDtmClient > ( ) ;
349
+ var grpcClient = new Mock < IDtmgRPCClient > ( ) ;
350
+ var httpBb = new Mock < Dtmcli . IBranchBarrierFactory > ( ) ;
351
+
352
+ // again
353
+ SetupPrepareWorkflow ( httpClient , DtmCommon . Constant . StatusSucceed , null ) ;
354
+ var wf = SetupWorkFlow ( httpClient , grpcClient , httpBb ) ;
355
+ factory . Setup ( x => x . NewWorkflow ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < byte [ ] > ( ) , It . IsAny < bool > ( ) ) ) . Returns ( wf . Object ) ;
356
+ var wfgt = new WorkflowGlobalTransaction ( factory . Object , NullLoggerFactory . Instance ) ;
357
+ var wfName = nameof ( Execute_Again_Result_StringEmpty ) ;
358
+ var gid = Guid . NewGuid ( ) . ToString ( "N" ) ;
359
+ wfgt . Register ( wfName , ( workflow , data ) => Task . FromResult ( Encoding . UTF8 . GetBytes ( "return value from WfFunc2" ) ) ) ;
360
+ var req = JsonSerializer . Serialize ( new { userId = "1" , amount = 30 } ) ;
361
+ var res = await wfgt . Execute ( wfName , gid , Encoding . UTF8 . GetBytes ( req ) , true ) ;
362
+ Assert . Null ( res ) ;
363
+ }
258
364
259
- private void SetupPrepareWorkflow ( Mock < IDtmClient > httpClient , string status , string result , List < DtmProgressDto > progressDtos = null )
365
+ private void SetupPrepareWorkflow ( Mock < IDtmClient > httpClient , string status , string ? result , List < DtmProgressDto > progressDtos = null )
260
366
{
261
367
var httpResp = new HttpResponseMessage ( HttpStatusCode . OK ) ;
262
368
httpResp . Content = new StringContent ( JsonSerializer . Serialize (
@@ -265,9 +371,9 @@ private void SetupPrepareWorkflow(Mock<IDtmClient> httpClient, string status, st
265
371
Transaction = new DtmTransactionDto
266
372
{
267
373
Status = status ,
268
- Result = Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( result ) )
374
+ Result = result == null ? null : Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( result ) )
269
375
} ,
270
- Progresses = progressDtos
376
+ Progresses = progressDtos ?? [ ]
271
377
} ) ) ;
272
378
httpClient . Setup ( x => x . PrepareWorkflow ( It . IsAny < DtmCommon . TransBase > ( ) , It . IsAny < CancellationToken > ( ) ) ) . Returns ( Task . FromResult ( httpResp ) ) ;
273
379
}
0 commit comments