From 17c8a3813eb839942fec04a22ee9844ea9eeefeb Mon Sep 17 00:00:00 2001 From: yedongfu Date: Fri, 16 Jul 2021 13:51:46 +0800 Subject: [PATCH] test cover more --- dtmsvr/dtmsvr_test.go | 34 ++++++++++++++++++++++++++++++++++ dtmsvr/main.go | 2 +- examples/config.go | 2 +- examples/data.go | 10 +++++----- examples/main_xa.go | 10 +++++----- examples/types.go | 7 ------- 6 files changed, 46 insertions(+), 19 deletions(-) diff --git a/dtmsvr/dtmsvr_test.go b/dtmsvr/dtmsvr_test.go index fb0cfe7..49ec3f0 100644 --- a/dtmsvr/dtmsvr_test.go +++ b/dtmsvr/dtmsvr_test.go @@ -33,6 +33,8 @@ func TestDtmSvr(t *testing.T) { examples.TccSetup(app) examples.XaSetup(app) examples.MsgSetup(app) + examples.TccBarrierAddRoute(app) + examples.SagaBarrierAddRoute(app) // 清理数据 e2p(dbGet().Exec("truncate trans_global").Error) @@ -40,6 +42,8 @@ func TestDtmSvr(t *testing.T) { e2p(dbGet().Exec("truncate trans_log").Error) examples.ResetXaData() + tccBarrierNormal(t) + sagaBarrierNormal(t) msgNormal(t) msgPending(t) tccNormal(t) @@ -123,6 +127,24 @@ func tccNormal(t *testing.T) { }) e2p(err) } +func tccBarrierNormal(t *testing.T) { + _, err := dtmcli.TccGlobalTransaction(DtmServer, func(tcc *dtmcli.Tcc) (rerr error) { + res1, rerr := tcc.CallBranch(&examples.TransReq{Amount: 30}, Busi+"/TccBTransOutTry", Busi+"/TccBTransOutConfirm", Busi+"/TccBTransOutRevert") + e2p(rerr) + if res1.StatusCode() != 200 { + return fmt.Errorf("bad status code: %d", res1.StatusCode()) + } + res2, rerr := tcc.CallBranch(&examples.TransReq{Amount: 30}, Busi+"/TccBTransInTry", Busi+"/TccBTransInConfirm", Busi+"/TccBTransInRevert") + e2p(rerr) + if res2.StatusCode() != 200 { + return fmt.Errorf("bad status code: %d", res2.StatusCode()) + } + logrus.Printf("tcc returns: %s, %s", res1.String(), res2.String()) + return + }) + e2p(err) +} + func tccRollback(t *testing.T) { data := &examples.TransReq{Amount: 30, TransInResult: "FAIL"} _, err := dtmcli.TccGlobalTransaction(examples.DtmServer, func(tcc *dtmcli.Tcc) (rerr error) { @@ -167,6 +189,18 @@ func sagaNormal(t *testing.T) { transQuery(t, saga.Gid) } +func sagaBarrierNormal(t *testing.T) { + req := &examples.TransReq{Amount: 30} + saga := dtmcli.NewSaga(DtmServer). + Add(Busi+"/SagaBTransOut", Busi+"/SagaBTransOutCompensate", req). + Add(Busi+"/SagaBTransIn", Busi+"/SagaBTransInCompensate", req) + logrus.Printf("busi trans submit") + err := saga.Submit() + e2p(err) + WaitTransProcessed(saga.Gid) + assert.Equal(t, []string{"prepared", "succeed", "prepared", "succeed"}, getBranchesStatus(saga.Gid)) +} + func sagaRollback(t *testing.T) { saga := genSaga("gid-rollbackSaga2", false, true) saga.Submit() diff --git a/dtmsvr/main.go b/dtmsvr/main.go index 7fdf92d..0af5c74 100644 --- a/dtmsvr/main.go +++ b/dtmsvr/main.go @@ -34,5 +34,5 @@ func StartSvr() { func PopulateMysql() { common.InitApp(common.GetProjectDir(), &config) config.Mysql["database"] = "" - examples.RunSqlScript(config.Mysql, common.GetCurrentCodeDir()+"/dtmsvr.sql") + examples.RunSQLScript(config.Mysql, common.GetCurrentCodeDir()+"/dtmsvr.sql") } diff --git a/examples/config.go b/examples/config.go index 10f9d6c..f89045d 100644 --- a/examples/config.go +++ b/examples/config.go @@ -4,6 +4,6 @@ type exampleConfig struct { Mysql map[string]string `yaml:"Mysql"` } -var Config = exampleConfig{} +var config = exampleConfig{} var dbName = "dtm_busi" diff --git a/examples/data.go b/examples/data.go index bf22c1f..738467e 100644 --- a/examples/data.go +++ b/examples/data.go @@ -8,8 +8,8 @@ import ( "github.com/yedf/dtm/common" ) -// RunSqlScript 1 -func RunSqlScript(mysql map[string]string, script string) { +// RunSQLScript 1 +func RunSQLScript(mysql map[string]string, script string) { conf := map[string]string{} common.MustRemarshal(mysql, &conf) conf["database"] = "" @@ -32,7 +32,7 @@ func RunSqlScript(mysql map[string]string, script string) { // PopulateMysql populate example mysql data func PopulateMysql() { - common.InitApp(common.GetProjectDir(), &Config) - Config.Mysql["database"] = dbName - RunSqlScript(Config.Mysql, common.GetCurrentCodeDir()+"/examples.sql") + common.InitApp(common.GetProjectDir(), &config) + config.Mysql["database"] = dbName + RunSQLScript(config.Mysql, common.GetCurrentCodeDir()+"/examples.sql") } diff --git a/examples/main_xa.go b/examples/main_xa.go index 97a5b5f..707aae5 100644 --- a/examples/main_xa.go +++ b/examples/main_xa.go @@ -15,7 +15,7 @@ var XaClient *dtmcli.XaClient = nil // UserAccount busi model type UserAccount struct { common.ModelBase - UserId int + UserID int Balance string } @@ -25,7 +25,7 @@ func (u *UserAccount) TableName() string { return "user_account" } // UserAccountTrading freeze user account table type UserAccountTrading struct { common.ModelBase - UserId int + UserID int TradingBalance string } @@ -33,7 +33,7 @@ type UserAccountTrading struct { func (u *UserAccountTrading) TableName() string { return "user_account_trading" } func dbGet() *common.DB { - return common.DbGet(Config.Mysql) + return common.DbGet(config.Mysql) } // XaFireRequest 1 @@ -54,8 +54,8 @@ func XaFireRequest() { func XaSetup(app *gin.Engine) { app.POST(BusiAPI+"/TransInXa", common.WrapHandler(xaTransIn)) app.POST(BusiAPI+"/TransOutXa", common.WrapHandler(xaTransOut)) - Config.Mysql["database"] = "dtm_busi" - XaClient = dtmcli.NewXaClient(DtmServer, Config.Mysql, app, Busi+"/xa") + config.Mysql["database"] = "dtm_busi" + XaClient = dtmcli.NewXaClient(DtmServer, config.Mysql, app, Busi+"/xa") } func xaTransIn(c *gin.Context) (interface{}, error) { diff --git a/examples/types.go b/examples/types.go index 1f56e1a..7e42bc8 100644 --- a/examples/types.go +++ b/examples/types.go @@ -16,13 +16,6 @@ type M = map[string]interface{} // DtmServer dtm service address const DtmServer = "http://localhost:8080/api/dtmsvr" -const ( - // SagaBarrierBusiPort saga barrier sample port - SagaBarrierBusiPort = iota + 8090 - // TccBarrierBusiPort tcc barrier sample port - TccBarrierBusiPort -) - // TransReq transaction request payload type TransReq struct { Amount int `json:"amount"`