Browse Source

xa saga cover more

topic
yedf2 5 years ago
parent
commit
d92f892215
  1. 2
      .travis.yml
  2. 5
      dtmgrpc/type.go
  3. 5
      dtmgrpc/type_test.go
  4. 11
      examples/base_http.go
  5. 19
      test/saga_grpc_test.go
  6. 23
      test/xa_test.go

2
.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/*"

5
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()
}

5
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)
}

11
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

19
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)

23
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))
}

Loading…
Cancel
Save