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