diff --git a/.travis.yml b/.travis.yml index 94d45aa..1ba0f6e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,4 +14,4 @@ before_install: - go get -t -v ./... - go get github.com/mattn/goveralls script: - - $GOPATH/bin/goveralls -service=travis-ci -ignore="examples/*,dtmgrpc/*.pb.go,bench/*" + - $GOPATH/bin/goveralls -service=travis-ci -ignore="examples/*,dtmgrpc/dtmgimp/*.pb.go,bench/*" diff --git a/dtmgrpc/type.go b/dtmgrpc/type.go index 1f5f741..2da13b6 100644 --- a/dtmgrpc/type.go +++ b/dtmgrpc/type.go @@ -21,3 +21,8 @@ func MustGenGid(grpcServer string) string { func SetCurrentDBType(dbType string) { dtmcli.SetCurrentDBType(dbType) } + +// GetCurrentDBType set the current db type +func GetCurrentDBType() string { + return dtmcli.GetCurrentDBType() +} diff --git a/dtmgrpc/type_test.go b/dtmgrpc/type_test.go index 831357e..aaa477b 100644 --- a/dtmgrpc/type_test.go +++ b/dtmgrpc/type_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/yedf/dtm/dtmcli" ) func TestType(t *testing.T) { @@ -13,4 +14,8 @@ func TestType(t *testing.T) { _, err = TccFromGrpc(context.Background()) assert.Error(t, err) + + old := GetCurrentDBType() + SetCurrentDBType(dtmcli.DBTypeMysql) + SetCurrentDBType(old) } diff --git a/examples/base_http.go b/examples/base_http.go index 9728dd7..a0638b0 100644 --- a/examples/base_http.go +++ b/examples/base_http.go @@ -35,6 +35,16 @@ var Busi string = fmt.Sprintf("http://localhost:%d%s", BusiPort, BusiAPI) func BaseAppStartup() *gin.Engine { dtmimp.Logf("examples starting") app := common.GetGinApp() + app.Use(func(c *gin.Context) { + v := MainSwitch.NextResult.Fetch() + if v != "" { + c.JSON(200, gin.H{"dtm_result": v}) + c.Abort() + return + } + c.Next() + }) + BaseAddRoute(app) for k, v := range setupFuncs { dtmimp.Logf("initing %s", k) @@ -73,6 +83,7 @@ type mainSwitchType struct { TransInRevertResult AutoEmptyString TransOutRevertResult AutoEmptyString CanSubmitResult AutoEmptyString + NextResult AutoEmptyString } // MainSwitch controls busi success or fail diff --git a/test/saga_grpc_test.go b/test/saga_grpc_test.go index 3f3160d..bcc6ab2 100644 --- a/test/saga_grpc_test.go +++ b/test/saga_grpc_test.go @@ -29,6 +29,25 @@ func TestSagaGrpcRollback(t *testing.T) { assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid)) } +func TestSagaGrpcCurrent(t *testing.T) { + saga := genSagaGrpc(dtmimp.GetFuncName(), false, false). + EnableConcurrent() + saga.Submit() + waitTransProcessed(saga.Gid) + assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid)) + assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid)) +} + +func TestSagaGrpcCurrentOrder(t *testing.T) { + saga := genSagaGrpc(dtmimp.GetFuncName(), false, false). + EnableConcurrent(). + AddBranchOrder(1, []int{0}) + saga.Submit() + waitTransProcessed(saga.Gid) + assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid)) + assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid)) +} + func TestSagaGrpcCommittedOngoing(t *testing.T) { saga := genSagaGrpc(dtmimp.GetFuncName(), false, false) examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing) diff --git a/test/xa_test.go b/test/xa_test.go index 2916934..0ff6ef2 100644 --- a/test/xa_test.go +++ b/test/xa_test.go @@ -92,3 +92,26 @@ func TestXaTimeout(t *testing.T) { assert.Equal(t, StatusFailed, getTransStatus(gid)) assert.Equal(t, []string{}, getBranchesStatus(gid)) } + +func TestXaNotTimeout(t *testing.T) { + gid := dtmimp.GetFuncName() + timeoutChan := make(chan int, 1) + err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + go func() { + cronTransOnceForwardNow(0) // not timeout, + timeoutChan <- 0 + }() + _ = <-timeoutChan + req := examples.GenTransReq(30, false, false) + _, err := xa.CallBranch(req, examples.Busi+"/TransOutXa") + assert.Nil(t, err) + examples.MainSwitch.NextResult.SetOnce(dtmcli.ResultOngoing) // make commit temp error + return nil, nil + }) + assert.Nil(t, err) + waitTransProcessed(gid) + assert.Equal(t, StatusSubmitted, getTransStatus(gid)) + cronTransOnce() + assert.Equal(t, StatusSucceed, getTransStatus(gid)) + assert.Equal(t, []string{StatusPrepared, StatusSucceed}, getBranchesStatus(gid)) +}