Browse Source

rename status and fix TransOutBTry

pull/52/head
yedf2 5 years ago
parent
commit
7cd5863181
  1. 4
      examples/http_saga_barrier.go
  2. 4
      examples/http_tcc_barrier.go
  3. 7
      test/dtmsvr_test.go
  4. 16
      test/grpc_msg_test.go
  5. 7
      test/grpc_saga_barrier_test.go
  6. 16
      test/grpc_saga_test.go
  7. 4
      test/grpc_tcc_test.go
  8. 6
      test/grpc_xa_test.go
  9. 24
      test/msg_test.go
  10. 29
      test/saga_barrier_test.go
  11. 5
      test/saga_compatible_test.go
  12. 38
      test/saga_concurrent_test.go
  13. 32
      test/saga_options_test.go
  14. 18
      test/saga_test.go
  15. 28
      test/tcc_barrier_test.go
  16. 18
      test/tcc_test.go
  17. 14
      test/types.go
  18. 8
      test/xa_test.go

4
examples/http_saga_barrier.go

@ -53,8 +53,8 @@ func sagaBarrierTransInCompensate(c *gin.Context) (interface{}, error) {
func sagaBarrierTransOut(c *gin.Context) (interface{}, error) { func sagaBarrierTransOut(c *gin.Context) (interface{}, error) {
req := reqFrom(c) req := reqFrom(c)
if req.TransInResult != "" { if req.TransOutResult != "" {
return req.TransInResult, nil return req.TransOutResult, nil
} }
barrier := MustBarrierFromGin(c) barrier := MustBarrierFromGin(c)
return dtmcli.MapSuccess, barrier.Call(txGet(), func(db dtmcli.DB) error { return dtmcli.MapSuccess, barrier.Call(txGet(), func(db dtmcli.DB) error {

4
examples/http_tcc_barrier.go

@ -81,8 +81,8 @@ func tccBarrierTransInCancel(c *gin.Context) (interface{}, error) {
func tccBarrierTransOutTry(c *gin.Context) (interface{}, error) { func tccBarrierTransOutTry(c *gin.Context) (interface{}, error) {
req := reqFrom(c) req := reqFrom(c)
if req.TransInResult != "" { if req.TransOutResult != "" {
return req.TransInResult, nil return req.TransOutResult, nil
} }
return dtmcli.MapSuccess, MustBarrierFromGin(c).Call(txGet(), func(db dtmcli.DB) error { return dtmcli.MapSuccess, MustBarrierFromGin(c).Call(txGet(), func(db dtmcli.DB) error {
return adjustTrading(db, transOutUID, -req.Amount) return adjustTrading(db, transOutUID, -req.Amount)

7
test/dtmsvr_test.go

@ -7,7 +7,6 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/yedf/dtm/common" "github.com/yedf/dtm/common"
"github.com/yedf/dtm/dtmcli"
"github.com/yedf/dtm/dtmcli/dtmimp" "github.com/yedf/dtm/dtmcli/dtmimp"
"github.com/yedf/dtm/dtmsvr" "github.com/yedf/dtm/dtmsvr"
"github.com/yedf/dtm/examples" "github.com/yedf/dtm/examples"
@ -37,7 +36,7 @@ func getBranchesStatus(gid string) []string {
func assertSucceed(t *testing.T, gid string) { func assertSucceed(t *testing.T, gid string) {
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(gid)) assert.Equal(t, StatusSucceed, getTransStatus(gid))
} }
func TestUpdateBranchAsync(t *testing.T) { func TestUpdateBranchAsync(t *testing.T) {
@ -48,7 +47,7 @@ func TestUpdateBranchAsync(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
time.Sleep(dtmsvr.UpdateBranchAsyncInterval) time.Sleep(dtmsvr.UpdateBranchAsyncInterval)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
common.DtmConfig.UpdateBranchSync = 1 common.DtmConfig.UpdateBranchSync = 1
} }

16
test/grpc_msg_test.go

@ -16,7 +16,7 @@ func TestGrpcMsgNormal(t *testing.T) {
err := msg.Submit() err := msg.Submit()
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(msg.Gid) waitTransProcessed(msg.Gid)
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(msg.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(msg.Gid))
} }
func TestGrpcMsgOngoingSuccess(t *testing.T) { func TestGrpcMsgOngoingSuccess(t *testing.T) {
@ -25,25 +25,25 @@ func TestGrpcMsgOngoingSuccess(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultOngoing)
cronTransOnceForwardNow(180) cronTransOnceForwardNow(180)
assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) assert.Equal(t, StatusPrepared, getTransStatus(msg.Gid))
examples.MainSwitch.TransInResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransInResult.SetOnce(dtmcli.ResultOngoing)
cronTransOnceForwardNow(180) cronTransOnceForwardNow(180)
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(msg.Gid)) assert.Equal(t, StatusSubmitted, getTransStatus(msg.Gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(msg.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(msg.Gid))
} }
func TestGrpcMsgOngoingFailed(t *testing.T) { func TestGrpcMsgOngoingFailed(t *testing.T) {
msg := genGrpcMsg(dtmimp.GetFuncName()) msg := genGrpcMsg(dtmimp.GetFuncName())
msg.Prepare("") msg.Prepare("")
assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) assert.Equal(t, StatusPrepared, getTransStatus(msg.Gid))
examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultOngoing)
cronTransOnceForwardNow(180) cronTransOnceForwardNow(180)
assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) assert.Equal(t, StatusPrepared, getTransStatus(msg.Gid))
examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultFailure) examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultFailure)
cronTransOnceForwardNow(180) cronTransOnceForwardNow(180)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(msg.Gid)) assert.Equal(t, []string{StatusPrepared, StatusPrepared}, getBranchesStatus(msg.Gid))
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(msg.Gid)) assert.Equal(t, StatusFailed, getTransStatus(msg.Gid))
} }
func genGrpcMsg(gid string) *dtmgrpc.MsgGrpc { func genGrpcMsg(gid string) *dtmgrpc.MsgGrpc {

7
test/grpc_saga_barrier_test.go

@ -4,7 +4,6 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/yedf/dtm/dtmcli"
"github.com/yedf/dtm/dtmcli/dtmimp" "github.com/yedf/dtm/dtmcli/dtmimp"
"github.com/yedf/dtm/dtmgrpc" "github.com/yedf/dtm/dtmgrpc"
"github.com/yedf/dtm/examples" "github.com/yedf/dtm/examples"
@ -18,7 +17,7 @@ func TestGrpcSagaBarrierNormal(t *testing.T) {
err := saga.Submit() err := saga.Submit()
e2p(err) e2p(err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
} }
func TestGrpcSagaBarrierRollback(t *testing.T) { func TestGrpcSagaBarrierRollback(t *testing.T) {
@ -29,6 +28,6 @@ func TestGrpcSagaBarrierRollback(t *testing.T) {
err := saga.Submit() err := saga.Submit()
e2p(err) e2p(err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusSucceed, dtmcli.StatusSucceed, dtmcli.StatusFailed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid))
} }

16
test/grpc_saga_test.go

@ -14,8 +14,8 @@ func TestGrpcSagaNormal(t *testing.T) {
saga := genSagaGrpc(dtmimp.GetFuncName(), false, false) saga := genSagaGrpc(dtmimp.GetFuncName(), false, false)
saga.Submit() saga.Submit()
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
} }
func TestGrpcSagaCommittedOngoing(t *testing.T) { func TestGrpcSagaCommittedOngoing(t *testing.T) {
@ -23,10 +23,10 @@ func TestGrpcSagaCommittedOngoing(t *testing.T) {
examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing)
saga.Submit() saga.Submit()
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusPrepared, StatusPrepared, StatusPrepared}, getBranchesStatus(saga.Gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
} }
func TestGrpcSagaRollback(t *testing.T) { func TestGrpcSagaRollback(t *testing.T) {
@ -34,10 +34,10 @@ func TestGrpcSagaRollback(t *testing.T) {
examples.MainSwitch.TransOutRevertResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransOutRevertResult.SetOnce(dtmcli.ResultOngoing)
saga.Submit() saga.Submit()
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, dtmcli.StatusAborting, getTransStatus(saga.Gid)) assert.Equal(t, StatusAborting, getTransStatus(saga.Gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusSucceed, dtmcli.StatusSucceed, dtmcli.StatusFailed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid))
} }
func genSagaGrpc(gid string, outFailed bool, inFailed bool) *dtmgrpc.SagaGrpc { func genSagaGrpc(gid string, outFailed bool, inFailed bool) *dtmgrpc.SagaGrpc {

4
test/grpc_tcc_test.go

@ -58,7 +58,7 @@ func TestGrpcTccRollback(t *testing.T) {
}) })
assert.Error(t, err) assert.Error(t, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, dtmcli.StatusAborting, getTransStatus(gid)) assert.Equal(t, StatusAborting, getTransStatus(gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(gid)) assert.Equal(t, StatusFailed, getTransStatus(gid))
} }

6
test/grpc_xa_test.go

@ -49,7 +49,7 @@ func TestGrpcXaNormal(t *testing.T) {
}) })
assert.Equal(t, nil, err) assert.Equal(t, nil, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(gid))
} }
func TestGrpcXaRollback(t *testing.T) { func TestGrpcXaRollback(t *testing.T) {
@ -67,6 +67,6 @@ func TestGrpcXaRollback(t *testing.T) {
}) })
assert.Error(t, err) assert.Error(t, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusPrepared}, getBranchesStatus(gid)) assert.Equal(t, []string{StatusSucceed, StatusPrepared}, getBranchesStatus(gid))
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(gid)) assert.Equal(t, StatusFailed, getTransStatus(gid))
} }

24
test/msg_test.go

@ -12,38 +12,38 @@ import (
func TestMsgNormal(t *testing.T) { func TestMsgNormal(t *testing.T) {
msg := genMsg(dtmimp.GetFuncName()) msg := genMsg(dtmimp.GetFuncName())
msg.Submit() msg.Submit()
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(msg.Gid)) assert.Equal(t, StatusSubmitted, getTransStatus(msg.Gid))
waitTransProcessed(msg.Gid) waitTransProcessed(msg.Gid)
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusSucceed}, getBranchesStatus(msg.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed}, getBranchesStatus(msg.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(msg.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(msg.Gid))
} }
func TestMsgOngoingSuccess(t *testing.T) { func TestMsgOngoingSuccess(t *testing.T) {
msg := genMsg(dtmimp.GetFuncName()) msg := genMsg(dtmimp.GetFuncName())
msg.Prepare("") msg.Prepare("")
assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) assert.Equal(t, StatusPrepared, getTransStatus(msg.Gid))
examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultOngoing)
cronTransOnceForwardNow(180) cronTransOnceForwardNow(180)
assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) assert.Equal(t, StatusPrepared, getTransStatus(msg.Gid))
examples.MainSwitch.TransInResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransInResult.SetOnce(dtmcli.ResultOngoing)
cronTransOnceForwardNow(180) cronTransOnceForwardNow(180)
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(msg.Gid)) assert.Equal(t, StatusSubmitted, getTransStatus(msg.Gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusSucceed}, getBranchesStatus(msg.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed}, getBranchesStatus(msg.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(msg.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(msg.Gid))
} }
func TestMsgOngoingFailed(t *testing.T) { func TestMsgOngoingFailed(t *testing.T) {
msg := genMsg(dtmimp.GetFuncName()) msg := genMsg(dtmimp.GetFuncName())
msg.Prepare("") msg.Prepare("")
assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) assert.Equal(t, StatusPrepared, getTransStatus(msg.Gid))
examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultOngoing)
cronTransOnceForwardNow(180) cronTransOnceForwardNow(180)
assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) assert.Equal(t, StatusPrepared, getTransStatus(msg.Gid))
examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultFailure) examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultFailure)
cronTransOnceForwardNow(180) cronTransOnceForwardNow(180)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(msg.Gid)) assert.Equal(t, []string{StatusPrepared, StatusPrepared}, getBranchesStatus(msg.Gid))
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(msg.Gid)) assert.Equal(t, StatusFailed, getTransStatus(msg.Gid))
} }
func TestMsgAbnormal(t *testing.T) { func TestMsgAbnormal(t *testing.T) {

29
test/saga_barrier_test.go

@ -10,24 +10,27 @@ import (
) )
func TestSagaBarrierNormal(t *testing.T) { func TestSagaBarrierNormal(t *testing.T) {
req := &examples.TransReq{Amount: 30} saga := genSagaBarrier(dtmimp.GetFuncName(), false, false)
saga := dtmcli.NewSaga(DtmServer, dtmimp.GetFuncName()).
Add(Busi+"/SagaBTransOut", Busi+"/SagaBTransOutCompensate", req).
Add(Busi+"/SagaBTransIn", Busi+"/SagaBTransInCompensate", req)
dtmimp.Logf("busi trans submit")
err := saga.Submit() err := saga.Submit()
e2p(err) assert.Nil(t, err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
} }
func TestSagaBarrierRollback(t *testing.T) { func TestSagaBarrierRollback(t *testing.T) {
saga := dtmcli.NewSaga(DtmServer, dtmimp.GetFuncName()). saga := genSagaBarrier(dtmimp.GetFuncName(), false, true)
Add(Busi+"/SagaBTransOut", Busi+"/SagaBTransOutCompensate", &examples.TransReq{Amount: 30}).
Add(Busi+"/SagaBTransIn", Busi+"/SagaBTransInCompensate", &examples.TransReq{Amount: 30, TransInResult: dtmcli.ResultFailure})
dtmimp.Logf("busi trans submit")
err := saga.Submit() err := saga.Submit()
e2p(err) assert.Nil(t, err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid))
}
func genSagaBarrier(gid string, outFailed, inFailed bool) *dtmcli.Saga {
req := examples.GenTransReq(30, outFailed, inFailed)
return dtmcli.NewSaga(DtmServer, gid).
Add(Busi+"/SagaBTransOut", Busi+"/SagaBTransOutCompensate", req).
Add(Busi+"/SagaBTransIn", Busi+"/SagaBTransInCompensate", req)
} }

5
test/saga_compatible_test.go

@ -5,7 +5,6 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/yedf/dtm/dtmcli"
"github.com/yedf/dtm/dtmcli/dtmimp" "github.com/yedf/dtm/dtmcli/dtmimp"
"github.com/yedf/dtm/examples" "github.com/yedf/dtm/examples"
) )
@ -16,6 +15,6 @@ func TestSagaCompatibleNormal(t *testing.T) { // compatible with old http, which
gid, examples.Busi, examples.Busi, examples.Busi, examples.Busi) gid, examples.Busi, examples.Busi, examples.Busi, examples.Busi)
dtmimp.RestyClient.R().SetBody(body).Post(fmt.Sprintf("%s/submit", examples.DtmServer)) dtmimp.RestyClient.R().SetBody(body).Post(fmt.Sprintf("%s/submit", examples.DtmServer))
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(gid)) assert.Equal(t, StatusSucceed, getTransStatus(gid))
} }

38
test/saga_concurrent_test.go

@ -10,47 +10,37 @@ import (
) )
func genSagaCon(gid string, outFailed bool, inFailed bool) *dtmcli.Saga { func genSagaCon(gid string, outFailed bool, inFailed bool) *dtmcli.Saga {
dtmimp.Logf("beginning a concurrent saga test ---------------- %s", gid) return genSaga(gid, outFailed, inFailed).EnableConcurrent()
req := examples.GenTransReq(30, outFailed, inFailed)
sagaCon := dtmcli.NewSaga(examples.DtmServer, gid).
Add(examples.Busi+"/TransOut", examples.Busi+"/TransOutRevert", &req).
Add(examples.Busi+"/TransIn", examples.Busi+"/TransInRevert", &req).
EnableConcurrent()
return sagaCon
} }
func TestSagaConNormal(t *testing.T) { func TestSagaConNormal(t *testing.T) {
sagaCon := genSagaCon(dtmimp.GetFuncName(), false, false) sagaCon := genSagaCon(dtmimp.GetFuncName(), false, false)
sagaCon.Submit() sagaCon.Submit()
waitTransProcessed(sagaCon.Gid) waitTransProcessed(sagaCon.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(sagaCon.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(sagaCon.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(sagaCon.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(sagaCon.Gid))
} }
func TestSagaConRollback(t *testing.T) { func TestSagaConRollbackNormal(t *testing.T) {
sagaCon := genSagaCon(dtmimp.GetFuncName(), true, false) sagaCon := genSagaCon(dtmimp.GetFuncName(), true, false)
examples.MainSwitch.TransOutRevertResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransOutRevertResult.SetOnce(dtmcli.ResultOngoing)
err := sagaCon.Submit() err := sagaCon.Submit()
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(sagaCon.Gid) waitTransProcessed(sagaCon.Gid)
assert.Equal(t, dtmcli.StatusAborting, getTransStatus(sagaCon.Gid)) assert.Equal(t, StatusAborting, getTransStatus(sagaCon.Gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(sagaCon.Gid)) assert.Equal(t, StatusFailed, getTransStatus(sagaCon.Gid))
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusFailed, dtmcli.StatusSucceed, dtmcli.StatusSucceed}, getBranchesStatus(sagaCon.Gid)) assert.Equal(t, []string{StatusSucceed, StatusFailed, StatusSucceed, StatusSucceed}, getBranchesStatus(sagaCon.Gid))
err = sagaCon.Submit()
assert.Error(t, err)
} }
func TestSagaConRollback2(t *testing.T) { func TestSagaConRollbackOrder(t *testing.T) {
sagaCon := genSagaCon(dtmimp.GetFuncName(), true, false) sagaCon := genSagaCon(dtmimp.GetFuncName(), true, false)
sagaCon.AddBranchOrder(1, []int{0}) sagaCon.AddBranchOrder(1, []int{0})
err := sagaCon.Submit() err := sagaCon.Submit()
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(sagaCon.Gid) waitTransProcessed(sagaCon.Gid)
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(sagaCon.Gid)) assert.Equal(t, StatusFailed, getTransStatus(sagaCon.Gid))
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusFailed, dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(sagaCon.Gid)) assert.Equal(t, []string{StatusSucceed, StatusFailed, StatusPrepared, StatusPrepared}, getBranchesStatus(sagaCon.Gid))
err = sagaCon.Submit()
assert.Error(t, err)
} }
func TestSagaConCommittedOngoing(t *testing.T) { func TestSagaConCommittedOngoing(t *testing.T) {
@ -58,10 +48,10 @@ func TestSagaConCommittedOngoing(t *testing.T) {
examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing)
sagaCon.Submit() sagaCon.Submit()
waitTransProcessed(sagaCon.Gid) waitTransProcessed(sagaCon.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(sagaCon.Gid)) assert.Equal(t, []string{StatusPrepared, StatusPrepared, StatusPrepared, StatusSucceed}, getBranchesStatus(sagaCon.Gid))
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(sagaCon.Gid)) assert.Equal(t, StatusSubmitted, getTransStatus(sagaCon.Gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(sagaCon.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(sagaCon.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(sagaCon.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(sagaCon.Gid))
} }

32
test/saga_options_test.go

@ -17,8 +17,8 @@ func TestSagaOptionsRetryOngoing(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
cronTransOnce() cronTransOnce()
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
} }
func TestSagaOptionsRetryError(t *testing.T) { func TestSagaOptionsRetryError(t *testing.T) {
@ -29,11 +29,11 @@ func TestSagaOptionsRetryError(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
cronTransOnce() cronTransOnce()
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(saga.Gid)) assert.Equal(t, StatusSubmitted, getTransStatus(saga.Gid))
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusPrepared}, getBranchesStatus(saga.Gid))
cronTransOnceForwardCron(360) cronTransOnceForwardCron(360)
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
} }
func TestSagaOptionsTimeout(t *testing.T) { func TestSagaOptionsTimeout(t *testing.T) {
@ -42,9 +42,9 @@ func TestSagaOptionsTimeout(t *testing.T) {
examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing)
saga.Submit() saga.Submit()
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(saga.Gid)) assert.Equal(t, StatusSubmitted, getTransStatus(saga.Gid))
cronTransOnceForwardNow(3600) cronTransOnceForwardNow(3600)
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
} }
func TestSagaOptionsNormalWait(t *testing.T) { func TestSagaOptionsNormalWait(t *testing.T) {
@ -53,8 +53,8 @@ func TestSagaOptionsNormalWait(t *testing.T) {
err := saga.Submit() err := saga.Submit()
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
} }
func TestSagaOptionsCommittedOngoingWait(t *testing.T) { func TestSagaOptionsCommittedOngoingWait(t *testing.T) {
@ -63,12 +63,12 @@ func TestSagaOptionsCommittedOngoingWait(t *testing.T) {
saga.SetOptions(&dtmimp.TransOptions{WaitResult: true}) saga.SetOptions(&dtmimp.TransOptions{WaitResult: true})
err := saga.Submit() err := saga.Submit()
assert.Error(t, err) assert.Error(t, err)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusPrepared, StatusPrepared, StatusPrepared}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(saga.Gid)) assert.Equal(t, StatusSubmitted, getTransStatus(saga.Gid))
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
cronTransOnce() cronTransOnce()
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
} }
func TestSagaOptionsRollbackWait(t *testing.T) { func TestSagaOptionsRollbackWait(t *testing.T) {
@ -77,6 +77,6 @@ func TestSagaOptionsRollbackWait(t *testing.T) {
err := saga.Submit() err := saga.Submit()
assert.Error(t, err) assert.Error(t, err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusSucceed, dtmcli.StatusSucceed, dtmcli.StatusFailed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid))
} }

18
test/saga_test.go

@ -13,8 +13,8 @@ func TestSagaNormal(t *testing.T) {
saga := genSaga(dtmimp.GetFuncName(), false, false) saga := genSaga(dtmimp.GetFuncName(), false, false)
saga.Submit() saga.Submit()
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
} }
func TestSagaOngoingSucceed(t *testing.T) { func TestSagaOngoingSucceed(t *testing.T) {
@ -22,11 +22,11 @@ func TestSagaOngoingSucceed(t *testing.T) {
examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing)
saga.Submit() saga.Submit()
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusPrepared, StatusPrepared, StatusPrepared}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(saga.Gid)) assert.Equal(t, StatusSubmitted, getTransStatus(saga.Gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(saga.Gid)) assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
} }
func TestSagaFailed(t *testing.T) { func TestSagaFailed(t *testing.T) {
@ -35,10 +35,10 @@ func TestSagaFailed(t *testing.T) {
err := saga.Submit() err := saga.Submit()
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(saga.Gid) waitTransProcessed(saga.Gid)
assert.Equal(t, dtmcli.StatusAborting, getTransStatus(saga.Gid)) assert.Equal(t, StatusAborting, getTransStatus(saga.Gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusSucceed, dtmcli.StatusSucceed, dtmcli.StatusFailed}, getBranchesStatus(saga.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid))
} }
func TestSagaAbnormal(t *testing.T) { func TestSagaAbnormal(t *testing.T) {

28
test/tcc_barrier_test.go

@ -17,28 +17,30 @@ import (
"github.com/yedf/dtm/examples" "github.com/yedf/dtm/examples"
) )
func TestTccBarrierRollback(t *testing.T) { func TestTccBarrierNormal(t *testing.T) {
req := examples.GenTransReq(30, false, false)
gid := dtmimp.GetFuncName() gid := dtmimp.GetFuncName()
err := dtmcli.TccGlobalTransaction(DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) { err := dtmcli.TccGlobalTransaction(DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) {
_, err := tcc.CallBranch(&examples.TransReq{Amount: 30}, Busi+"/TccBTransOutTry", Busi+"/TccBTransOutConfirm", Busi+"/TccBTransOutCancel") _, err := tcc.CallBranch(req, Busi+"/TccBTransOutTry", Busi+"/TccBTransOutConfirm", Busi+"/TccBTransOutCancel")
assert.Nil(t, err) assert.Nil(t, err)
return tcc.CallBranch(&examples.TransReq{Amount: 30, TransInResult: dtmcli.ResultFailure}, Busi+"/TccBTransInTry", Busi+"/TccBTransInConfirm", Busi+"/TccBTransInCancel") return tcc.CallBranch(req, Busi+"/TccBTransInTry", Busi+"/TccBTransInConfirm", Busi+"/TccBTransInCancel")
}) })
assert.Error(t, err) assert.Nil(t, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(gid)) assert.Equal(t, StatusSucceed, getTransStatus(gid))
} }
func TestTccBarrierNormal(t *testing.T) { func TestTccBarrierRollback(t *testing.T) {
req := examples.GenTransReq(30, false, true)
gid := dtmimp.GetFuncName() gid := dtmimp.GetFuncName()
err := dtmcli.TccGlobalTransaction(DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) { err := dtmcli.TccGlobalTransaction(DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) {
_, err := tcc.CallBranch(&examples.TransReq{Amount: 30}, Busi+"/TccBTransOutTry", Busi+"/TccBTransOutConfirm", Busi+"/TccBTransOutCancel") _, err := tcc.CallBranch(req, Busi+"/TccBTransOutTry", Busi+"/TccBTransOutConfirm", Busi+"/TccBTransOutCancel")
assert.Nil(t, err) assert.Nil(t, err)
return tcc.CallBranch(&examples.TransReq{Amount: 30}, Busi+"/TccBTransInTry", Busi+"/TccBTransInConfirm", Busi+"/TccBTransInCancel") return tcc.CallBranch(req, Busi+"/TccBTransInTry", Busi+"/TccBTransInConfirm", Busi+"/TccBTransInCancel")
}) })
assert.Nil(t, err) assert.Error(t, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(gid)) assert.Equal(t, StatusFailed, getTransStatus(gid))
} }
func TestTccBarrierDisorder(t *testing.T) { func TestTccBarrierDisorder(t *testing.T) {
@ -69,7 +71,7 @@ func TestTccBarrierDisorder(t *testing.T) {
"gid": tcc.Gid, "gid": tcc.Gid,
"branch_id": branchID, "branch_id": branchID,
"trans_type": "tcc", "trans_type": "tcc",
"status": dtmcli.StatusPrepared, "status": StatusPrepared,
"data": string(dtmimp.MustMarshal(body)), "data": string(dtmimp.MustMarshal(body)),
dtmcli.BranchTry: tryURL, dtmcli.BranchTry: tryURL,
dtmcli.BranchConfirm: confirmURL, dtmcli.BranchConfirm: confirmURL,
@ -107,8 +109,8 @@ func TestTccBarrierDisorder(t *testing.T) {
return nil, fmt.Errorf("a cancelled tcc") return nil, fmt.Errorf("a cancelled tcc")
}) })
assert.Error(t, err, fmt.Errorf("a cancelled tcc")) assert.Error(t, err, fmt.Errorf("a cancelled tcc"))
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(gid)) assert.Equal(t, []string{StatusSucceed, StatusPrepared, StatusPrepared}, getBranchesStatus(gid))
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(gid)) assert.Equal(t, StatusFailed, getTransStatus(gid))
} }
func TestTccBarrierPanic(t *testing.T) { func TestTccBarrierPanic(t *testing.T) {

18
test/tcc_test.go

@ -11,28 +11,30 @@ import (
) )
func TestTccNormal(t *testing.T) { func TestTccNormal(t *testing.T) {
data := &examples.TransReq{Amount: 30} req := examples.GenTransReq(30, false, false)
gid := dtmimp.GetFuncName() gid := dtmimp.GetFuncName()
err := dtmcli.TccGlobalTransaction(examples.DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) { err := dtmcli.TccGlobalTransaction(examples.DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) {
_, err := tcc.CallBranch(data, Busi+"/TransOut", Busi+"/TransOutConfirm", Busi+"/TransOutRevert") _, err := tcc.CallBranch(req, Busi+"/TransOut", Busi+"/TransOutConfirm", Busi+"/TransOutRevert")
assert.Nil(t, err) assert.Nil(t, err)
return tcc.CallBranch(data, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert") return tcc.CallBranch(req, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert")
}) })
assert.Nil(t, err) assert.Nil(t, err)
waitTransProcessed(gid)
assert.Equal(t, StatusSucceed, getTransStatus(gid))
} }
func TestTccRollback(t *testing.T) { func TestTccRollback(t *testing.T) {
gid := dtmimp.GetFuncName() gid := dtmimp.GetFuncName()
data := &examples.TransReq{Amount: 30, TransInResult: dtmcli.ResultFailure} req := examples.GenTransReq(30, false, true)
err := dtmcli.TccGlobalTransaction(examples.DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) { err := dtmcli.TccGlobalTransaction(examples.DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) {
_, rerr := tcc.CallBranch(data, Busi+"/TransOut", Busi+"/TransOutConfirm", Busi+"/TransOutRevert") _, rerr := tcc.CallBranch(req, Busi+"/TransOut", Busi+"/TransOutConfirm", Busi+"/TransOutRevert")
assert.Nil(t, rerr) assert.Nil(t, rerr)
examples.MainSwitch.TransOutRevertResult.SetOnce(dtmcli.ResultOngoing) examples.MainSwitch.TransOutRevertResult.SetOnce(dtmcli.ResultOngoing)
return tcc.CallBranch(data, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert") return tcc.CallBranch(req, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert")
}) })
assert.Error(t, err) assert.Error(t, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, dtmcli.StatusAborting, getTransStatus(gid)) assert.Equal(t, StatusAborting, getTransStatus(gid))
cronTransOnce() cronTransOnce()
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(gid)) assert.Equal(t, StatusFailed, getTransStatus(gid))
} }

14
test/types.go

@ -4,6 +4,7 @@ import (
"time" "time"
"github.com/yedf/dtm/common" "github.com/yedf/dtm/common"
"github.com/yedf/dtm/dtmcli"
"github.com/yedf/dtm/dtmcli/dtmimp" "github.com/yedf/dtm/dtmcli/dtmimp"
"github.com/yedf/dtm/dtmsvr" "github.com/yedf/dtm/dtmsvr"
) )
@ -57,3 +58,16 @@ func cronTransOnceForwardCron(seconds int) {
cronTransOnce() cronTransOnce()
dtmsvr.CronForwardDuration = old dtmsvr.CronForwardDuration = old
} }
const (
// StatusPrepared status for global/branch trans status.
StatusPrepared = dtmcli.StatusPrepared
// StatusSubmitted status for global trans status.
StatusSubmitted = dtmcli.StatusSubmitted
// StatusSucceed status for global/branch trans status.
StatusSucceed = dtmcli.StatusSucceed
// StatusFailed status for global/branch trans status.
StatusFailed = dtmcli.StatusFailed
// StatusAborting status for global trans status.
StatusAborting = dtmcli.StatusAborting
)

8
test/xa_test.go

@ -33,7 +33,7 @@ func TestXaNormal(t *testing.T) {
}) })
assert.Equal(t, nil, err) assert.Equal(t, nil, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(gid))
} }
func TestXaDuplicate(t *testing.T) { func TestXaDuplicate(t *testing.T) {
@ -51,7 +51,7 @@ func TestXaDuplicate(t *testing.T) {
}) })
assert.Equal(t, nil, err) assert.Equal(t, nil, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(gid)) assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(gid))
} }
func TestXaRollback(t *testing.T) { func TestXaRollback(t *testing.T) {
xc := examples.XaClient xc := examples.XaClient
@ -66,8 +66,8 @@ func TestXaRollback(t *testing.T) {
}) })
assert.Error(t, err) assert.Error(t, err)
waitTransProcessed(gid) waitTransProcessed(gid)
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusPrepared}, getBranchesStatus(gid)) assert.Equal(t, []string{StatusSucceed, StatusPrepared}, getBranchesStatus(gid))
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(gid)) assert.Equal(t, StatusFailed, getTransStatus(gid))
} }
func TestXaTimeout(t *testing.T) { func TestXaTimeout(t *testing.T) {

Loading…
Cancel
Save