diff --git a/common/utils.go b/common/utils.go index 3e5aa7b..65377db 100644 --- a/common/utils.go +++ b/common/utils.go @@ -139,7 +139,9 @@ func WrapHandler(fn func(*gin.Context) (interface{}, error)) gin.HandlerFunc { return func(c *gin.Context) { r, err := fn(c) var b = []byte{} - if err == nil { + if resp, ok := r.(*resty.Response); ok { // 如果是response,则取出body直接处理 + b = resp.Body() + } else if err == nil { b, err = json.Marshal(r) } if err != nil { diff --git a/dtmcli/tcc.go b/dtmcli/tcc.go index 9bceaea..08a9037 100644 --- a/dtmcli/tcc.go +++ b/dtmcli/tcc.go @@ -83,7 +83,7 @@ func (t *Tcc) CallBranch(body interface{}, tryURL string, confirmURL string, can if IsFailure(resp, err) { return resp, err } - resp, err = common.RestyClient.R(). + return common.RestyClient.R(). SetBody(body). SetQueryParams(common.MS{ "dtm": t.Dtm, @@ -93,5 +93,4 @@ func (t *Tcc) CallBranch(body interface{}, tryURL string, confirmURL string, can "branch_type": "try", }). Post(tryURL) - return resp, err } diff --git a/dtmcli/types.go b/dtmcli/types.go index 7679a96..0cd081a 100644 --- a/dtmcli/types.go +++ b/dtmcli/types.go @@ -21,13 +21,13 @@ func MustGenGid(server string) string { // IsFailure 如果err非空,或者ret是http的响应且包含FAILURE,那么返回true。此时认为业务调用失败 func IsFailure(res interface{}, err error) bool { resp, ok := res.(*resty.Response) - return err != nil || ok && strings.Contains(resp.String(), "FAILURE") + return err != nil || ok && (strings.Contains(resp.String(), "FAILURE") || resp.IsError()) } // PanicIfFailure 如果err非空,或者ret是http的响应且包含FAILURE,那么Panic。此时认为业务调用失败 func PanicIfFailure(res interface{}, err error) { resp, ok := res.(*resty.Response) - failure := err != nil || ok && strings.Contains(resp.String(), "FAILURE") + failure := err != nil || ok && (strings.Contains(resp.String(), "FAILURE") || resp.IsError()) if failure { panic(fmt.Errorf("dtm failure ret: %v err %v", res, err)) } @@ -38,7 +38,7 @@ func CheckDtmResponse(resp *resty.Response, err error) error { if err != nil { return err } - if !strings.Contains(resp.String(), "SUCCESS") { + if !strings.Contains(resp.String(), "SUCCESS") || resp.IsError() { return fmt.Errorf("dtm response failed: %s", resp.String()) } return nil diff --git a/dtmsvr/examples_test.go b/dtmsvr/examples_test.go index f763a6f..2c2cc0f 100644 --- a/dtmsvr/examples_test.go +++ b/dtmsvr/examples_test.go @@ -9,12 +9,12 @@ import ( func TestExamples(t *testing.T) { // for coverage examples.QsStartSvr() - // assertSucceed(t, examples.QsFireRequest()) - // assertSucceed(t, examples.MsgFireRequest()) + assertSucceed(t, examples.QsFireRequest()) + assertSucceed(t, examples.MsgFireRequest()) assertSucceed(t, examples.SagaBarrierFireRequest()) - // assertSucceed(t, examples.SagaFireRequest()) - // assertSucceed(t, examples.TccBarrierFireRequest()) - // assertSucceed(t, examples.TccFireRequest()) - // assertSucceed(t, examples.TccFireRequestNested()) - // assertSucceed(t, examples.XaFireRequest()) + assertSucceed(t, examples.SagaFireRequest()) + assertSucceed(t, examples.TccBarrierFireRequest()) + assertSucceed(t, examples.TccFireRequest()) + assertSucceed(t, examples.TccFireRequestNested()) + assertSucceed(t, examples.XaFireRequest()) } diff --git a/examples/main_tcc.go b/examples/main_tcc.go index 40f5a74..fd7f182 100644 --- a/examples/main_tcc.go +++ b/examples/main_tcc.go @@ -13,9 +13,7 @@ func TccSetup(app *gin.Engine) { tcc, err := dtmcli.TccFromReq(c) e2p(err) logrus.Printf("TransInTccParent ") - _, rerr := tcc.CallBranch(&TransReq{Amount: reqFrom(c).Amount}, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert") - e2p(rerr) - return M{"dtm_result": "SUCCESS"}, nil + return tcc.CallBranch(&TransReq{Amount: reqFrom(c).Amount}, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert") })) }