From dc0bd1d0da9b058b03776de2b9675c03d24908b2 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Tue, 12 Jul 2022 16:00:19 +0800 Subject: [PATCH] add tcc workflow test --- test/workflow_http_test.go | 76 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/test/workflow_http_test.go b/test/workflow_http_test.go index d79086e..59b9d55 100644 --- a/test/workflow_http_test.go +++ b/test/workflow_http_test.go @@ -88,6 +88,82 @@ func TestWorkflowRollback(t *testing.T) { assertSameBalance(t, before, "mysql") } +func TestWorkflowTcc(t *testing.T) { + workflow.SetProtocolForTest(dtmimp.ProtocolHTTP) + req := busi.GenReqHTTP(30, false, false) + gid := dtmimp.GetFuncName() + + workflow.Register(gid, func(wf *workflow.Workflow, data []byte) error { + var req busi.ReqHTTP + dtmimp.MustUnmarshal(data, &req) + _, err := wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error { + _, err := wf.NewRequest().SetBody(req).Post(Busi + "/TccBTransOutCancel") + return err + }).OnCommit(func(bb *dtmcli.BranchBarrier) error { + _, err := wf.NewRequest().SetBody(req).Post(Busi + "/TccBTransOutConfirm") + return err + }).NewRequest().SetBody(req).Post(Busi + "/TccBTransOutTry") + if err != nil { + return err + } + _, err = wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error { + _, err := wf.NewRequest().SetBody(req).Post(Busi + "/TccBTransInCancel") + return err + }).OnCommit(func(bb *dtmcli.BranchBarrier) error { + _, err := wf.NewRequest().SetBody(req).Post(Busi + "/TccBTransInConfirm") + return err + }).NewRequest().SetBody(req).Post(Busi + "/TccBTransInTry") + if err != nil { + return err + } + return nil + }) + + before := getBeforeBalances("mysql") + err := workflow.Execute(gid, gid, dtmimp.MustMarshal(req)) + assert.Nil(t, err) + assert.Equal(t, StatusSucceed, getTransStatus(gid)) + assertNotSameBalance(t, before, "mysql") +} + +func TestWorkflowTccRollback(t *testing.T) { + workflow.SetProtocolForTest(dtmimp.ProtocolHTTP) + req := busi.GenReqHTTP(30, false, true) + gid := dtmimp.GetFuncName() + + workflow.Register(gid, func(wf *workflow.Workflow, data []byte) error { + var req busi.ReqHTTP + dtmimp.MustUnmarshal(data, &req) + _, err := wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error { + _, err := wf.NewRequest().SetBody(req).Post(Busi + "/TccBTransOutCancel") + return err + }).OnCommit(func(bb *dtmcli.BranchBarrier) error { + _, err := wf.NewRequest().SetBody(req).Post(Busi + "/TccBTransOutConfirm") + return err + }).NewRequest().SetBody(req).Post(Busi + "/TccBTransOutTry") + if err != nil { + return err + } + _, err = wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error { + _, err := wf.NewRequest().SetBody(req).Post(Busi + "/TccBTransInCancel") + return err + }).OnCommit(func(bb *dtmcli.BranchBarrier) error { + _, err := wf.NewRequest().SetBody(req).Post(Busi + "/TccBTransInConfirm") + return err + }).NewRequest().SetBody(req).Post(Busi + "/TccBTransInTry") + if err != nil { + return err + } + return nil + }) + + before := getBeforeBalances("mysql") + err := workflow.Execute(gid, gid, dtmimp.MustMarshal(req)) + assert.Error(t, err) + assert.Equal(t, StatusFailed, getTransStatus(gid)) + assertSameBalance(t, before, "mysql") +} + func TestWorkflowError(t *testing.T) { workflow.SetProtocolForTest(dtmimp.ProtocolHTTP) req := busi.GenReqHTTP(30, false, false)