gen_test.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package generator
  2. import (
  3. "go/build"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/tal-tech/go-zero/core/logx"
  10. "github.com/tal-tech/go-zero/core/stringx"
  11. conf "github.com/tal-tech/go-zero/tools/goctl/config"
  12. "github.com/tal-tech/go-zero/tools/goctl/rpc/execx"
  13. "github.com/tal-tech/go-zero/tools/goctl/util"
  14. )
  15. var cfg = &conf.Config{
  16. NamingFormat: "gozero",
  17. }
  18. func TestRpcGenerate(t *testing.T) {
  19. _ = Clean()
  20. dispatcher := NewDefaultGenerator()
  21. err := dispatcher.Prepare()
  22. if err != nil {
  23. logx.Error(err)
  24. return
  25. }
  26. projectName := stringx.Rand()
  27. g := NewRPCGenerator(dispatcher, cfg)
  28. src := filepath.Join(build.Default.GOPATH, "src")
  29. _, err = os.Stat(src)
  30. if err != nil {
  31. return
  32. }
  33. projectDir := filepath.Join(src, projectName)
  34. srcDir := projectDir
  35. defer func() {
  36. _ = os.RemoveAll(srcDir)
  37. }()
  38. common, err := filepath.Abs(".")
  39. assert.Nil(t, err)
  40. // case go path
  41. t.Run("GOPATH", func(t *testing.T) {
  42. err = g.Generate("./test.proto", projectDir, []string{common}, "Mbase/common.proto=./base")
  43. assert.Nil(t, err)
  44. _, err = execx.Run("go test "+projectName, projectDir)
  45. if err != nil {
  46. assert.True(t, func() bool {
  47. return strings.Contains(err.Error(), "not in GOROOT") || strings.Contains(err.Error(), "cannot find package")
  48. }())
  49. }
  50. })
  51. // case go mod
  52. t.Run("GOMOD", func(t *testing.T) {
  53. workDir := util.MustTempDir()
  54. name := filepath.Base(workDir)
  55. _, err = execx.Run("go mod init "+name, workDir)
  56. if err != nil {
  57. logx.Error(err)
  58. return
  59. }
  60. projectDir = filepath.Join(workDir, projectName)
  61. err = g.Generate("./test.proto", projectDir, []string{common}, "Mbase/common.proto=./base")
  62. assert.Nil(t, err)
  63. _, err = execx.Run("go test "+projectName, projectDir)
  64. if err != nil {
  65. assert.True(t, func() bool {
  66. return strings.Contains(err.Error(), "not in GOROOT") || strings.Contains(err.Error(), "cannot find package")
  67. }())
  68. }
  69. })
  70. // case not in go mod and go path
  71. t.Run("OTHER", func(t *testing.T) {
  72. err = g.Generate("./test.proto", projectDir, []string{common, src}, "Mbase/common.proto=./base")
  73. assert.Nil(t, err)
  74. _, err = execx.Run("go test "+projectName, projectDir)
  75. if err != nil {
  76. assert.True(t, func() bool {
  77. return strings.Contains(err.Error(), "not in GOROOT") || strings.Contains(err.Error(), "cannot find package")
  78. }())
  79. }
  80. })
  81. }