58 lines
2.0 KiB
Go
58 lines
2.0 KiB
Go
package test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/yedf/dtm/dtmcli"
|
|
"github.com/yedf/dtm/dtmgrpc"
|
|
"github.com/yedf/dtm/examples"
|
|
)
|
|
|
|
func TestGrpcSaga(t *testing.T) {
|
|
sagaGrpcNormal(t)
|
|
sagaGrpcCommittedPending(t)
|
|
sagaGrpcRollback(t)
|
|
}
|
|
|
|
func sagaGrpcNormal(t *testing.T) {
|
|
saga := genSagaGrpc("gid-sagaGrpcNormal", false, false)
|
|
saga.Submit()
|
|
WaitTransProcessed(saga.Gid)
|
|
assert.Equal(t, []string{"prepared", "succeed", "prepared", "succeed"}, getBranchesStatus(saga.Gid))
|
|
assert.Equal(t, "succeed", getTransStatus(saga.Gid))
|
|
transQuery(t, saga.Gid)
|
|
}
|
|
|
|
func sagaGrpcCommittedPending(t *testing.T) {
|
|
saga := genSagaGrpc("gid-committedPendingGrpc", false, false)
|
|
examples.MainSwitch.TransOutResult.SetOnce("PENDING")
|
|
saga.Submit()
|
|
WaitTransProcessed(saga.Gid)
|
|
assert.Equal(t, []string{"prepared", "prepared", "prepared", "prepared"}, getBranchesStatus(saga.Gid))
|
|
CronTransOnce(60 * time.Second)
|
|
assert.Equal(t, []string{"prepared", "succeed", "prepared", "succeed"}, getBranchesStatus(saga.Gid))
|
|
assert.Equal(t, "succeed", getTransStatus(saga.Gid))
|
|
}
|
|
|
|
func sagaGrpcRollback(t *testing.T) {
|
|
saga := genSagaGrpc("gid-rollbackSaga2Grpc", false, true)
|
|
examples.MainSwitch.TransOutRevertResult.SetOnce("PENDING")
|
|
saga.Submit()
|
|
WaitTransProcessed(saga.Gid)
|
|
assert.Equal(t, "aborting", getTransStatus(saga.Gid))
|
|
CronTransOnce(60 * time.Second)
|
|
assert.Equal(t, "failed", getTransStatus(saga.Gid))
|
|
assert.Equal(t, []string{"succeed", "succeed", "succeed", "failed"}, getBranchesStatus(saga.Gid))
|
|
}
|
|
|
|
func genSagaGrpc(gid string, outFailed bool, inFailed bool) *dtmgrpc.SagaGrpc {
|
|
dtmcli.Logf("beginning a grpc saga test ---------------- %s", gid)
|
|
saga := dtmgrpc.NewSaga(examples.DtmGrpcServer, gid)
|
|
req := dtmcli.MustMarshal(examples.GenTransReq(30, outFailed, inFailed))
|
|
saga.Add(examples.BusiGrpc+"/examples.Busi/TransOut", examples.BusiGrpc+"/examples.Busi/TransOutRevert", req)
|
|
saga.Add(examples.BusiGrpc+"/examples.Busi/TransIn", examples.BusiGrpc+"/examples.Busi/TransInRevert", req)
|
|
return saga
|
|
}
|