Skip to content

Commit a6eb0f2

Browse files
authored
fix(BranchBarrier): fix QueryPrepared method not return real insert exception (#82)
1 parent aee2970 commit a6eb0f2

File tree

2 files changed

+40
-14
lines changed

2 files changed

+40
-14
lines changed

src/DtmCommon/Barrier/BranchBarrier.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -184,21 +184,21 @@ public async Task Call(DbConnection db, Func<Task> busiCall, TransactionScopeOpt
184184

185185
public async Task<string> QueryPrepared(DbConnection db)
186186
{
187-
try
187+
if (db == null) return "db is null";
188+
189+
(int _, Exception insertException) = await DbUtils.InsertBarrier(
190+
db,
191+
this.TransType,
192+
this.Gid,
193+
Constant.Barrier.MSG_BRANCHID,
194+
Constant.TYPE_MSG,
195+
Constant.Barrier.MSG_BARRIER_ID,
196+
Constant.Barrier.MSG_BARRIER_REASON);
197+
198+
if (insertException != null)
188199
{
189-
var tmp = await DbUtils.InsertBarrier(
190-
db,
191-
this.TransType,
192-
this.Gid,
193-
Constant.Barrier.MSG_BRANCHID,
194-
Constant.TYPE_MSG,
195-
Constant.Barrier.MSG_BARRIER_ID,
196-
Constant.Barrier.MSG_BARRIER_REASON);
197-
}
198-
catch (Exception ex)
199-
{
200-
Logger?.LogWarning(ex, "Insert Barrier error, gid={gid}", this.Gid);
201-
return ex.Message;
200+
Logger?.LogWarning(insertException, "Insert Barrier error, gid={gid}", this.Gid);
201+
return insertException.Message;
202202
}
203203

204204
var reason = string.Empty;

tests/Dtmcli.Tests/BranchBarrierTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,5 +178,31 @@ public async void Call_Should_Throw_Duplicated_Exception_When_QueryPrepared_At_F
178178
Assert.Equal(DtmCommon.Constant.ResultDuplicated, ex.Message);
179179
mockBusiCall.Verify(x => x.Invoke(It.IsAny<System.Data.Common.DbTransaction>()), Times.Never);
180180
}
181+
182+
[Fact]
183+
public async void QueryPrepared_InsertException()
184+
{
185+
var branchBarrier = _factory.CreateBranchBarrier("msg", "gid", "bid", "msg");
186+
187+
var connQ = GetDbConnection();
188+
connQ.Mocks.When(cmd => cmd.CommandText.Contains("insert", StringComparison.Ordinal))
189+
.ThrowsException(new Exception("DB account no insert permission"));
190+
connQ.Mocks.When(cmd => cmd.CommandText.Contains("select", StringComparison.OrdinalIgnoreCase))
191+
.ReturnsScalar<string>(cmd => null);
192+
193+
var qRes = await branchBarrier.QueryPrepared(connQ);
194+
Assert.NotEqual("Object reference not set to an instance of an object.", qRes);
195+
Assert.Equal("DB account no insert permission", qRes);
196+
}
197+
198+
[Fact]
199+
public async void QueryPrepared_DbIsNull()
200+
{
201+
var branchBarrier = _factory.CreateBranchBarrier("msg", "gid", "bid", "msg");
202+
203+
var qRes = await branchBarrier.QueryPrepared(db: null);
204+
Assert.NotEqual("Object reference not set to an instance of an object.", qRes);
205+
Assert.Equal("db is null", qRes);
206+
}
181207
}
182208
}

0 commit comments

Comments
 (0)