Skip to content

Commit c6c2127

Browse files
authored
Merge pull request #30 from catcherwong/dtmcommon
DtmCommon And Return value
2 parents f79f14f + ffaf0f1 commit c6c2127

29 files changed

+254
-845
lines changed

src/Dtmcli.Tests/BranchBarrierTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
using Microsoft.Extensions.Primitives;
1010
using Microsoft.Extensions.Logging.Abstractions;
1111
using Microsoft.Extensions.DependencyInjection;
12-
using Dtmcli.DtmImp;
12+
using DtmCommon;
1313

1414
namespace Dtmcli.Tests
1515
{
@@ -57,7 +57,7 @@ public void CreateBranchBarrier_FromQs_Should_ThrowException()
5757

5858
var qs = new Microsoft.AspNetCore.Http.QueryCollection(dict);
5959

60-
Assert.Throws<DtmcliException>(() => _factory.CreateBranchBarrier(qs));
60+
Assert.Throws<DtmException>(() => _factory.CreateBranchBarrier(qs));
6161
}
6262
#endif
6363

@@ -162,20 +162,20 @@ public async void Call_Should_Throw_Duplicated_Exception_When_QueryPrepared_At_F
162162

163163
var connQ = GetDbConnection();
164164
connQ.Mocks.When(cmd => cmd.CommandText.Contains("insert", StringComparison.Ordinal)).ReturnsScalar(cmd => 1);
165-
connQ.Mocks.When(cmd => cmd.CommandText.Contains("select", StringComparison.OrdinalIgnoreCase)).ReturnsScalar(cmd => Constant.Barrier.MSG_BARRIER_REASON);
165+
connQ.Mocks.When(cmd => cmd.CommandText.Contains("select", StringComparison.OrdinalIgnoreCase)).ReturnsScalar(cmd => DtmCommon.Constant.Barrier.MSG_BARRIER_REASON);
166166

167167
// QueryPrepared at first
168168
var qRes = await branchBarrier.QueryPrepared(connQ);
169-
Assert.Equal(Constant.ErrFailure, qRes);
169+
Assert.Equal(DtmCommon.Constant.ResultFailure, qRes);
170170

171171
var connC = GetDbConnection();
172172
connC.Mocks.When(cmd => cmd.Parameters.AsList().Select(x => x.Value).Contains("msg")).ReturnsScalar(cmd => 0);
173173

174174
var mockBusiCall = new Mock<Func<System.Data.Common.DbTransaction, Task<bool>>>();
175175

176176
// Call later
177-
var ex = await Assert.ThrowsAsync<DtmcliException>(async () => await branchBarrier.Call(connC, mockBusiCall.Object));
178-
Assert.Equal(Constant.ResultDuplicated, ex.Message);
177+
var ex = await Assert.ThrowsAsync<DtmDuplicatedException>(async () => await branchBarrier.Call(connC, mockBusiCall.Object));
178+
Assert.Equal(DtmCommon.Constant.ResultDuplicated, ex.Message);
179179
mockBusiCall.Verify(x => x.Invoke(It.IsAny<System.Data.Common.DbTransaction>()), Times.Never);
180180
}
181181
}

src/Dtmcli.Tests/BranchIDGenTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Dtmcli.DtmImp;
1+
using DtmCommon;
22
using System;
33
using Xunit;
44

src/Dtmcli.Tests/DbSpecialTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Dtmcli.DtmImp;
1+
using DtmCommon;
22
using Microsoft.Extensions.DependencyInjection;
33
using Xunit;
44

@@ -42,15 +42,15 @@ public void Test_MsSQL_DbSpecial()
4242

4343
Assert.IsType<SqlServerDBSpecial>(special);
4444
Assert.Equal("insert into a(f) values(@f)", special.GetInsertIgnoreTemplate("a(f) values(@f)", "c"));
45-
Assert.Throws<DtmcliException>(() => special.GetXaSQL("", ""));
45+
Assert.Throws<DtmException>(() => special.GetXaSQL("", ""));
4646
}
4747

4848
[Fact]
4949
public void Test_Other_DbSpecial()
5050
{
5151
var provider = TestHelper.AddDtmCli(db: "other");
5252

53-
var ex = Assert.Throws<DtmcliException>(() => provider.GetRequiredService<DbSpecialDelegate>());
53+
var ex = Assert.Throws<DtmException>(() => provider.GetRequiredService<DbSpecialDelegate>());
5454
Assert.Equal("unknown db type 'other'", ex.Message);
5555
}
5656
}

src/Dtmcli.Tests/MsgTests.cs

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Apps72.Dev.Data.DbMocker;
2+
using DtmCommon;
23
using Microsoft.Extensions.DependencyInjection;
34
using Moq;
45
using System;
@@ -53,18 +54,17 @@ public async void Submit_Should_Succeed()
5354
{ "bh2", "456" },
5455
});
5556

56-
var prepareRes = await msg.Prepare(busi + "/query");
57-
Assert.True(prepareRes);
57+
await msg.Prepare(busi + "/query");
58+
await msg.Submit();
5859

59-
var submitRes = await msg.Submit();
60-
Assert.True(submitRes);
60+
Assert.True(true);
6161
}
6262

6363
[Fact]
6464
public async void DoAndSubmitDB_Should_Throw_Exception_When_Transbase_InValid()
6565
{
6666
var dtmClient = new Mock<IDtmClient>();
67-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
67+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
6868

6969
var gid = string.Empty;
7070
var msg = new Msg(dtmClient.Object, _branchBarrierFactory, gid);
@@ -75,14 +75,14 @@ public async void DoAndSubmitDB_Should_Throw_Exception_When_Transbase_InValid()
7575

7676
var db = new MockDbConnection();
7777

78-
await Assert.ThrowsAsync<DtmcliException>(async () => await msg.DoAndSubmitDB(busi + "/query", db, x => Task.FromResult<bool>(true)));
78+
await Assert.ThrowsAsync<DtmException>(async () => await msg.DoAndSubmitDB(busi + "/query", db, x => Task.FromResult<bool>(true)));
7979
}
8080

8181
[Fact]
8282
public async void DoAndSubmitDB_Should_Not_Call_Barrier_When_Prepare_Fail()
8383
{
8484
var dtmClient = new Mock<IDtmClient>();
85-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
85+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
8686

8787
var gid = "TestMsgNormal";
8888
var msg = new Msg(dtmClient.Object, _branchBarrierFactory, gid);
@@ -94,18 +94,16 @@ public async void DoAndSubmitDB_Should_Not_Call_Barrier_When_Prepare_Fail()
9494
var db = new MockDbConnection();
9595
var mockBusiCall = new Mock<Func<DbTransaction, Task<bool>>>();
9696

97-
var res = await msg.DoAndSubmitDB(busi + "/query", db, x => Task.FromResult(true));
98-
99-
Assert.False(res);
97+
await Assert.ThrowsAnyAsync<Exception>(async () => await msg.DoAndSubmitDB(busi + "/query", db, x => Task.FromResult(true)));
10098
mockBusiCall.Verify(x => x.Invoke(It.IsAny<DbTransaction>()), Times.Never);
10199
}
102100

103101
[Fact]
104102
public async void DoAndSubmitDB_Should_Succeed()
105103
{
106104
var dtmClient = new Mock<IDtmClient>();
107-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
108-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_SUBMIT, true);
105+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
106+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_SUBMIT, false);
109107

110108
var gid = "TestMsgNormal";
111109
var msg = new Msg(dtmClient.Object, _branchBarrierFactory, gid);
@@ -121,18 +119,17 @@ public async void DoAndSubmitDB_Should_Succeed()
121119
var mockBusiCall = new Mock<Func<DbTransaction, Task<bool>>>();
122120
mockBusiCall.Setup(x => x.Invoke(It.IsAny<DbTransaction>())).Returns(Task.FromResult(true));
123121

124-
var res = await msg.DoAndSubmitDB(busi + "/query", db, mockBusiCall.Object);
122+
await msg.DoAndSubmitDB(busi + "/query", db, mockBusiCall.Object);
125123

126-
Assert.True(res);
127124
mockBusiCall.Verify(x => x.Invoke(It.IsAny<DbTransaction>()), Times.Once);
128125
}
129126

130127
[Fact]
131128
public async void DoAndSubmitDB_Should_Abort_When_BusiCall_ThrowExeption_With_ResultFailure()
132129
{
133130
var dtmClient = new Mock<IDtmClient>();
134-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
135-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_ABORT, true);
131+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
132+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_ABORT, false);
136133

137134
var gid = "TestMsgNormal";
138135
var msg = new Msg(dtmClient.Object, _branchBarrierFactory, gid);
@@ -146,21 +143,19 @@ public async void DoAndSubmitDB_Should_Abort_When_BusiCall_ThrowExeption_With_Re
146143
db.Mocks.When(x => x.CommandText.Contains("select", StringComparison.OrdinalIgnoreCase)).ReturnsScalar(cmd => "rollback");
147144

148145
var mockBusiCall = new Mock<Func<DbTransaction, Task>>();
149-
mockBusiCall.Setup(x => x.Invoke(It.IsAny<DbTransaction>())).Throws(new Exception(Constant.ResultFailure));
150-
151-
var res = await msg.DoAndSubmitDB(busi + "/query", db, mockBusiCall.Object);
146+
mockBusiCall.Setup(x => x.Invoke(It.IsAny<DbTransaction>())).Throws(new DtmFailureException());
152147

153-
Assert.False(res);
154-
dtmClient.Verify(x => x.TransCallDtm(It.IsAny<DtmImp.TransBase>(), It.IsAny<object>(), Constant.Request.OPERATION_ABORT, It.IsAny<CancellationToken>()), Times.Once);
148+
await Assert.ThrowsAsync<DtmFailureException>(async () => await msg.DoAndSubmitDB(busi + "/query", db, mockBusiCall.Object));
149+
dtmClient.Verify(x => x.TransCallDtm(It.IsAny<TransBase>(), It.IsAny<object>(), Constant.Request.OPERATION_ABORT, It.IsAny<CancellationToken>()), Times.Once);
155150
}
156151

157152
[Fact]
158153
public async void DoAndSubmitDB_Should_QueryPrepared_When_BusiCall_ThrowExeption_Without_ResultFailure()
159154
{
160155
var dtmClient = new Mock<IDtmClient>();
161-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
162-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_ABORT, true);
163-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_SUBMIT, true);
156+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
157+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_ABORT, false);
158+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_SUBMIT, false);
164159
TestHelper.MockTransRequestBranch(dtmClient, System.Net.HttpStatusCode.OK);
165160

166161
var gid = "TestMsgNormal";
@@ -177,10 +172,8 @@ public async void DoAndSubmitDB_Should_QueryPrepared_When_BusiCall_ThrowExeption
177172
var mockBusiCall = new Mock<Func<DbTransaction, Task<bool>>>();
178173
mockBusiCall.Setup(x => x.Invoke(It.IsAny<DbTransaction>())).Throws(new Exception("ex"));
179174

180-
var res = await msg.DoAndSubmitDB(busi + "/query", db, mockBusiCall.Object);
181-
182-
Assert.False(res);
183-
dtmClient.Verify(x => x.TransRequestBranch(It.IsAny<DtmImp.TransBase>(), It.IsAny<HttpMethod>(), It.IsAny<object>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<CancellationToken>()), Times.Once);
175+
await Assert.ThrowsAsync<Exception>(async () => await msg.DoAndSubmitDB(busi + "/query", db, mockBusiCall.Object));
176+
dtmClient.Verify(x => x.TransRequestBranch(It.IsAny<TransBase>(), It.IsAny<HttpMethod>(), It.IsAny<object>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<CancellationToken>()), Times.Once);
184177
}
185178

186179
public class MsgMockHttpMessageHandler : DelegatingHandler
@@ -193,7 +186,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
193186
{
194187
var str = await request.Content?.ReadAsStringAsync() ?? "";
195188

196-
var transBase = System.Text.Json.JsonSerializer.Deserialize<DtmImp.TransBase>(str);
189+
var transBase = System.Text.Json.JsonSerializer.Deserialize<TransBase>(str);
197190

198191
Assert.Equal("TestMsgNormal", transBase.Gid);
199192
Assert.Equal("msg", transBase.TransType);

src/Dtmcli.Tests/SagaTests.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Moq;
1+
using DtmCommon;
2+
using Moq;
3+
using System;
24
using System.Collections.Generic;
35
using System.Net.Http;
46
using System.Threading;
@@ -47,6 +49,24 @@ public async void Submit_Should_Succeed()
4749
await sage.Submit();
4850
}
4951

52+
[Fact]
53+
public async void Submit_Should_ThrowException()
54+
{
55+
var dtmClient = new Mock<IDtmClient>();
56+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_SUBMIT, true);
57+
58+
var gid = "TestSagaNormal";
59+
var saga = new Saga(dtmClient.Object, gid);
60+
61+
var busi = "http://localhost:8081/api/busi";
62+
var req = new { Amount = 30 };
63+
64+
saga.Add(string.Concat(busi, "/TransOut"), string.Concat(busi, "/TransOutRevert"), req)
65+
.Add(string.Concat(busi, "/TransIn"), string.Concat(busi, "/TransInRevert"), req);
66+
67+
await Assert.ThrowsAnyAsync<Exception>(async () => await saga.Submit());
68+
}
69+
5070
public class SageMockHttpMessageHandler : DelegatingHandler
5171
{
5272
public SageMockHttpMessageHandler()
@@ -57,7 +77,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
5777
{
5878
var str = await request.Content?.ReadAsStringAsync() ?? "";
5979

60-
var transBase = System.Text.Json.JsonSerializer.Deserialize<DtmImp.TransBase>(str);
80+
var transBase = System.Text.Json.JsonSerializer.Deserialize<TransBase>(str);
6181

6282
/*
6383
{

src/Dtmcli.Tests/ServiceCollectionExtensionsTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.Extensions.Configuration;
1+
using DtmCommon;
2+
using Microsoft.Extensions.Configuration;
23
using Microsoft.Extensions.DependencyInjection;
34
using Microsoft.Extensions.Options;
45
using System.Collections.Generic;

src/Dtmcli.Tests/TccTests.cs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Net.Http;
33
using System.Threading;
44
using System.Threading.Tasks;
5+
using DtmCommon;
56
using Microsoft.Extensions.Logging.Abstractions;
67
using Moq;
78
using Xunit;
@@ -14,8 +15,8 @@ public class TccTests
1415
public async void Execute_Should_Submit()
1516
{
1617
var dtmClient = new Mock<IDtmClient>();
17-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
18-
TestHelper.MockTransRegisterBranch(dtmClient, Constant.Request.OPERATION_REGISTERBRANCH, true);
18+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
19+
TestHelper.MockTransRegisterBranch(dtmClient, Constant.Request.OPERATION_REGISTERBRANCH, false);
1920
TestHelper.MockTransRequestBranch(dtmClient, System.Net.HttpStatusCode.OK);
2021

2122
var gid = "tcc_gid";
@@ -33,9 +34,9 @@ public async void Execute_Should_Submit()
3334
public async void Execute_Should_Abort_When_CallBranch_With_Old_Ver_Exception()
3435
{
3536
var dtmClient = new Mock<IDtmClient>();
36-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
37-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_ABORT, true);
38-
TestHelper.MockTransRegisterBranch(dtmClient, Constant.Request.OPERATION_REGISTERBRANCH, true);
37+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
38+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_ABORT, false);
39+
TestHelper.MockTransRegisterBranch(dtmClient, Constant.Request.OPERATION_REGISTERBRANCH, false);
3940
TestHelper.MockTransRequestBranch(dtmClient, System.Net.HttpStatusCode.OK, "FAILURE");
4041

4142
var gid = "tcc_gid";
@@ -47,16 +48,16 @@ public async void Execute_Should_Abort_When_CallBranch_With_Old_Ver_Exception()
4748
});
4849

4950
Assert.Empty(res);
50-
dtmClient.Verify(x => x.TransCallDtm(It.IsAny<DtmImp.TransBase>(), It.IsAny<object>(), Constant.Request.OPERATION_ABORT, It.IsAny<CancellationToken>()), Times.Once);
51+
dtmClient.Verify(x => x.TransCallDtm(It.IsAny<TransBase>(), It.IsAny<object>(), Constant.Request.OPERATION_ABORT, It.IsAny<CancellationToken>()), Times.Once);
5152
}
5253

5354
[Fact]
5455
public async void Execute_Should_Abort_When_CallBranch_With_New_Ver_Exception()
5556
{
5657
var dtmClient = new Mock<IDtmClient>();
57-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
58-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_ABORT, true);
59-
TestHelper.MockTransRegisterBranch(dtmClient, Constant.Request.OPERATION_REGISTERBRANCH, true);
58+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
59+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_ABORT, false);
60+
TestHelper.MockTransRegisterBranch(dtmClient, Constant.Request.OPERATION_REGISTERBRANCH, false);
6061
TestHelper.MockTransRequestBranch(dtmClient, System.Net.HttpStatusCode.BadRequest);
6162

6263
var gid = "tcc_gid";
@@ -68,15 +69,15 @@ public async void Execute_Should_Abort_When_CallBranch_With_New_Ver_Exception()
6869
});
6970

7071
Assert.Empty(res);
71-
dtmClient.Verify(x => x.TransCallDtm(It.IsAny<DtmImp.TransBase>(), It.IsAny<object>(), Constant.Request.OPERATION_ABORT, It.IsAny<CancellationToken>()), Times.Once);
72+
dtmClient.Verify(x => x.TransCallDtm(It.IsAny<TransBase>(), It.IsAny<object>(), Constant.Request.OPERATION_ABORT, It.IsAny<CancellationToken>()), Times.Once);
7273
}
7374

7475
[Fact]
7576
public async void Set_TransOptions_Should_Succeed()
7677
{
7778
var dtmClient = new Mock<IDtmClient>();
78-
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, true);
79-
TestHelper.MockTransRegisterBranch(dtmClient, Constant.Request.OPERATION_REGISTERBRANCH, true);
79+
TestHelper.MockTransCallDtm(dtmClient, Constant.Request.OPERATION_PREPARE, false);
80+
TestHelper.MockTransRegisterBranch(dtmClient, Constant.Request.OPERATION_REGISTERBRANCH, false);
8081
TestHelper.MockTransRequestBranch(dtmClient, System.Net.HttpStatusCode.OK);
8182

8283
var gid = "tcc_gid";

0 commit comments

Comments
 (0)