gen_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package generator
  2. import (
  3. "go/build"
  4. "os"
  5. "path/filepath"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/tal-tech/go-zero/core/logx"
  9. "github.com/tal-tech/go-zero/core/stringx"
  10. conf "github.com/tal-tech/go-zero/tools/goctl/config"
  11. "github.com/tal-tech/go-zero/tools/goctl/rpc/execx"
  12. )
  13. var cfg = &conf.Config{
  14. NamingFormat: "gozero",
  15. }
  16. func TestRpcGenerate(t *testing.T) {
  17. _ = Clean()
  18. dispatcher := NewDefaultGenerator()
  19. err := dispatcher.Prepare()
  20. if err != nil {
  21. logx.Error(err)
  22. return
  23. }
  24. projectName := stringx.Rand()
  25. g := NewRpcGenerator(dispatcher, cfg)
  26. // case go path
  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. err = g.Generate("./test.proto", projectDir, []string{src})
  38. assert.Nil(t, err)
  39. _, err = execx.Run("go test "+projectName, projectDir)
  40. if err != nil {
  41. assert.Contains(t, err.Error(), "not in GOROOT")
  42. }
  43. // case go mod
  44. workDir := t.TempDir()
  45. name := filepath.Base(workDir)
  46. _, err = execx.Run("go mod init "+name, workDir)
  47. if err != nil {
  48. logx.Error(err)
  49. return
  50. }
  51. projectDir = filepath.Join(workDir, projectName)
  52. err = g.Generate("./test.proto", projectDir, []string{src})
  53. assert.Nil(t, err)
  54. _, err = execx.Run("go test "+projectName, projectDir)
  55. if err != nil {
  56. assert.Contains(t, err.Error(), "not in GOROOT")
  57. }
  58. // case not in go mod and go path
  59. err = g.Generate("./test.proto", projectDir, []string{src})
  60. assert.Nil(t, err)
  61. _, err = execx.Run("go test "+projectName, projectDir)
  62. if err != nil {
  63. assert.Contains(t, err.Error(), "not in GOROOT")
  64. }
  65. // invalid directory
  66. projectDir = filepath.Join(t.TempDir(), ".....")
  67. err = g.Generate("./test.proto", projectDir, nil)
  68. assert.NotNil(t, err)
  69. }