genpb_test.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package generator
  2. import (
  3. "os"
  4. "os/exec"
  5. "path/filepath"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/util/pathx"
  9. )
  10. func Test_findPbFile(t *testing.T) {
  11. dir := t.TempDir()
  12. protoFile := filepath.Join(dir, "greet.proto")
  13. err := os.WriteFile(protoFile, []byte(`
  14. syntax = "proto3";
  15. package greet;
  16. option go_package="./greet";
  17. message Req{}
  18. message Resp{}
  19. service Greeter {
  20. rpc greet(Req) returns (Resp);
  21. }
  22. `), 0o666)
  23. if err != nil {
  24. t.Log(err)
  25. return
  26. }
  27. t.Run("", func(t *testing.T) {
  28. output := t.TempDir()
  29. grpc := filepath.Join(output, "grpc")
  30. err := pathx.MkdirIfNotExist(grpc)
  31. if err != nil {
  32. t.Log(err)
  33. return
  34. }
  35. cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output, "--go-grpc_out="+grpc, filepath.Base(protoFile))
  36. cmd.Dir = output
  37. cmd.Stdout = os.Stdout
  38. cmd.Stderr = os.Stderr
  39. err = cmd.Run()
  40. if err != nil {
  41. t.Log(err)
  42. return
  43. }
  44. pbDir, err := findPbFile(output, false)
  45. assert.Nil(t, err)
  46. pbGo := filepath.Join(pbDir, "greet.pb.go")
  47. assert.True(t, pathx.FileExists(pbGo))
  48. grpcDir, err := findPbFile(output, true)
  49. assert.Nil(t, err)
  50. grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
  51. assert.True(t, pathx.FileExists(grpcGo))
  52. })
  53. t.Run("", func(t *testing.T) {
  54. output := t.TempDir()
  55. redirect := filepath.Join(output, "pb")
  56. grpc := filepath.Join(output, "grpc")
  57. err := pathx.MkdirIfNotExist(grpc)
  58. if err != nil {
  59. t.Log(err)
  60. return
  61. }
  62. cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output,
  63. "--go-grpc_out="+grpc, filepath.Base(protoFile), "--go_opt=M"+filepath.Base(protoFile)+"="+redirect)
  64. cmd.Dir = output
  65. cmd.Stdout = os.Stdout
  66. cmd.Stderr = os.Stderr
  67. err = cmd.Run()
  68. if err != nil {
  69. t.Log(err)
  70. return
  71. }
  72. pbDir, err := findPbFile(output, false)
  73. assert.Nil(t, err)
  74. pbGo := filepath.Join(pbDir, "greet.pb.go")
  75. assert.True(t, pathx.FileExists(pbGo))
  76. grpcDir, err := findPbFile(output, true)
  77. assert.Nil(t, err)
  78. grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
  79. assert.True(t, pathx.FileExists(grpcGo))
  80. })
  81. t.Run("", func(t *testing.T) {
  82. output := t.TempDir()
  83. pbeRedirect := filepath.Join(output, "redirect")
  84. grpc := filepath.Join(output, "grpc")
  85. grpcRedirect := filepath.Join(grpc, "redirect")
  86. err := pathx.MkdirIfNotExist(grpc)
  87. if err != nil {
  88. t.Log(err)
  89. return
  90. }
  91. cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output,
  92. "--go-grpc_out="+grpc, filepath.Base(protoFile), "--go_opt=M"+filepath.Base(protoFile)+"="+pbeRedirect,
  93. "--go-grpc_opt=M"+filepath.Base(protoFile)+"="+grpcRedirect)
  94. cmd.Dir = output
  95. cmd.Stdout = os.Stdout
  96. cmd.Stderr = os.Stderr
  97. err = cmd.Run()
  98. if err != nil {
  99. t.Log(err)
  100. return
  101. }
  102. pbDir, err := findPbFile(output, false)
  103. assert.Nil(t, err)
  104. pbGo := filepath.Join(pbDir, "greet.pb.go")
  105. assert.True(t, pathx.FileExists(pbGo))
  106. grpcDir, err := findPbFile(output, true)
  107. assert.Nil(t, err)
  108. grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
  109. assert.True(t, pathx.FileExists(grpcGo))
  110. })
  111. t.Run("", func(t *testing.T) {
  112. output := t.TempDir()
  113. pbeRedirect := filepath.Join(output, "redirect")
  114. grpc := filepath.Join(output, "grpc")
  115. grpcRedirect := filepath.Join(grpc, "redirect")
  116. err := pathx.MkdirIfNotExist(grpc)
  117. if err != nil {
  118. t.Log(err)
  119. return
  120. }
  121. cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output,
  122. "--go-grpc_out="+grpc, filepath.Base(protoFile), "--go_opt=M"+filepath.Base(protoFile)+"="+pbeRedirect,
  123. "--go-grpc_opt=M"+filepath.Base(protoFile)+"="+grpcRedirect, "--go_opt=paths=import", "--go-grpc_opt=paths=source_relative")
  124. cmd.Dir = output
  125. cmd.Stdout = os.Stdout
  126. cmd.Stderr = os.Stderr
  127. err = cmd.Run()
  128. if err != nil {
  129. t.Log(err)
  130. return
  131. }
  132. pbDir, err := findPbFile(output, false)
  133. assert.Nil(t, err)
  134. pbGo := filepath.Join(pbDir, "greet.pb.go")
  135. assert.True(t, pathx.FileExists(pbGo))
  136. grpcDir, err := findPbFile(output, true)
  137. assert.Nil(t, err)
  138. grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
  139. assert.True(t, pathx.FileExists(grpcGo))
  140. })
  141. t.Run("", func(t *testing.T) {
  142. output := t.TempDir()
  143. pbeRedirect := filepath.Join(output, "redirect")
  144. grpc := filepath.Join(output, "grpc")
  145. grpcRedirect := filepath.Join(grpc, "redirect")
  146. err := pathx.MkdirIfNotExist(grpc)
  147. if err != nil {
  148. t.Log(err)
  149. return
  150. }
  151. err = pathx.MkdirIfNotExist(pbeRedirect)
  152. if err != nil {
  153. t.Log(err)
  154. return
  155. }
  156. err = pathx.MkdirIfNotExist(grpcRedirect)
  157. if err != nil {
  158. t.Log(err)
  159. return
  160. }
  161. cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output,
  162. "--go-grpc_out="+grpc, filepath.Base(protoFile), "--go_opt=M"+filepath.Base(protoFile)+"="+pbeRedirect,
  163. "--go-grpc_opt=M"+filepath.Base(protoFile)+"="+grpcRedirect, "--go_opt=paths=import", "--go-grpc_opt=paths=source_relative",
  164. "--go_out="+pbeRedirect, "--go-grpc_out="+grpcRedirect)
  165. cmd.Dir = output
  166. cmd.Stdout = os.Stdout
  167. cmd.Stderr = os.Stderr
  168. err = cmd.Run()
  169. if err != nil {
  170. t.Log(err)
  171. return
  172. }
  173. pbDir, err := findPbFile(output, false)
  174. assert.Nil(t, err)
  175. pbGo := filepath.Join(pbDir, "greet.pb.go")
  176. assert.True(t, pathx.FileExists(pbGo))
  177. grpcDir, err := findPbFile(output, true)
  178. assert.Nil(t, err)
  179. grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
  180. assert.True(t, pathx.FileExists(grpcGo))
  181. })
  182. }