|
|
|
@ -8,6 +8,7 @@ import ( |
|
|
|
|
|
|
|
"bou.ke/monkey" |
|
|
|
"github.com/dtm-labs/dtm/dtmcli/dtmimp" |
|
|
|
"github.com/dtm-labs/dtm/dtmcli/logger" |
|
|
|
"github.com/dtm-labs/dtm/dtmgrpc" |
|
|
|
"github.com/dtm-labs/dtm/test/busi" |
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
@ -48,7 +49,30 @@ func TestMsgGrpcPrepareAndSubmitCommitAfterFailed(t *testing.T) { |
|
|
|
}) |
|
|
|
return err |
|
|
|
}) |
|
|
|
assert.Error(t, err) |
|
|
|
cronTransOnceForwardNow(t, gid, 180) |
|
|
|
assert.Nil(t, err) |
|
|
|
waitTransProcessed(gid) |
|
|
|
assertNotSameBalance(t, before, "mysql") |
|
|
|
} |
|
|
|
|
|
|
|
func TestMsgGrpcPrepareAndSubmitCommitFailed(t *testing.T) { |
|
|
|
if conf.Store.IsDB() { // cannot patch tx.Commit, because Prepare also do Commit
|
|
|
|
return |
|
|
|
} |
|
|
|
before := getBeforeBalances("mysql") |
|
|
|
gid := dtmimp.GetFuncName() |
|
|
|
req := busi.GenBusiReq(30, false, false) |
|
|
|
msg := dtmgrpc.NewMsgGrpc(DtmGrpcServer, gid). |
|
|
|
Add(busi.Busi+"/SagaBTransIn", req) |
|
|
|
var g *monkey.PatchGuard |
|
|
|
err := msg.PrepareAndSubmit(busi.BusiGrpc+"/busi.Busi/QueryPreparedB", dbGet().ToSQLDB(), func(tx *sql.Tx) error { |
|
|
|
g = monkey.PatchInstanceMethod(reflect.TypeOf(tx), "Commit", func(tx *sql.Tx) error { |
|
|
|
logger.Debugf("tx.Commit rollback and return error in test") |
|
|
|
_ = tx.Rollback() |
|
|
|
return errors.New("test error for patch") |
|
|
|
}) |
|
|
|
return busi.SagaAdjustBalance(tx, busi.TransOutUID, -int(req.Amount), "SUCCESS") |
|
|
|
}) |
|
|
|
g.Unpatch() |
|
|
|
assert.Error(t, err) |
|
|
|
assertSameBalance(t, before, "mysql") |
|
|
|
} |
|
|
|
|