github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/cmd/ddl_test.go (about)

     1  package cmd_test
     2  
     3  import (
     4  	"bytes"
     5  	"github.com/spf13/cobra"
     6  	"github.com/unionj-cloud/go-doudou/cmd/internal/svc"
     7  	"github.com/unionj-cloud/go-doudou/toolkit/pathutils"
     8  	"os"
     9  	"os/exec"
    10  )
    11  
    12  var testDir string
    13  
    14  func init() {
    15  	testDir = pathutils.Abs("testdata")
    16  }
    17  
    18  func ExecuteCommandC(root *cobra.Command, args ...string) (c *cobra.Command, output string, err error) {
    19  	buf := new(bytes.Buffer)
    20  	root.SetOut(buf)
    21  	root.SetErr(buf)
    22  	root.SetArgs(args)
    23  
    24  	c, err = root.ExecuteC()
    25  
    26  	return c, buf.String(), err
    27  }
    28  
    29  // NewMockSvc new Svc instance for unit test purpose
    30  func NewMockSvc(dir string, opts ...svc.SvcOption) svc.ISvc {
    31  	return svc.NewSvc(dir, svc.WithRunner(mockRunner{}))
    32  }
    33  
    34  type mockRunner struct {
    35  }
    36  
    37  func (r mockRunner) Output(command string, args ...string) ([]byte, error) {
    38  	return []byte("go version go1.17.8 darwin/amd64"), nil
    39  }
    40  
    41  func (r mockRunner) Run(command string, args ...string) error {
    42  	cs := []string{"-test.run=TestHelperProcess", "--"}
    43  	cs = append(cs, args...)
    44  	c := exec.Command(os.Args[0], cs...)
    45  	c.Env = []string{"GO_WANT_HELPER_PROCESS=1"}
    46  	c.Stdout = os.Stdout
    47  	c.Stderr = os.Stderr
    48  	if err := c.Run(); err != nil {
    49  		panic(err)
    50  	}
    51  	return nil
    52  }
    53  
    54  func (r mockRunner) Start(command string, args ...string) (*exec.Cmd, error) {
    55  	cs := []string{"-test.run=TestHelperProcess", "--"}
    56  	cs = append(cs, args...)
    57  	cmd := exec.Command(os.Args[0], cs...)
    58  	cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"}
    59  	cmd.Stdout = os.Stdout
    60  	cmd.Stderr = os.Stderr
    61  	if err := cmd.Start(); err != nil {
    62  		panic(err)
    63  	}
    64  	return cmd, nil
    65  }