You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-zero/tools/goctl/rpc/generator/genpb_test.go

197 lines
5.4 KiB
Go

package generator
import (
"os"
"os/exec"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
)
func Test_findPbFile(t *testing.T) {
dir := t.TempDir()
protoFile := filepath.Join(dir, "greet.proto")
err := os.WriteFile(protoFile, []byte(`
syntax = "proto3";
package greet;
option go_package="./greet";
message Req{}
message Resp{}
service Greeter {
rpc greet(Req) returns (Resp);
}
`), 0o666)
if err != nil {
t.Log(err)
return
}
t.Run("", func(t *testing.T) {
output := t.TempDir()
grpc := filepath.Join(output, "grpc")
err := pathx.MkdirIfNotExist(grpc)
if err != nil {
t.Log(err)
return
}
cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output, "--go-grpc_out="+grpc, filepath.Base(protoFile))
cmd.Dir = output
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
t.Log(err)
return
}
pbDir, err := findPbFile(output, protoFile, false)
assert.Nil(t, err)
pbGo := filepath.Join(pbDir, "greet.pb.go")
assert.True(t, pathx.FileExists(pbGo))
grpcDir, err := findPbFile(output, protoFile, true)
assert.Nil(t, err)
grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
assert.True(t, pathx.FileExists(grpcGo))
})
t.Run("", func(t *testing.T) {
output := t.TempDir()
redirect := filepath.Join(output, "pb")
grpc := filepath.Join(output, "grpc")
err := pathx.MkdirIfNotExist(grpc)
if err != nil {
t.Log(err)
return
}
cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output,
"--go-grpc_out="+grpc, filepath.Base(protoFile), "--go_opt=M"+filepath.Base(protoFile)+"="+redirect)
cmd.Dir = output
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
t.Log(err)
return
}
pbDir, err := findPbFile(output, protoFile, false)
assert.Nil(t, err)
pbGo := filepath.Join(pbDir, "greet.pb.go")
assert.True(t, pathx.FileExists(pbGo))
grpcDir, err := findPbFile(output, protoFile, true)
assert.Nil(t, err)
grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
assert.True(t, pathx.FileExists(grpcGo))
})
t.Run("", func(t *testing.T) {
output := t.TempDir()
pbeRedirect := filepath.Join(output, "redirect")
grpc := filepath.Join(output, "grpc")
grpcRedirect := filepath.Join(grpc, "redirect")
err := pathx.MkdirIfNotExist(grpc)
if err != nil {
t.Log(err)
return
}
cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output,
"--go-grpc_out="+grpc, filepath.Base(protoFile), "--go_opt=M"+filepath.Base(protoFile)+"="+pbeRedirect,
"--go-grpc_opt=M"+filepath.Base(protoFile)+"="+grpcRedirect)
cmd.Dir = output
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
t.Log(err)
return
}
pbDir, err := findPbFile(output, protoFile, false)
assert.Nil(t, err)
pbGo := filepath.Join(pbDir, "greet.pb.go")
assert.True(t, pathx.FileExists(pbGo))
grpcDir, err := findPbFile(output, protoFile, true)
assert.Nil(t, err)
grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
assert.True(t, pathx.FileExists(grpcGo))
})
t.Run("", func(t *testing.T) {
output := t.TempDir()
pbeRedirect := filepath.Join(output, "redirect")
grpc := filepath.Join(output, "grpc")
grpcRedirect := filepath.Join(grpc, "redirect")
err := pathx.MkdirIfNotExist(grpc)
if err != nil {
t.Log(err)
return
}
cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output,
"--go-grpc_out="+grpc, filepath.Base(protoFile), "--go_opt=M"+filepath.Base(protoFile)+"="+pbeRedirect,
"--go-grpc_opt=M"+filepath.Base(protoFile)+"="+grpcRedirect, "--go_opt=paths=import", "--go-grpc_opt=paths=source_relative")
cmd.Dir = output
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
t.Log(err)
return
}
pbDir, err := findPbFile(output, protoFile, false)
assert.Nil(t, err)
pbGo := filepath.Join(pbDir, "greet.pb.go")
assert.True(t, pathx.FileExists(pbGo))
grpcDir, err := findPbFile(output, protoFile, true)
assert.Nil(t, err)
grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
assert.True(t, pathx.FileExists(grpcGo))
})
t.Run("", func(t *testing.T) {
output := t.TempDir()
pbeRedirect := filepath.Join(output, "redirect")
grpc := filepath.Join(output, "grpc")
grpcRedirect := filepath.Join(grpc, "redirect")
err := pathx.MkdirIfNotExist(grpc)
if err != nil {
t.Log(err)
return
}
err = pathx.MkdirIfNotExist(pbeRedirect)
if err != nil {
t.Log(err)
return
}
err = pathx.MkdirIfNotExist(grpcRedirect)
if err != nil {
t.Log(err)
return
}
cmd := exec.Command("protoc", "-I="+filepath.Dir(protoFile), "--go_out="+output,
"--go-grpc_out="+grpc, filepath.Base(protoFile), "--go_opt=M"+filepath.Base(protoFile)+"="+pbeRedirect,
"--go-grpc_opt=M"+filepath.Base(protoFile)+"="+grpcRedirect, "--go_opt=paths=import", "--go-grpc_opt=paths=source_relative",
"--go_out="+pbeRedirect, "--go-grpc_out="+grpcRedirect)
cmd.Dir = output
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
t.Log(err)
return
}
pbDir, err := findPbFile(output, protoFile, false)
assert.Nil(t, err)
pbGo := filepath.Join(pbDir, "greet.pb.go")
assert.True(t, pathx.FileExists(pbGo))
grpcDir, err := findPbFile(output, protoFile, true)
assert.Nil(t, err)
grpcGo := filepath.Join(grpcDir, "greet_grpc.pb.go")
assert.True(t, pathx.FileExists(grpcGo))
})
}