gen_test.go 2.3 KB

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