mirror of https://github.com/dtm-labs/dtm.git
committed by
GitHub
49 changed files with 774 additions and 314 deletions
@ -0,0 +1,53 @@ |
|||||
|
package test |
||||
|
|
||||
|
import ( |
||||
|
"fmt" |
||||
|
"testing" |
||||
|
|
||||
|
"github.com/stretchr/testify/assert" |
||||
|
"github.com/yedf/dtm/common" |
||||
|
"github.com/yedf/dtm/dtmcli" |
||||
|
"github.com/yedf/dtm/examples" |
||||
|
) |
||||
|
|
||||
|
func TestSqlDB(t *testing.T) { |
||||
|
asserts := assert.New(t) |
||||
|
db := common.DbGet(config.DB) |
||||
|
barrier := &dtmcli.BranchBarrier{ |
||||
|
TransType: "saga", |
||||
|
Gid: "gid2", |
||||
|
BranchID: "branch_id2", |
||||
|
BranchType: dtmcli.BranchAction, |
||||
|
} |
||||
|
db.Must().Exec("insert into dtm_barrier.barrier(trans_type, gid, branch_id, branch_type, reason) values('saga', 'gid1', 'branch_id1', 'action', 'saga')") |
||||
|
tx, err := db.ToSQLDB().Begin() |
||||
|
asserts.Nil(err) |
||||
|
err = barrier.Call(tx, func(db dtmcli.DB) error { |
||||
|
dtmcli.Logf("rollback gid2") |
||||
|
return fmt.Errorf("gid2 error") |
||||
|
}) |
||||
|
asserts.Error(err, fmt.Errorf("gid2 error")) |
||||
|
dbr := db.Model(&BarrierModel{}).Where("gid=?", "gid1").Find(&[]BarrierModel{}) |
||||
|
asserts.Equal(dbr.RowsAffected, int64(1)) |
||||
|
dbr = db.Model(&BarrierModel{}).Where("gid=?", "gid2").Find(&[]BarrierModel{}) |
||||
|
asserts.Equal(dbr.RowsAffected, int64(0)) |
||||
|
barrier.BarrierID = 0 |
||||
|
tx2, err := db.ToSQLDB().Begin() |
||||
|
asserts.Nil(err) |
||||
|
err = barrier.Call(tx2, func(db dtmcli.DB) error { |
||||
|
dtmcli.Logf("submit gid2") |
||||
|
return nil |
||||
|
}) |
||||
|
asserts.Nil(err) |
||||
|
dbr = db.Model(&BarrierModel{}).Where("gid=?", "gid2").Find(&[]BarrierModel{}) |
||||
|
asserts.Equal(dbr.RowsAffected, int64(1)) |
||||
|
} |
||||
|
|
||||
|
func TestHttp(t *testing.T) { |
||||
|
resp, err := dtmcli.RestyClient.R().SetQueryParam("panic_string", "1").Post(examples.Busi + "/TestPanic") |
||||
|
assert.Nil(t, err) |
||||
|
assert.Contains(t, resp.String(), "panic_string") |
||||
|
resp, err = dtmcli.RestyClient.R().SetQueryParam("panic_error", "1").Post(examples.Busi + "/TestPanic") |
||||
|
assert.Nil(t, err) |
||||
|
assert.Contains(t, resp.String(), "panic_error") |
||||
|
} |
||||
@ -0,0 +1,73 @@ |
|||||
|
package test |
||||
|
|
||||
|
import ( |
||||
|
"testing" |
||||
|
|
||||
|
"github.com/stretchr/testify/assert" |
||||
|
"github.com/yedf/dtm/dtmcli" |
||||
|
"github.com/yedf/dtm/examples" |
||||
|
) |
||||
|
|
||||
|
func TestCSaga(t *testing.T) { |
||||
|
csagaNormal(t) |
||||
|
csagaRollback(t) |
||||
|
csagaRollback2(t) |
||||
|
csagaCommittedOngoing(t) |
||||
|
} |
||||
|
|
||||
|
func genCSaga(gid string, outFailed bool, inFailed bool) *dtmcli.Saga { |
||||
|
dtmcli.Logf("beginning a concurrent saga test ---------------- %s", gid) |
||||
|
req := examples.GenTransReq(30, outFailed, inFailed) |
||||
|
csaga := dtmcli.NewSaga(examples.DtmServer, gid). |
||||
|
Add(examples.Busi+"/TransOut", examples.Busi+"/TransOutRevert", &req). |
||||
|
Add(examples.Busi+"/TransIn", examples.Busi+"/TransInRevert", &req). |
||||
|
EnableConcurrent() |
||||
|
return csaga |
||||
|
} |
||||
|
|
||||
|
func csagaNormal(t *testing.T) { |
||||
|
csaga := genCSaga("gid-noraml-csaga", false, false) |
||||
|
csaga.Submit() |
||||
|
WaitTransProcessed(csaga.Gid) |
||||
|
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(csaga.Gid)) |
||||
|
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(csaga.Gid)) |
||||
|
} |
||||
|
|
||||
|
func csagaRollback(t *testing.T) { |
||||
|
csaga := genCSaga("gid-rollback-csaga", true, false) |
||||
|
examples.MainSwitch.TransOutRevertResult.SetOnce(dtmcli.ResultOngoing) |
||||
|
err := csaga.Submit() |
||||
|
assert.Nil(t, err) |
||||
|
WaitTransProcessed(csaga.Gid) |
||||
|
assert.Equal(t, dtmcli.StatusAborting, getTransStatus(csaga.Gid)) |
||||
|
CronTransOnce() |
||||
|
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(csaga.Gid)) |
||||
|
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusFailed, dtmcli.StatusSucceed, dtmcli.StatusSucceed}, getBranchesStatus(csaga.Gid)) |
||||
|
err = csaga.Submit() |
||||
|
assert.Error(t, err) |
||||
|
} |
||||
|
|
||||
|
func csagaRollback2(t *testing.T) { |
||||
|
csaga := genCSaga("gid-rollback-csaga2", true, false) |
||||
|
csaga.AddStepOrder(1, []int{0}) |
||||
|
err := csaga.Submit() |
||||
|
assert.Nil(t, err) |
||||
|
WaitTransProcessed(csaga.Gid) |
||||
|
assert.Equal(t, dtmcli.StatusFailed, getTransStatus(csaga.Gid)) |
||||
|
assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusFailed, dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(csaga.Gid)) |
||||
|
err = csaga.Submit() |
||||
|
assert.Error(t, err) |
||||
|
} |
||||
|
|
||||
|
func csagaCommittedOngoing(t *testing.T) { |
||||
|
csaga := genCSaga("gid-committed-ongoing-csaga", false, false) |
||||
|
examples.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing) |
||||
|
csaga.Submit() |
||||
|
WaitTransProcessed(csaga.Gid) |
||||
|
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(csaga.Gid)) |
||||
|
assert.Equal(t, dtmcli.StatusSubmitted, getTransStatus(csaga.Gid)) |
||||
|
|
||||
|
CronTransOnce() |
||||
|
assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusSucceed, dtmcli.StatusPrepared, dtmcli.StatusSucceed}, getBranchesStatus(csaga.Gid)) |
||||
|
assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(csaga.Gid)) |
||||
|
} |
||||
Loading…
Reference in new issue