gen_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package generator
  2. import (
  3. "fmt"
  4. "go/build"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "testing"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. "github.com/zeromicro/go-zero/core/stringx"
  12. "github.com/zeromicro/go-zero/tools/goctl/rpc/execx"
  13. )
  14. func TestRpcGenerate(t *testing.T) {
  15. _ = Clean()
  16. g := NewGenerator("gozero", true)
  17. err := g.Prepare()
  18. if err != nil {
  19. logx.Error(err)
  20. return
  21. }
  22. projectName := stringx.Rand()
  23. src := filepath.Join(build.Default.GOPATH, "src")
  24. _, err = os.Stat(src)
  25. if err != nil {
  26. return
  27. }
  28. projectDir := filepath.Join(src, projectName)
  29. srcDir := projectDir
  30. defer func() {
  31. _ = os.RemoveAll(srcDir)
  32. }()
  33. common, err := filepath.Abs(".")
  34. assert.Nil(t, err)
  35. // case go path
  36. t.Run("GOPATH", func(t *testing.T) {
  37. ctx := &ZRpcContext{
  38. Src: "./test.proto",
  39. ProtocCmd: fmt.Sprintf("protoc -I=%s test.proto --go_out=%s --go_opt=Mbase/common.proto=./base --go-grpc_out=%s",
  40. common, projectDir, projectDir),
  41. IsGooglePlugin: true,
  42. GoOutput: projectDir,
  43. GrpcOutput: projectDir,
  44. Output: projectDir,
  45. }
  46. err = g.Generate(ctx)
  47. assert.Nil(t, err)
  48. _, err = execx.Run("go test "+projectName, projectDir)
  49. if err != nil {
  50. assert.True(t, func() bool {
  51. return strings.Contains(err.Error(),
  52. "not in GOROOT") || strings.Contains(err.Error(), "cannot find package")
  53. }())
  54. }
  55. })
  56. // case go mod
  57. t.Run("GOMOD", func(t *testing.T) {
  58. workDir := projectDir
  59. name := filepath.Base(projectDir)
  60. _, err = execx.Run("go mod init "+name, workDir)
  61. if err != nil {
  62. logx.Error(err)
  63. return
  64. }
  65. projectDir = filepath.Join(workDir, projectName)
  66. ctx := &ZRpcContext{
  67. Src: "./test.proto",
  68. ProtocCmd: fmt.Sprintf("protoc -I=%s test.proto --go_out=%s --go_opt=Mbase/common.proto=./base --go-grpc_out=%s",
  69. common, projectDir, projectDir),
  70. IsGooglePlugin: true,
  71. GoOutput: projectDir,
  72. GrpcOutput: projectDir,
  73. Output: projectDir,
  74. }
  75. err = g.Generate(ctx)
  76. assert.Nil(t, err)
  77. })
  78. }